資源簡介
基于matlab的PSO版leach,一種改進,智能優化算法 粒子群算法的leach算法協議,僅供大家參考
代碼片段和文件信息
clear;
xm=100;?%X軸?Y軸
ym=100;?%%
sink.x=0.5*xm;?%傳輸目的地(基站)
sink.y=0.5*ym;?%
n=100;%節點總數
p=0.1;%簇頭節點的概率
a=0.5;%%%%%%%%%%%%%%適應值函數歸一化比例
E0=0.05;%初始能量
ETX=50*0.000000001;%傳輸能量/bit
ERX=50*0.000000001;%接收能量/bit
EFS=10*0.000000000001;%耗散能量/bit
EMP=0.0013*0.000000000001;
EDA=5*0.000000001;%融合能量/bit
rmax=300;%總輪數
do=sqrt(EFS/EMP);?%???
figure(1);%圖
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%~~~~~~~初始化,隨機選節點坐標、節點標準
for?i=1:1:n
????S(i).xd=rand(11)*xm;%X
????S(i).yd=rand(11)*ym;%Y
????S(i).G=0;%每一周期結束此變量為0
????S(i).E=E0;?%能量
????S(i).F=0;%???
????S(i).type=‘N‘;%節點類型為普通
????S(i).cluster=0;%第i個節點所屬簇的id,初始為0
????S(i).AVG=0;
????temp_rnd=i;?%??
????plot(S(i).xdS(i).yd‘o‘);
????hold?on;
end
%~~~~~~~~~~
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
S(n+1).xd=sink.x;?%例如100節點,?基站為101
S(n+1).yd=sink.y;
plot(S(n+1).xdS(n+1).yd‘x‘);?
figure(1);
countCHs=0;
rcountCHs=0;
cluster=1;?%族頭
countCHs;
rcountCHs=rcountCHs+countCHs;
flag_first_dead=0;?%第一個死亡節點
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%~~~~~~~~~~~~~~~~~
for?r=0:1:rmax?
????r?%輸出第幾輪
????if(mod(rround(1/p))==0)?%?判斷T(n)?by?31/52?
????????for?i=1:1:n;
????????????S(i).G=0;
????????????S(i).cl=0;
????????end
????end
????
????%初始為0
????hold?off;
????dead=0;
????packets_TO_BS=0;
????packets_TO_CH=0;
????PACKETS_TO_BS(r+1)=0;
????PACKETS_TO_CH(r+1)=0;
????figure(1);
????
????%%%%%%%%%%%%%%%%%%%%%%%
????%~~~~將死亡節點判為紅色,未死亡的為黑色
????for?i=1:1:n
????????if(S(i).E<=0)?%能量為0時?節點死亡
????????????plot(S(i).xdS(i).yd‘red?.‘);
????????????dead=dead+1;
????????????hold?on;
????????end
????????if(S(i).E>0)
????????????S(i).type=‘N‘;
????????????plot(S(i).xdS(i).yd‘o‘);
????????????hold?on;
????????end
????end
????%~~~~~~~~~
????%%%%%%%%%%%%%%%%%%%%%%
????
????plot(S(n+1).xdS(n+1).yd‘x‘);
????STATISTICS(r+1).DEAD=dead;?%統計死亡數
????DEAD(r+1)=dead;?%
????
????%%%%%%%%%%%%%%%%%%%%%%%%%%
????%~~~~~~~~~~~~~~~~~死亡數等于1時,?記第一個死亡
????if?(dead==1)
????????if(flag_first_dead==0)
????????????first_dead=r;
????????????flag_first_dead=1;
????????end
????end
????%~~~~~~
????%%%%%%%%%%%%%%%%%%%%%%%%%%%
????
????%
????countCHs=0;
????cluster=1;
????
????%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
????%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~begin選臨時簇頭,已去除臨時簇頭傳輸消息!!
????for?i=1:1:n
????????if(S(i).E>0)?%能量大于0
????????????if(S(i).G<=0)?%???
????????????????temp_rand1=rand;?%隨機數
????????????????if(temp_rand1<=(p/(1-p*mod(rround(1/p)))))?%隨機數與T(n)判斷,小成為簇頭節點
????????????????????S(i).type=‘D‘;?%類型變換,第一輪為臨時簇頭
????????????????????D(cluster).xd=S(i).xd;?%簇頭節點X軸
????????????????????D(cluster).yd=S(i).yd;?%簇頭節點Y軸
????????????????????S(i).cluster=cluster;?%記入簇頭數
????????????????????cluster=cluster+1;?%簇頭加1
????????????????????countCHs=countCHs+1;?%簇頭節點數目?????
????????????????????packets_TO_BS=packets_TO_BS+1;%數據包+1
????????????????end
????????????end
????????end
????end
????%~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~end選臨時簇頭
????%%%%%%%%%%%%%%%%%%%%%%%%
- 上一篇:在matlab中ica算法實現源碼
- 下一篇:基于邊緣的圖像配準程序
評論
共有 條評論