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

该文针对无线传感器网络(WSN)中的LEACH协议进行优化,结合粒子群优化(PSO)算法,提出了一种新的簇头选择策略,旨在降低节点能量消耗,实现网络能量均衡和延长网络寿命。通过迭代和适应度函数的调整,优化了路由过程,提高了协议的能效。
摘要由CSDN通过智能技术生成

✅作者简介:热爱科研的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=10000nPop=10;        % Population Size (Swarm Size) nPop=50% main_initial_stastic;CostFunction=@(x,i,it,nPop) MMC_Lshape(x,i,it,nPop);        % Cost FunctionnVar = 4;    % Number of Decision VariablesVarSize = [1 nVar];VarMin = [0.25 0.25 1.0 0.25];   % Lower Bound of Variables VarMin   befa init incr decrVarMax = [0.75 0.75 1.5 0.75];   % Upper Bound of Variables VarMax   0.5  0.5  1.2  0.5%% PSO Parameters% PSO Parametersw=1;            % Inertia Weightwdamp=0.99;     % Inertia Weight Damping Ratioc1=1.0;         % Personal Learning Coefficientc2=2.0;         % Global Learning Coefficient% Velocity LimitsVelMax=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=1while 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  endsystem('python switch.py');%jpg2pngoutputiterop=zeros(MaxIt,2);BestCost=zeros(MaxIt,1);%PSO Main Loopfor 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')endBestSol = GlobalBest.Position;% nPopff=find(particle.Best.Cost{MaxIt+1}==min(particle.Best.Cost{MaxIt+1}));%% Resultspath_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;    endend

⛄ 运行结果

⛄ 参考文献

[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电子书和数学建模资料

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

matlab科研助手

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值