✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。

🍎个人主页:Matlab科研工作室

🍊个人信条:格物致知。

更多Matlab仿真内容点击👇

智能优化算法       神经网络预测       雷达通信      无线传感器        电力系统

信号处理              图像处理               路径规划       元胞自动机        无人机

⛄ 内容介绍

无线传感器网络(Wireless Sensor Network, WSN)是目前IT产业中的研究热点,具有广阔的应用前景和巨大的商业潜力,广泛应用在多个领域中。但是传感器节点的能量有限,使其存储、运算和通信能力也受到限制,因此设计WSN路由协议的首要目标就是如何降低能量消耗和延长网络生存周期。本文主要针对经典层次路由协议LEACH(Low-Energy AdaptiveClustering Hierarchy)进行多方面改进,首先将粒子群算法(Particle SwarmOptimization,PSO)改进,提出了一种新的优化算法,将其应用在簇头选择过程中,综合优化了适应度函数,以降低节点能量消耗均衡整体网络能量消耗

⛄ 部分代码

%
% 
clc;
clear;
close all;
variables;

%% Problem Definition
% addpath(genpath('D:\超级桌面\DG_MMC 副本'));
MaxIt=1000;      % Maximum Number of Iterations MaxIt=10000

nPop=10;        % Population Size (Swarm Size) nPop=50
% main_initial_stastic;

CostFunction=@(x,i,it,nPop) MMC_Lshape(x,i,it,nPop);        % Cost Function

nVar = 4;    % Number of Decision Variables
VarSize = [1 nVar];

VarMin = [0.25 0.25 1.0 0.25];   % Lower Bound of Variables VarMin   befa init incr decr
VarMax = [0.75 0.75 1.5 0.75];   % Upper Bound of Variables VarMax   0.5  0.5  1.2  0.5

%% PSO Parameters
% PSO Parameters
w=1;            % Inertia Weight
wdamp=0.99;     % Inertia Weight Damping Ratio
c1=1.0;         % Personal Learning Coefficient
c2=2.0;         % Global Learning Coefficient

% Velocity Limits
VelMax=0.2*(VarMax-VarMin);
VelMin=-VelMax;

%% Initialization
% empty_particle.Position=[];
% empty_particle.Cost=[];
% empty_particle.Velocity=[];
% empty_particle.Best.Position=[];
% empty_particle.Best.Cost=[];
% particle=repmat(empty_particle,nPop,1);
empty_particle.Position=cell(1,MaxIt);
empty_particle.Cost=cell(1,MaxIt);
empty_particle.Velocity=cell(1,MaxIt);
empty_particle.Best.Position=cell(1,MaxIt);
empty_particle.Best.Cost=cell(1,MaxIt);
particle=repmat(empty_particle,nPop,1);
GlobalBest.Cost=inf;
a=1
while a
    it=1;
    ini_it_pso=0;
    disp('==================initial==================')
    for i=1:nPop
        % Initialize Position
        for j=1:4
            x(j)=unifrnd(VarMin(j),VarMax(j),1);
            x(j)=roundn(x(j),-4);
        end
        particle(i,:).Position{it}=x;
        % Initialize Velocity
        v = zeros(VarSize);

        particle(i).Velocity{it}=v;
        % Evaluation     
        particle(i).Cost{it}=CostFunction(particle(i).Position{it},i,it,nPop);

    end
    %% 调用一次极端随机森林
    system('python test.py');
    [Data]=importdata('class_results-ET-l.txt');
    data=Data.data;
    
    for i=1:nPop
        % Update Personal Best
        particle(i).Best.Position{it}=particle(i).Position{it};
        particle(i).Best.Cost{it}=particle(i).Cost{it};

        % Update Global Best
        if particle(i).Best.Cost{it}<GlobalBest.Cost && data(i,2)==1

            GlobalBest.Position=particle(i).Best.Position{it};
            GlobalBest.Cost=particle(i).Best.Cost{it};
            a=0
        end
    end  
end
system('python switch.py');%jpg2png
outputiterop=zeros(MaxIt,2);
BestCost=zeros(MaxIt,1);
%PSO Main Loop

for it=1:MaxIt
    
    for i=1:nPop
        
        % Update Velocity
        particle(i).Velocity{it+1} = w*particle(i).Velocity{it} ...
            +c1*rand(VarSize).*(particle(i).Best.Position{it}-particle(i).Position{it}) ...
            +c2*rand(VarSize).*(GlobalBest.Position-particle(i).Position{it});
        
        % Apply Velocity Limits
        for j=1:4
        particle(i).Velocity{it+1}(j) = max(particle(i).Velocity{it+1}(j),VelMin(j));
        particle(i).Velocity{it+1}(j) = min(particle(i).Velocity{it+1}(j),VelMax(j));
        end
        % Update Position
        particle(i).Position{it+1} = particle(i).Position{it} + particle(i).Velocity{it+1};
        particle(i).Position{it+1} = roundn(particle(i).Position{it+1},-4);%圆整4位小数
        % Velocity Mirror Effect
        IsOutside=zeros(1,4);
        for j=1:4
        IsOutside(j)=(particle(i).Position{it+1}(j)<VarMin(j) | particle(i).Position{it+1}(j)>VarMax(j));
        end
        IsOutside=logical(IsOutside);
        particle(i).Velocity{it+1}(IsOutside)=-particle(i).Velocity{it+1}(IsOutside);
        % Apply Position Limits
        for j=1:4
        particle(i).Position{it+1}(j) = max(particle(i).Position{it+1}(j),VarMin(j));
        particle(i).Position{it+1}(j) = min(particle(i).Position{it+1}(j),VarMax(j));
        end
        % Evaluation
        particle(i).Cost{it+1} = CostFunction(particle(i).Position{it+1},i,it,nPop);
        
       %% 调用一次极端随机森林
        system('python test.py');
        [Data]=importdata('class_results-ET-l.txt');
        data=Data.data;
        system('python switch.py');
        % Update Personal Best
        if particle(i).Cost{it+1}<particle(i).Best.Cost{it} && data(1,2)==1
            %disp(['label:' sprintf('%4i\t',data(1,2))])
            particle(i).Best.Position{it+1}=particle(i).Position{it+1};
            particle(i).Best.Cost{it+1}=particle(i).Cost{it+1};
            
            % Update Global Best
            if particle(i).Best.Cost{it+1}<GlobalBest.Cost && data(1,2)==1
                GlobalBest.Position=particle(i).Best.Position{it+1};
                GlobalBest.Cost=particle(i).Best.Cost{it+1};
            end
        else
            particle(i).Best.Position{it+1}=particle(i).Best.Position{it};
            particle(i).Best.Cost{it+1}=particle(i).Best.Cost{it};
            GlobalBest.Position=GlobalBest.Position;
            GlobalBest.Cost=GlobalBest.Cost;
        end
        
    end
    BestCost(it)=GlobalBest.Cost;
    %output the optimum result of each iteration
    for ii=1:nPop
    if  particle(ii).Best.Cost{it+1}==BestCost(it)
        itt=ii;
        outputiterop(it,:)=[ii,it];
        break;
     end
    end
    
    disp(['Iteration ' num2str(it) ': Best Cost = ' num2str(BestCost(it))]);
    
    w=w*wdamp;
    %收敛判断
    if it>2&&(BestCost(it)~=BestCost(it-1))
        cha = BestCost(it-1)-BestCost(it)
        if cha <0.005
            save all
            break;
        end
    end
    if it>50
        if BestCost(it) == BestCost(it-49)
            save all
            break;
        end
    end    
    save all
    disp('data saved')
end
BestSol = GlobalBest.Position;
% nPopff=find(particle.Best.Cost{MaxIt+1}==min(particle.Best.Cost{MaxIt+1}));
%% Results
path_in1='D:\超级桌面\MMC-SMO-改\';
figure;
plot(BestCost,'LineWidth',2);
% semilogy(BestCost,'LineWidth',2);
xlabel('Iteration');
ylabel('Best Cost');
grid on;
name=strcat('pso','MMC');
saveas(gca,[path_in1,name],'jpg');    % 保存图片(以数字命名)
for ii=1:nPop
    if min(particle(ii).Best.Cost{it+1})==BestCost(MaxIt,1)
        itt=ii;
        break;
    end
end

⛄ 运行结果

【leach协议】基于混沌粒子群算法改进多目标能量均衡高效WSN的LEACH协议附matlab代码_ide

【leach协议】基于混沌粒子群算法改进多目标能量均衡高效WSN的LEACH协议附matlab代码_路由协议_02

【leach协议】基于混沌粒子群算法改进多目标能量均衡高效WSN的LEACH协议附matlab代码_路由协议_03

【leach协议】基于混沌粒子群算法改进多目标能量均衡高效WSN的LEACH协议附matlab代码_ide_04

【leach协议】基于混沌粒子群算法改进多目标能量均衡高效WSN的LEACH协议附matlab代码_ci_05

⛄ 参考文献

[1] 黄利晓, 王晖, 袁利永,等. 基于能量均衡高效WSN的LEACH协议改进算法[J]. 通信学报, 2017(S2):6.

[2] 胡黄水, 刘清雪, 王出航,等. 基于改进混沌遗传算法的WSN多跳LEACH路由协议:, CN111970742A[P]. 2020.

[3] 黄利晓. 基于能量均衡高效的LEACH路由协议优化策略[D]. 浙江师范大学.

[4] 赵静, 吕红芳, 渠帅军. 一种基于LEACH协议改进的簇间多跳路由协议[J]. 上海电机学院学报, 2016, 19(4):6.

[5] 徐丽莉, 邹修明. 基于LEACH协议的WSN改进分簇算法的理论分析[J]. 黑龙江科技信息, 2014(13):128-128.

[6] 张捷. 基于改进粒子群算法的WSN路由协议研究[D]. 太原理工大学.

⛳️ 代码获取关注我

❤️部分理论引用网络文献,若有侵权联系博主删除
❤️ 关注我领取海量matlab电子书和数学建模资料