目录
💥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.
部分理论引用网络文献,若有侵权联系博主删除。
















![C嘎嘎~~ [类 下篇之运算符重载]](https://img-blog.csdnimg.cn/7a2a80049044454e9edb8de6c6241cea.png)


