一:由Rssi定位(平面)建立模型
MATLAB作图如下:
附代码:Node_num为锚节点数,Node(i).x,Node(i).y为各个锚节点坐标,Zd(i)为Rssi测量距离
[x,y]=meshgrid(1:0.5:100,1:0.5:100);
z=0;
for i=1:Node_num
z=z+(sqrt((x-Node(i).x).^2+(y-Node(i).y).^2)-Zd(i)).^2;
end
%*****************************************
%PSO算法
%%参数初始化
c1=1.45445;
c2=1.45445;
maxgen=100;%迭代次数
sizeop=100; %种群大小
vmax=1;
vmin=-1; %速度限制
popmax=100;
popmin=0; %边界限定
%%初始化粒子位置和速度
for i=1:sizeop
pop(i,:)=(100*rands(1,2)+100)/2; %初始化位置,由于是二元函数,所以是两组
v(i,:)=rands(1,2);%初始化速度,2组
%计算适应度
fitness(i)=fun(pop(i,:),Node_num,Node,Zd);
end
%%个体极值和群体极值
[bestfitness,bestIndex]=min(fitness);
zbest=pop(bestIndex,:);%群体最佳
gbest=pop();%个体最佳
fitnessgbest=fitness;%个体最佳适应度值
fitnesszbest=bestfitness;%群体最佳适应度值
%%迭代寻优
for i=1:maxgen
for j=1:sizeop
%速度更新
v(j,:)=v(j,:)+c1*rand*(gbest(j,:)-pop(j,:))+c2*rand*(zbest-pop(j,:));
v(j,find(v(j,:)>vmax))=vmax;
v(j,find(v(j,:)<vmin))=vmin;
%种群位置更新
pop(j,:)=pop(j,:)+v(j,:);
pop(j,find(pop(j,:)>popmax))=popmax;
pop(j,find(pop(j,:)<popmin))=popmin;
%适应度值更新
fitness(j)=fun(pop(j,:),Node_num,Node,Zd);
end
for j=1:sizeop
%个体最优更新
if fitness(j)<fitnessgbest(j)
gbest(j,:)=pop(j,:);
fitnessgbest(j)=fitness(j);
end
%群体最优更新
if fitness(j)<fitnesszbest
zbest=pop(j,:);
fitnesszbest=fitness(j);
end
end
yy(i)=fitnesszbest;
end
[fitnesszbest,zbest]
其中fun()为最上面Rssi适应方程的平方
仿真结果