登录论坛

查看完整版本 : 【原创】无线传感网络布局的虚拟力导向微粒群优化的仿真源代码


greensim
2010-03-06, 17:48
下面的源码实现下面参考文献的算法和仿真,由GreenSim团队原创,转载请注明,有意购买源码或代写相关程序,请与GreenSim团队联系。
王雪, 王晟, 马俊杰. 无线传感器网络布局的虚拟力导向微粒群优化策略[J]. 电子学报, 2007, 11:(35)2038-2042.

%% 无线传感器网络布局优化的粒子群导向虚拟力算法仿真程序
clc
clear
close all

%%
ZawFlag=[0,0,0,0,0];%障碍物的启用设置,为0表示不启用
BorderLength=1000;%正方形区域的边界长度
DL=4;%离散化质点的间距,要求DL能够整除BorderLength
[Sx,Sy]=InitSK(BorderLength,DL,ZawFlag);%调用子函数,产生正方形区域,并用离散化质点存储该区域
%%
% GreenSim团队原创作品,转载请注明
% 欢迎访问GreenSim——算法仿真团队→http://blog.sina.com.cn/greensim
rLower=70;%传感器节点覆盖半径取值范围的下界
rUpper=70;%传感器节点覆盖半径取值范围的上界
NodeNum0=50;%设置固定节点个数
[Cx0,Cy0,r0,R0]=InitCovRand(NodeNum0,rLower,rUpper,ZawFlag,BorderLength);%调用子函数,产生固定节点
NodeNum1=50;%设置移动节点个数
[Cx1,Cy1,r1,R1]=InitCovRand(NodeNum1,rLower,rUpper,ZawFlag,BorderLength);%调用子函数,产生移动节点
figure(1)
DrawCovering0(Cx0,Cy0,r0,ZawFlag,BorderLength);
title('初始化网络布局(固定节点)')
figure(2)
DrawCovering0(Cx0,Cy0,r0,ZawFlag,BorderLength);
hold on
DrawCovering1(Cx1,Cy1,r1,ZawFlag,BorderLength);
title('初始化网络布局(固定节点和可移动节点)')
%%
Cx=[Cx0,Cx1];
Cy=[Cy0,Cy1];
r=[r0,r1];
R=[R0,R1];
%如需人为指定个别节点的初始位置,请参考下面的语句进行设置(注意指定的坐标不要落入障碍物内)
%Cx(1)=400;Cy(1)=300;%人工指定标号为1的节点的坐标
Move=ones(1,NodeNum0+NodeNum1);%节点移动控制参数,等于0表示节点不参与移动
Move(1:NodeNum0)=0;
M=200;%%迭代次数
CC=zeros(1,M+1);%计算初始覆盖率
[C,IfCovered]=CovRates(Cx,Cy,r,Sx,Sy);%计算初始覆盖率
CC(1)=C;
counter=2;
for i=1:M
[CX,CY]=Gravitation(Cx,Cy,r,R,0.2,Sx,Sy,IfCovered);
[CX,CY]=DoNotMove(Cx,Cy,CX,CY,Move);
[Cx,Cy]=Coulomb(CX,CY,r,R,0.00005);
[Cx,Cy]=DoNotMove(CX,CY,Cx,Cy,Move);
if i>0.05*M
[r,R]=ProsperityForAll(Cx,Cy,r,R,0.03,0.1);
end
[C,IfCovered]=CovRates(Cx,Cy,r,Sx,Sy);
CC(i+1)=C;
if i==2
figure(3)
DrawCovering0(Cx(1:NodeNum0),Cy(1:NodeNum0),r(1:NodeNum0),ZawFlag,BorderLength);
hold on
DrawCovering1(Cx(NodeNum0+1:end),Cy(NodeNum0+1:end),r(NodeNum0+1:end),ZawFlag,BorderLength);
title('粒子群优化网络布局')
end
if i==50
figure(4)
DrawCovering0(Cx(1:NodeNum0),Cy(1:NodeNum0),r(1:NodeNum0),ZawFlag,BorderLength);
hold on
DrawCovering1(0.25*BorderLength+0.5*Cx(NodeNum0+1:end),0.25*BorderLength+0.5*Cy(NodeNum0+1:end),r(NodeNum0+1:end),ZawFlag,BorderLength);
title('虚拟力优化网络布局')
end
if i==M
figure(5)
DrawCovering0(Cx(1:NodeNum0),Cy(1:NodeNum0),r(1:NodeNum0),ZawFlag,BorderLength);
hold on
DrawCovering1(Cx(NodeNum0+1:end),Cy(NodeNum0+1:end),r(NodeNum0+1:end),ZawFlag,BorderLength);
title('虚拟力导向粒子群优化网络布局')
end
end
%%
figure(6)
plot(CC)
xlabel('迭代次数','FontName','Times New Roman','FontSize',10);
ylabel('覆盖率(%)','FontName','Times New Roman','FontSize',10);
title('虚拟力导向粒子群优化网络布局覆盖率收敛曲线');