⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 greedy.m

📁 有关贪婪算法的源码
💻 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 + -