%pegasis算法 energy=zeros(1,node_number); receive_factor=512*50*0.0001;%接收一个节点数据需要的能量 send_factor=512*12*0.001;%发送单位数据到单位距离需要的能量 node_number=100; node_x=rand(1,node_number);%节点的X值 node_y=rand(1,node_number);%节点的Y值 plot(node_x,node_y,'.')%节点撒完,且设为均匀分布 hold on %plot(node_x(1),node_y(1),'.r') hold on %plot([node_x(1) 0],[node_y(1) 0]) hold on %1.首先假设簇头节点与SINK通信的距离为每一个节点与SINK的平均距离 %2.算法先找到最远的一个节点,从这个节点开始构.入簇的节点就不再入簇.令牌很小,相当于在数据传输的时候再加一个小数据量 %3.能耗包括找邻居节点,包括稳定传输,先算稳定传输时候 %4.可能要算一个延时. p=0.15;n=fix(1/p); for round=1:n distance=zeros(1); max_distance=0; max_node=0; for i=1:node_number, distance(i)=sqrt(node_x(i)^2+node_y(i)^2); if max_distancedistance, temp_min_distance=distance; temp_node=j; end end end connect_distance(i)=temp_min_distance; connect_node(i)=temp_node; plot([node_x(connect_node(i-1)) node_x(connect_node(i))],[node_y(connect_node(i-1)) node_y(connect_node(i))],'-'); hold on energy(connect_node(i-1))=energy(connect_node(i-1))+connect_distance(i)^2*send_factor+receive_factor; energy(connect_node(i))=energy(connect_node(i))++receive_factor; end t=fix(rand(rand(1,1))*100)+1; energy(t)=energy(t)+average_distance^2*send_factor+receive_factor; end receive_factor=512*50*0.0001;%接收一个节点数据需要的能量 receive_consumption=100*receive_factor;%第一步,不变的能量:簇头节点接收别人信号的总能量 energy_consumption=zeros(1,node_number); send_factor=512*12*0.001;%发送单位数据到单位距离需要的能量 %第二步每一个节点的一跳发送能量 for i=1:node_number, energy_consumption(i)=connect_distance(i)^2*send_factor+receive_factor; end consumption=receive_consumption+sum(energy_consumption(:)) plot(1:100,energy,'.') hold on