✅作者简介:热爱科研的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 ait=1;ini_it_pso=0;disp('==================initial==================')for i=1:nPop% Initialize Positionfor j=1:4x(j)=unifrnd(VarMin(j),VarMax(j),1);x(j)=roundn(x(j),-4);endparticle(i,:).Position{it}=x;% Initialize Velocityv = zeros(VarSize);particle(i).Velocity{it}=v;% Evaluationparticle(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 Bestparticle(i).Best.Position{it}=particle(i).Position{it};particle(i).Best.Cost{it}=particle(i).Cost{it};% Update Global Bestif particle(i).Best.Cost{it}<GlobalBest.Cost && data(i,2)==1GlobalBest.Position=particle(i).Best.Position{it};GlobalBest.Cost=particle(i).Best.Cost{it};a=0endendendsystem('python switch.py');%jpg2pngoutputiterop=zeros(MaxIt,2);BestCost=zeros(MaxIt,1);%PSO Main Loopfor it=1:MaxItfor i=1:nPop% Update Velocityparticle(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 Limitsfor j=1:4particle(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 Positionparticle(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 EffectIsOutside=zeros(1,4);for j=1:4IsOutside(j)=(particle(i).Position{it+1}(j)<VarMin(j) | particle(i).Position{it+1}(j)>VarMax(j));endIsOutside=logical(IsOutside);particle(i).Velocity{it+1}(IsOutside)=-particle(i).Velocity{it+1}(IsOutside);% Apply Position Limitsfor j=1:4particle(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% Evaluationparticle(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 Bestif 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 Bestif particle(i).Best.Cost{it+1}<GlobalBest.Cost && data(1,2)==1GlobalBest.Position=particle(i).Best.Position{it+1};GlobalBest.Cost=particle(i).Best.Cost{it+1};endelseparticle(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;endendBestCost(it)=GlobalBest.Cost;%output the optimum result of each iterationfor ii=1:nPopif particle(ii).Best.Cost{it+1}==BestCost(it)itt=ii;outputiterop(it,:)=[ii,it];break;endenddisp(['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.005save allbreak;endendif it>50if BestCost(it) == BestCost(it-49)save allbreak;endendsave alldisp('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:nPopif 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电子书和数学建模资料
该文针对无线传感器网络(WSN)中的LEACH协议进行优化,结合粒子群优化(PSO)算法,提出了一种新的簇头选择策略,旨在降低节点能量消耗,实现网络能量均衡和延长网络寿命。通过迭代和适应度函数的调整,优化了路由过程,提高了协议的能效。
145

被折叠的 条评论
为什么被折叠?



