基于PSO算法的Rssi测距定位

一:由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适应方程的平方

仿真结果
在这里插入图片描述

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值