资源简介
PEGASI路由算法,寻找距离节点最近的节点,练成一条线。
代码片段和文件信息
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; %%本轮死亡节点数
die_node_num_pri=0;
run_round=0;
En_Cost=0; %%本轮消耗能量
En_Cost_pre=0; %%上一轮消耗能量
En_cost_per_round=0;
begin_to_send=0; %%开始发送的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); %%与当前节点最近的距离
Node.send_dis=linspace(00NodeNums); %%节点之间距离表初始为0
Node.E=linspace(EnEnNodeNums);
Node.status=linspace(alivealiveNodeNums);
ETX=50*0.000000001; %%发送数据包消耗能量
ERX=50*0.000000001; %%接收数据包消耗能量
Efs=100*0.000000000001; %%连接点之间的传递参数
Emp=0.0013*0.000000000001; %%簇首与基站之间的传递参数
EDA=5*0.000000001; %%融合数据消耗能量
do=sqrt(Efs/Emp); %%平均半径
%%计算各个节点距离基站的位置距离
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% 数据通信
while (NodeNums-die_node_num)>0 %%每一轮循环为一次数据通信,直到节点死光
if run_round==0||die_node_num_pri~=die_node_num %%当上一轮死亡节点不等于下一轮死亡节点数
Node.pri=linspace(00NodeNums); %% 与当前节点最近的节点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 %%求出所有存活节点到基站的距离
[Max_Dis Max_num]=max(to_sink_dist); %%求出距离基站最大的距离
now_node=Max_num;
Node.already(now_node)=1;
node_head=Max_num; %%头结点
% send_to_sink=now_node;
node_to_send=now_node;
start_node=now_node; %%求出开始节点
while num_plot~=NodeNums-die_node_num
if num_plot==NodeNums-die_node_num
Node.pri(now_node)=0;
node_tail=now_node; %%记录尾节点
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 %%即当有节点死亡时
j=j+1; %%重新编号
end
min_dis=Node.to_nbr_dis(now_nodej);
min_n
评论
共有 条评论