📄 greedy.m
字号:
%pegasis成chain与BS位置有关
clear;
PS4=load('data');
BSx=50;
BSy=150;
node=length(PS4);
//按照到BS距离从近到远的顺序放置个节点坐标到PS4矩阵中,PS4(1:)中节点坐标是离BS最近的;
PS4(i:)表示第i节点,具体是:
PS4(i,1)=x坐标,PS4(i,2)=y坐标,PS4(i,3)=i表示节点序号
for i=1:node
for j=i:node
if (PS4(i,1)-BSx)^2+(PS4(i,2)-BSy)^2>(PS4(j,1)-BSx)^2+(PS4(j,2)-BSy)^2
s=PS4(i,:);
PS4(i,:)=PS4(j,:);
PS4(j,:)=s;
end
end
PS4(i,3)=i;
end
//d(i,j)为第i节点到第j节点的距离值
for i=1:node
for j=1:node
if(i~=j)
d(i,j)=sqrt((PS4(i,1)-PS4(j,1))^2+(PS4(i,2)-PS4(j,2))^2);
else d(i,j)=10^8;
end
end
end
% distance matrix
//从离BS最远节点PS4(node,:)开始按greedy算法逐个找最近节点,并将其坐标依次写入PS5中,
这样PS5中按序排列的所有节点坐标即代表整条路由,比如PS5(i,:)表示第i行所有值或说此节点坐标,
即PS5(i,1)=x坐标,PS5(i,2)=y坐标。
并计算整条路由的能量值即距离平方和。
tic
indx=node;
totaldis=0;
for i=1:node
PS5(i,:)=PS4(indx,:);
d(:,indx)=10^8;
[distance,indx]=min(d(indx,:));
if(distance~=10^8)
totaldis=totaldis+distance*distance;
end
end
tocgreed=toc
totaldis=totaldis
//按'k'黑色,'o'圆圈画出PS4表示的节点分布图
figure(1);
plot(PS4(:,1),PS4(:,2),'ko') % nodes figure
% resort node position by the norm
//按':'点线,'k'黑色,'o'圆圈画出PS5表示的路由
figure(2);
plot(PS5(:,1),PS5(:,2),':ko')
%考虑所有节点做一次chainleader,共node rounds的总能量消耗情况
costofdirectn=0;
for i=1:node
costofdirectn=costofdirectn+(PS4(i,1)-BSx)^2+(PS4(i,2)-BSy)^2;
end
costofpegasisn=totaldis*node+costofdirectn
%计算one round的平均能量消耗
costofpegasis=costofpegasisn/node
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -