資源簡介
PEGASI路由算法,尋找距離節(jié)點(diǎn)最近的節(jié)點(diǎn),練成一條線。
代碼片段和文件信息
clear;
clc;
clf;
NodeNums=100;????????????????????????????????
AreaR=100;??????????????????????????????????
Bx=20;???????????
By=150;?????????????????????????????????????
En=0.25;????????????????????????????????????
send_to_sink=0;?????????????????????????????%%簇頭距離基站距離?????????????????
data_pkt_length=2000;???????????????????????
die_node_num=0;?????????????????????????????%%本輪死亡節(jié)點(diǎn)數(shù)
die_node_num_pri=0;?????????????????????????
run_round=0;????????????????????????????????
En_Cost=0;??????????????????????????????????%%本輪消耗能量
En_Cost_pre=0;??????????????????????????????%%上一輪消耗能量
En_cost_per_round=0;????????????????????????
begin_to_send=0;????????????????????????????%%開始發(fā)送的num
num=1;
alive=1;???????????????????????????????????
dead=0;
Node.x=AreaR*rand(1NodeNums);?
Node.y=AreaR*rand(1NodeNums);??????????????
Node.pri=linspace(00NodeNums);????????????
Node.already=linspace(00NodeNums);????????
Node.to_nbr_dis=zeros(NodeNums);????????????
Node.to_pri_dis=linspace(00NodeNums);?????%%與當(dāng)前節(jié)點(diǎn)最近的距離
Node.send_dis=linspace(00NodeNums);???????%%節(jié)點(diǎn)之間距離表初始為0
Node.E=linspace(EnEnNodeNums);????????????
Node.status=linspace(alivealiveNodeNums);?
ETX=50*0.000000001;?????????????????????????%%發(fā)送數(shù)據(jù)包消耗能量
ERX=50*0.000000001;?????????????????????????%%接收數(shù)據(jù)包消耗能量
Efs=100*0.000000000001;?????????????????????%%連接點(diǎn)之間的傳遞參數(shù)
Emp=0.0013*0.000000000001;??????????????????%%簇首與基站之間的傳遞參數(shù)
EDA=5*0.000000001;??????????????????????????%%融合數(shù)據(jù)消耗能量
do=sqrt(Efs/Emp);???????????????????????????%%平均半徑
%%計(jì)算各個(gè)節(jié)點(diǎn)距離基站的位置距離
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%?????????????????????????數(shù)據(jù)通信
while?(NodeNums-die_node_num)>0?%%每一輪循環(huán)為一次數(shù)據(jù)通信,直到節(jié)點(diǎn)死光
??
????if?run_round==0||die_node_num_pri~=die_node_num?????%%當(dāng)上一輪死亡節(jié)點(diǎn)不等于下一輪死亡節(jié)點(diǎn)數(shù)
Node.pri=linspace(00NodeNums);????????????????%%??與當(dāng)前節(jié)點(diǎn)最近的節(jié)點(diǎn)num
num_plot=1;
Node.already=linspace(00NodeNums);?????????????
????????for?i=1:1:NodeNums
if?Node.status(i)==alive
to_sink_dist(i)=sqrt((Node.x(i)-Bx)^2+(Node.y(i)-By)^2);
else
to_sink_dist(i)=0;
end
????????end??%%求出所有存活節(jié)點(diǎn)到基站的距離
[Max_Dis?Max_num]=max(to_sink_dist);???%%求出距離基站最大的距離
now_node=Max_num;
Node.already(now_node)=1;
node_head=Max_num;???????????????????????%%頭結(jié)點(diǎn)
% send_to_sink=now_node;
node_to_send=now_node;
start_node=now_node;?????????????????????%%求出開始節(jié)點(diǎn)
????????while?num_plot~=NodeNums-die_node_num
if?num_plot==NodeNums-die_node_num
????????????????Node.pri(now_node)=0;
node_tail=now_node;???%%記錄尾節(jié)點(diǎn)
????????????end
????????????for?j=1:1:NodeNums
if?Node.already(j)==0&&Node.status(j)==alive
Node.to_nbr_dis(now_nodej)=sqrt((Node.x(now_node)-Node.x(j))^2+(Node.y(now_node)-Node.y(j))^2);???%%與鄰居的距離
else
Node.to_nbr_dis(now_nodej)=0;
end
end
j=1;
while?Node.to_nbr_dis(now_nodej)==0??????%%即當(dāng)有節(jié)點(diǎn)死亡時(shí)
j=j+1;?????????????????%%重新編號
end
min_dis=Node.to_nbr_dis(now_nodej);
min_n
評論
共有 條評論