目录
💥1 概述
📚2 运行结果
🎉3 参考文献
👨💻4 Matlab代码
💥1 概述
由于簇的规模和簇头选择对WSN总能耗影响较大:一方面,当簇的规模较小时,易导致WSN能量消耗不合理;另一方面,当簇的规模较大时,簇头转发数据量太大、负担较重,易造成能耗增大,使普通成员节点在单位之间可发送的数据量急速降低。
基于能耗均衡的LEACH改进算法在执行时循环进行簇的重构,仍然和传统 LEACH 一样按轮(round)进行,每轮依然分成簇的建立阶段和传输数据的稳定阶段。该算法的目标是在每一轮中产生可以实现整个WSN更低能耗的最优数目的簇头,同时,在簇头的选举时充分考虑节点的剩余能量引入簇头选择新阈值,从而使能量消耗更加均衡。
📚2 运行结果
主函数部分代码:
clc; clear;%清除內存变量 xm=100;%x轴范围 ym=100;%y轴范围 sink.x=0.5*xm;%基站x轴 sink.y=0.5*ym;%基站y轴 n=100;%节点总数 p=0.1;%簇头概率 E0=0.02;%初始能量 ETX=50*0.000000000001;%传输能量,每bit,10e-12 ERX=50*0.000000000001;%接收能量,每bit Efs=10*0.000000000001;%耗散能量,每bit EDA=5*0.000000000001;%融合能耗,每bit cc=0.6;%融合率 rmax=1000;%总轮数 CM=32;%控制信息大小 DM=4000;%数据信息大小 figure(1);%显示图片 %% 为每个节点随机分配坐标,并设置初始能量为E0,节点类型为普通,并绘制基站 for i=1:1:n S(i).xd=rand(1,1)*xm; S(i).yd=rand(1,1)*ym; S(i).G=0;% 每一周期結束此变量为 0 S(i).E=E0;%设置初始能能量E0 S(i).type='N';%节点类型为普通 plot(S(i).xd,S(i).yd,'o'); hold on;%保持所画的图像 end S(n+1).xd=sink.x; S(n+1).yd=sink.y; plot(S(n+1).xd,S(n+1).yd,'x');%绘制基站节点 flag_first_dead=0;%第一个死亡节点的标识变量 %% 开始每轮循环 for r=1:1:rmax r=r+1;% 显示轮数 %% 变量初始化 % 如果轮数正好是一個周期的整数倍,则设置S(i).G为 0 if(mod(r,round(1/p))==0) for i=1:1:n S(i).G=0; end end hold off;%每轮图片重新绘制 cluster=0;%初始簇头数为0 dead=0;%初始死亡节点数为0 %%%%%%%%%绘图 %figure(1); %% 记录死亡节点 for i=1:1:n % 将能量小于等于 0 的节点绘制成紅色,并将死亡节点数增加 1 if(S(i).E<=0) %%%%%%%%%绘图 % plot(S(i).xd,S(i).yd,'red .'); dead=dead+1; if(dead==1) if(flag_first_dead==0) first_dead=r %第一个节点的死亡轮数 save ltest, first_dead; flag_first_dead=1; end end % hold on; %绘制其他节点,其他节点正常标识 else S(i).type='N'; %%%%%%%%%绘图 % plot(S(i).xd,S(i).yd,'o'); hold on; end end %%%%%%%%%绘图 % plot(S(n+1).xd,S(n+1).yd,'x');%绘制基站 Dead(r+1)=dead; %每轮记录当前的死亡节点数 save ltest, Dead(r+1);%将此数据存入ltest文件 %% 按概率选取簇头,选出簇头后标识簇头,将簇头标识(位置,距离,ID)都记录下来 for i=1:1:n if(S(i).E>0) if(S(i).G<=0) temp_rand=rand;% 取一个随机数 if(temp_rand<=((p/(1-p*mod(r,round(1/p))))*(S(i).E/E0)))%如果随机数小于等于 %if(temp_rand<=(p/(1-p*mod(r,round(1/p)))))%如果随机数小于等于 S(i).type='C';%此节点为此轮簇头 S(i).G=round(1/p)-1;%S(i).G设置为大于0,此周期不能再被选择为簇头 cluster=cluster+1;%簇头数加1 C(cluster).xd=S(i).xd; C(cluster).yd=S(i).yd;%将此节点标识为簇头 %%%%%%%%%绘图 % plot(S(i).xd,S(i).yd,'k*');%绘制此簇头 distance=sqrt((S(i).xd-(S(n+1).xd))^2+(S(i).yd-(S(n+1).yd))^2);%簇头到基站的距离 C(cluster).distance=distance;%标识为此簇头的距离 C(cluster).id=i; %此簇头的节点id packet_To_BS(cluster)=1;%发送到基站的数据包数为1,每个簇头到基站都有一个数据包 end end end end
🎉3 参考文献
[1]董嘉依,曹佳棋.基于延长WSN生命周期的CHL-LEACH算法[J].中国科技信息,2021(17):71-73.
部分理论引用网络文献,若有侵权联系博主删除。