优化部署基于matlab粒子群算法求解无线传感器WSN部署优化问题含Matlab源码 1691期
Posted 紫极神光
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了优化部署基于matlab粒子群算法求解无线传感器WSN部署优化问题含Matlab源码 1691期相关的知识,希望对你有一定的参考价值。
一、粒子群算法简介
1 粒子群算法的概念
粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.
PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。
2 粒子群算法分析
2.1基本思想
粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。下面的动图很形象地展示了PSO算法的过程:
2 更新规则
PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。
公式(1)的第一部分称为【记忆项】,表示上次速度大小和方向的影响;公式(1)的第二部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;公式(1)的第三部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。以上面两个公式为基础,形成了PSO的标准形式。
公式(2)和 公式(3)被视为标准PSO算法。
3 PSO算法的流程和伪代码
二、部分源代码
clear all;
clc;
tic
format long;
%------给定初始化条件
XMAX=1000;%区域总长度
XMIN=0;%区域总长度
YMAX=1000;%区域总宽度
YMIN=0;%区域总宽度
deta=2;
x1=XMIN:deta:XMAX;%指从100开始,步长为2,终值为900的数组。
y1=YMIN:deta:YMAX;
[xx,yy]=meshgrid(x1,y1);%生成一个矩阵,用于绘制矩形区域
[m,n]=size(xx);%m是矩阵的行数,n是矩阵的列数
K=m*n; %总的网格点数目
xx1=reshape(xx,K,1);%网格点的横坐标,reshape返回一个K*1(即K行1列)的矩阵xx1
yy1=reshape(yy,K,1);%网格点的纵坐标
r=120;%探测半径
c1=2.0;%学习因子1(局部搜索能力)
c2=2.0;%学习因子2(全局搜索能力)
w=0.9437;%惯性权重
lamda=0.5;
MaxDT=50;%最大迭代次数
vmax=2.5;
N=40;%初始化群体个体数目,传感器的个数
num=20;%粒子数目,每40个传感器构成一个粒子
%初始化种群的个体
for i=1:num
for j=1:N
x(i,j,1)=(XMAX-XMIN)*rand(1,1)+XMIN;%随机初始化位置
x(i,j,2)=(YMAX-YMIN)*rand(1,1)+YMIN;%随机初始化位置
v(i,j,1)=randn;%随机初始化速度
v(i,j,2)=randn;%随机初始化速度
end
end
%计算各个粒子的适应度,并初始化Pi和Pg
for i=1:num
p(i)=fitness(x(i,:,:));
y(i,:,:)=x(i,:,:);
end
pg=x(1,:,:);%Pg为全局最优
for i=2:num
if fitness(x(i,:,:))>fitness(pg)
pg=x(i,:,:);
end
end
%把最优的粒子所代表的传感器分布方案用图形表示
figure,
hold on
plot(pg(1,:,1),pg(1,:,2),'b.','linewidth',2);
o=0:pi/50:2*pi;
for i=1:N
x1=pg(1,i,1)+r*cos(o);
y1=pg(1,i,2)+r*sin(o);%表示圆每一个角度对应一个点,然后把这些点连接起来构成圆
hold on
plot(x1,y1,'b');%画出各个传感器节点的感知范围
text(pg(1,i,1)+3,pg(1,i,2),['\\fontsize8\\rm',num2str(i)]);
hold on
end
axis([0 1000 0 1000]);%设定坐标范围
xlabel('X/m');ylabel('Y/m');
%legend('要监测的区域',['传感器节点(','\\fontsize12\\bf',num2str(N),'\\fontsize10\\rm个)的位置'],' 传感器节点的感知范围');
hold on
plot([XMIN XMAX],[YMIN YMIN],'k','linewidth',1.5);
hold on
plot([XMIN XMIN],[YMIN YMAX],'k','linewidth',1.5);
hold on
plot([XMAX XMAX],[YMIN YMAX],'k','linewidth',1.5);
hold on
plot([XMIN XMAX],[YMAX YMAX],'k','linewidth',1.5);%把四个顶点连接起来组成一个监测区域
%进入主循环,依次迭代,直到满足精度要求
for t=1:MaxDT
l=t
for i=1:num
%对节点坐标进行更新
v(i,:,:)=w*v(i,:,:)+c1*rand*(y(i,:,:)-x(i,:,:))+c2*rand*(pg(1,:,:)-x(i,:,:));%速度更新
x(i,:,:)=x(i,:,:)+v(i,:,:);%位置更新
%对粒子中节点的状态进行调整
[a,b,D]=juli(x(i,:,:));
v(i,a,:)=lamda*(y(i,a,:)-x(i,a,:));%速度更新
v(i,b,:)=lamda*(y(i,b,:)-x(i,b,:));%速度更新
x(i,a,:)=x(i,a,:)+v(i,a,:);%位置更新
x(i,b,:)=x(i,b,:)+v(i,b,:);%位置更新
%不能出界
for j=1:40
if abs(v(i,j,1))>vmax
v(i,j,1)=v(i,j,1)/abs(v(i,j,1))*vmax;
end
if abs(v(i,j,2))>vmax
v(i,j,2)=v(i,j,2)/abs(v(i,j,2))*vmax;
end
if x(i,j,1)<XMIN
x(i,j,1)=XMIN;
end
if x(i,j,1)>XMAX
x(i,j,1)=XMAX;
end
if x(i,j,2)<YMIN
x(i,j,2)=YMIN;
end
if x(i,j,2)>YMAX
x(i,j,2)=YMAX;
end
end
%对公告板的内容进行更新
if fitness(x(i,:,:))>p(i)
p(i)=fitness(x(i,:,:));
y(i,:,:)=x(i,:,:);%粒子的最好位置
end
if p(i)>fitness(pg)
pg=y(i,:,:);%全局的最好位置
end
end
Pbest(t)=fitness(pg);
end
figure
plot(Pbest)
%最后结果
figure,
xm=[XMIN YMIN;XMIN YMAX;XMAX YMAX;XMAX YMIN];%区域的四个顶点
hold on
plot(pg(1,:,1),pg(1,:,2),'b.','linewidth',2);
o=0:pi/50:2*pi;
for i=1:N
x1=pg(1,i,1)+r*cos(o);
y1=pg(1,i,2)+r*sin(o);%表示圆每一个角度对应一个点,然后把这些点连接起来构成圆
hold on
plot(x1,y1,'b'); %画出各个传感器节点的感知范围
text(pg(1,i,1)+3,pg(1,i,2),['\\fontsize8\\rm',num2str(i)]);
hold on
end
三、运行结果
四、matlab版本及参考文献
1 matlab版本
2014a
2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.
以上是关于优化部署基于matlab粒子群算法求解无线传感器WSN部署优化问题含Matlab源码 1691期的主要内容,如果未能解决你的问题,请参考以下文章
定位问题基于matlab RSSI和模拟退火优化粒子群算法求解无线传感器网络定位问题含Matlab源码 1766期
布局优化基于粒子群算法的无线传感器网(WSN)覆盖优化Matlab源码
布局优化基于粒子群算法的无线传感器网(WSN)覆盖优化Matlab源码
优化覆盖基于matlab粒子群算法求解传感器覆盖优化问题含Matlab源码 1493期