?? nojunyunevote2new.m.txt
字號(hào):
if CH(i)==chval
if d(i)~=0
for k=1:d(i)
schnum(neibor(i,k))=schnum(neibor(i,k))+1;
sch(neibor(i,k),schnum(neibor(i,k)))=i;
CH(neibor(i,k))=chval+1;
Eprog(neibor(i,k))=Eprog(neibor(i,k))+4*8*er+4*8*(eta*r(neibor(i,k))^2+et); %接收簇頭信息并發(fā)撤消包
if d(neibor(i,k))~=0
for b=1:d(neibor(i,k))
Eprog(neibor(neibor(i,k),b))=Eprog(neibor(neibor(i,k),b))+4*8*er; %接收撤消包
end
end
end
end
end
end
for i=1:N %按適宜性選擇簇頭
if CH(i)~=1&&CH(i)~=chval %CH(i)~=0&&CH(i)~=1
fitness1=0;
if schnum(i)~=0
for k=1:schnum(i)
if fitness(sch(i,k))>fitness1
fitness1=fitness(sch(i,k));
head=sch(i,k);
end
end
end
flag1=0;
if d(i)~=0
for k=1:d(i) %簇頭的適宜性是否在未被覆蓋的節(jié)點(diǎn)中最高
if CH(neibor(i,k))==0
if fitness(neibor(i,k))>fitness1
flag1=1;
break
end
end
end
end
if flag1==0
cluster_head(i)=head;
CH(i)=1;
Eprog(i)=Eprog(i)+6*8*(eta*r(i)^2+et); %發(fā)加入信息
end
end
end
chval=chval+2;
end
%ddddddddddddddddddddddddddd 簇形成階段每個(gè)節(jié)點(diǎn)的能量消耗 ddddddddddddddddddddddddddddddddddddddd
for i=1:N
if e(i)~=0
Eclu(i)=Einit(i)+Eprog(i);
end
end
%ddddddddddddddddddddddddddd 計(jì)算簇的個(gè)數(shù):簇頭和成員 ddddddddddddddddddddddddddddddddddddddd
temp1=cluster_head;
cluster_num=1;
for i=1:N
if e(i)~=0
if temp1(i)==0
continue
end
head=temp1(i);
temp1(i)=0;
m=1;
cluster(cluster_num,m)=head;
m=m+1;
for k=i+1:N
if head==temp1(k)
if k==head
cluster(cluster_num,m)=i;
else
cluster(cluster_num,m)=k;
end
m=m+1;
temp1(k)=0;
end
end
node_num(cluster_num)=m-1;
cluster_num=cluster_num+1;
end
end
cluster_num=cluster_num-1;
%ddddddddddddddddddddddddddd 數(shù)據(jù)傳輸階段每個(gè)節(jié)點(diǎn)的能量消耗 ddddddddddddddddddddddddddddddddddddddd
for i=1:cluster_num
Edata(cluster(i,1))=5*(128*8*er*(node_num(i)-1)+efuse*128*8*(node_num(i)-1)); %簇頭接收信息和融合信息能耗以及經(jīng)多跳發(fā)送到網(wǎng)關(guān)的能耗
for k=2:node_num(i)
Edata(cluster(i,k))=5*128*8*(et+eta*dis(cluster(i,1),cluster(i,k))^2)+5*128*8*es; % 成員節(jié)點(diǎn)采集和發(fā)送數(shù)據(jù)能耗
end
end
%下面計(jì)算簇頭到網(wǎng)關(guān)的路由
for i=1:cluster_num
if dis(cluster(i,1),N+1)<=dT
rout(cluster(i,1),1)=0;
rout1(cluster(i,1),1)=0;
continue
else
m=0;
for j=1:cluster_num
if dis(cluster(i,1),N+1)>dis(cluster(j,1),N+1)
m=m+1;
rout(cluster(i,1),m)=cluster(j,1);
end
end
if rout(cluster(i,1),1)==0
rout1(cluster(i,1),1)=0;
end
%求最佳中繼節(jié)點(diǎn)的位置(x0,y0)
x0=Loca(cluster(i,1),1)*(1-dn(cluster(i,1))/(dis(cluster(i,1),N+1)));
y0=Loca(cluster(i,1),2)*(1-dn(cluster(i,1))/(dis(cluster(i,1),N+1)))+D*dn(cluster(i,1))/(dis(cluster(i,1),N+1));
flag5=1;
rout1(cluster(i,1),1)=0;
dmin1=dn(cluster(i,1))^2;
for j=1:m
dtemp=(Loca(rout(cluster(i,1),j),1)-x0)^2+(Loca(rout(cluster(i,1),j),2)-y0)^2;
if dtemp<dmin1
dmin1=dtemp;
node=rout(cluster(i,1),j);
flag5=0;
end
end
if flag5==0
rout1(cluster(i,1),1)=node;
end
end
end
%下面計(jì)算簇頭消耗的能量
for i=1:cluster_num
if rout1(cluster(i,1),1)==0
Edata(cluster(i,1))=Edata(cluster(i,1))+128*8*(et+eta*(dis(cluster(i,1),N+1))^2);
else
temp=rout1(cluster(i,1),1);
Edata(cluster(i,1))=Edata(cluster(i,1))+128*8*(et+eta*(dis(cluster(i,1),temp))^2);
Edata(temp)=Edata(temp)+128*8*er;
for k=1:7
if rout1(temp,1)==0
Edata(temp)=Edata(temp)+128*8*(et+eta*(dis(temp,N+1))^2);
break
else
temp1=rout1(temp,1);
Edata(temp)=Edata(temp)+128*8*(et+eta*(dis(temp,temp1))^2);
Edata(temp1)=Edata(temp1)+128*8*er;
temp=temp1;
end
end
end
end
%ddddddddddddddddddddddddddd 一輪結(jié)束后每個(gè)節(jié)點(diǎn)的能量消耗和剩余能量 ddddddddddddddddddddddddddddddddddddddd
for i=1:N
if e(i)~=0
e(i)=e(i)-Edata(i)-Eclu(i);
Ecluz=Ecluz+Eclu(i);
Edataz=Edataz+Edata(i);
end
end
lunum=lunum+1;
if N==200
if lunum<=20
Ehead(t,lunum)=0;
for i=1:cluster_num
if e(i)~=0
Ehead(t,lunum)=Ehead(t,lunum)+Edata(cluster(i,1))+Eclu(cluster(i,1));
end
end
end
end
for i=1:N
if e(i)<=1*10^(-10) &&e(i)~=0 %能量耗盡后,該節(jié)點(diǎn)從鄰居集中刪去
e(i)=0;
if N==200
dienote=dienote+1;
if dienote==Nper
die(t,Nper/10)=lunum;
Nper=Nper+10;
end
end
if d(i)~=0
for k=1:d(i)
nei=neibor(i,k);
if d(nei)~=0
for j=1:d(nei)
if neibor(nei,j)==i
if j~=d(nei)
for x=j:d(nei)-1
neibor(nei,x) =neibor(nei,x+1);
end
end
break
end
end
neibor(nei,d(nei))=0;
if d(nei)>0
d(nei)=d(nei)-1;
end
end
end
end
d(i)=0;
if flag3==0
first_lu=lunum;
flag3=1;
% flag2=0;
% break
end
end
end
flag4=0;
for i=1:N
if e(i)>=1*10^(-10)
flag4=1;
break
end
end
if flag4==0
flag2=0;
last_lu=lunum;
end
end
%ddddddddddddddddddddddddddd 算法結(jié)束 ddddddddddddddddddddddddddddddddddddddd
first_luf(t)=first_lu; %重復(fù)100次,每次的第一個(gè)節(jié)點(diǎn)死去經(jīng)歷的輪數(shù)
last_luf(t)=last_lu; %重復(fù)100次,每次的最后一個(gè)節(jié)點(diǎn)死去經(jīng)歷的輪數(shù)
Ecluzf(t)=Ecluz; %重復(fù)100次,每次的簇形成消耗的能量
Edatazf(t)=Edataz; %重復(fù)100次,每次的數(shù)據(jù)傳輸消耗的能量
end % 對(duì)于相同的傳輸半徑,重復(fù)100次結(jié)束
%dddddddddddddddddddddd計(jì)算各參數(shù)100次的平均值dddddddddddddddddddddddd
sum=0;
sum1=0;
sum2=0;
sum3=0;
if N==200
for i=1:20
sum4(i)=0;
sum5(i)=0;
end
end
for i=1:g
sum=sum+first_luf(i);
sum1=sum1+last_luf(i);
sum2=sum2+Ecluzf(i);
sum3=sum3+Edatazf(i);
end
if N==200
for j=1:20
for i=1:g
sum4(j)=sum4(j)+Ehead(i,j);
sum5(j)=sum5(j)+die(i,j);
end
end
end
first_lu_z(f)=sum/g;
last_lu_z(f)=sum1/g;
Ecluzz(f)=sum2/g;
Edatazz(f)=sum3/g;
if N==200
for i=1:20
Eheadz(i)=sum4(i)/g;
diez(i)=sum5(i)/g;
end
end
N=N+50;
f=f+1;
end %程序結(jié)束
%dddddddddddddddddddd 畫圖 dddddddddddddddddddddddd
?? 快捷鍵說明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -