一、粒子群算法简介

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:numfor j=1:Nx(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:nump(i)=fitness(x(i,:,:));y(i,:,:)=x(i,:,:);
end
pg=x(1,:,:);%Pg为全局最优
for i=2:numif 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:Nx1=pg(1,i,1)+r*cos(o);y1=pg(1,i,2)+r*sin(o);%表示圆每一个角度对应一个点,然后把这些点连接起来构成圆hold onplot(x1,y1,'b');%画出各个传感器节点的感知范围text(pg(1,i,1)+3,pg(1,i,2),['\fontsize{8}\rm',num2str(i)]);hold on
end
axis([0 1000 0 1000]);%设定坐标范围
xlabel('X/m');ylabel('Y/m');
%legend('要监测的区域',['传感器节点(','\fontsize{12}\bf',num2str(N),'\fontsize{10}\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:MaxDTl=tfor 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:40if abs(v(i,j,1))>vmaxv(i,j,1)=v(i,j,1)/abs(v(i,j,1))*vmax;endif abs(v(i,j,2))>vmaxv(i,j,2)=v(i,j,2)/abs(v(i,j,2))*vmax;endif x(i,j,1)<XMINx(i,j,1)=XMIN;endif x(i,j,1)>XMAXx(i,j,1)=XMAX;endif x(i,j,2)<YMINx(i,j,2)=YMIN;endif x(i,j,2)>YMAXx(i,j,2)=YMAX; endend
%对公告板的内容进行更新if fitness(x(i,:,:))>p(i)p(i)=fitness(x(i,:,:));y(i,:,:)=x(i,:,:);%粒子的最好位置endif p(i)>fitness(pg)pg=y(i,:,:);%全局的最好位置endendPbest(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:Nx1=pg(1,i,1)+r*cos(o);y1=pg(1,i,2)+r*sin(o);%表示圆每一个角度对应一个点,然后把这些点连接起来构成圆hold onplot(x1,y1,'b');   %画出各个传感器节点的感知范围text(pg(1,i,1)+3,pg(1,i,2),['\fontsize{8}\rm',num2str(i)]);hold on
end

三、运行结果



四、matlab版本及参考文献

1 matlab版本
2014a

2 参考文献
[1] 包子阳,余继周,杨杉.智能优化算法及其MATLAB实例(第2版)[M].电子工业出版社,2016.
[2]张岩,吴水根.MATLAB优化算法源代码[M].清华大学出版社,2017.

【优化部署】基于matlab粒子群算法求解无线传感器WSN部署优化问题【含Matlab源码 1691期】相关推荐

  1. 【微电网优化】基于matlab粒子群算法求解综合能源系统优化问题【含Matlab源码 1969期】

    一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[微电网优化]基于matlab粒子群算法求解综合能源系统优化问题[含Matlab源码 1969期] 点击上面蓝色字体,直接付费下载,即可. ...

  2. 【布局优化】基于改进粒子群算法实现充电桩选址优化问题附matlab代码

    1 简介 当前世界环境污染和能源危机问题凸显,电动汽车以零排放和低耗能的优势得到各国的大力关注和支持.以电动汽车为代表新能源汽车产业,成为国家七大战略性新兴产业之一.电动汽车具有良好的发展前景,市场规 ...

  3. 【PSO三维路径规划】基于matlab粒子群算法无人机山地三维路径规划【含Matlab源码 1405期】

    ⛄一.无人机简介 0 引言 随着现代技术的发展,飞行器种类不断变多,应用也日趋专一化.完善化,如专门用作植保的大疆PS-X625无人机,用作街景拍摄与监控巡察的宝鸡行翼航空科技的X8无人机,以及用作水 ...

  4. 【PSO三维路径规划】基于matlab粒子群算法无人机山地三维路径规划【含Matlab源码 1831期】

    ⛄一.无人机简介 无人机的航迹规划是指在综合考虑无人机飞行油耗.威胁.飞行区域以及自身物理条件限制等因素的前提下, 为飞行器在飞行区域内规划出从初始点到目标点最优或者满意的飞行航迹, 其本质是一个多约 ...

  5. 【配送路径规划】基于matlab蚁群算法求解配送路径最短问题【含Matlab源码 2222期】

    ⛄一.VRP简介 1 VRP基本原理 车辆路径规划问题(Vehicle Routing Problem,VRP)是运筹学里重要的研究问题之一.VRP关注有一个供货商与K个销售点的路径规划的情况,可以简 ...

  6. 【微电网优化】基于matlab粒子群算法求解微网经济调度和环境友好调度优化问题【含Matlab源码 2283期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[微电网优化]基于matlab粒子群算法求解微网经济调度和环境友好调度优化问题[含Matlab源码 2283期] 点击上面蓝色字体,直接付 ...

  7. 【选址优化】基于粒子群算法求解配电网抢修选址优化问题含Matlab源码

    1 简介 基于粒子群算法求解配电网抢修选址优化问题​. 2 部分代码 function DrawCircle(Circle1, Circle2, r, 3600, s)​plot(model.trou ...

  8. MATLAB粒子群算法求解带充电站(桩)的电动车辆路径规划EVRP问题代码实例

    MATLAB粒子群算法求解带充电站(桩)的电动车辆路径规划EVRP问题代码实例 问题实例描述: 现有一个配送中心需要向20个客户点进行送货.每个客户点有不同货物需求量和卸货服务时间.配送中心和客户点的 ...

  9. MATLAB粒子群算法求解超市物流配送选址问题实例

    粒子群算法编程问题实例: MATLAB粒子群算法求解超市物流配送选址问题实例 粒子群算法编程问题实例: 在范围为(0,0)到(100,100)的矩形区域内,散布着40个连锁超市,各个连锁超市的坐标及需 ...

  10. 【Matlab验证码识别】遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别【含GUI源码 1694期】

    一.代码运行视频(哔哩哔哩) [Matlab验证码识别]遗传算法和最大熵优化+大津法(OTSU)+自定义阈值数字验证码识别[含GUI源码 1694期] 二.matlab版本及参考文献 1 matlab ...

最新文章

  1. 使用KMeanCluster对多个区域进行聚类,并结合Matplotlib绘制中心点、最大最小距离点
  2. php mysql操作封装_php封装MySQL数据库基本操作
  3. html5 长链接,Vue通过WebSocket建立长连接,连接
  4. Oracle redo
  5. 创建List的应用小结
  6. 魅族使用华为鸿蒙,魅族官宣接入华为鸿蒙,以后我们还能用魅族自家的flyme系统吗?...
  7. 震惊!Spring Boot 内存又泄露,排查太难了!
  8. PP点点通畸形文件溢出漏洞0Day
  9. OSChina 周二乱弹 —— 程序员如何转行卖烧烤
  10. SpringBoot RESTful API 架构风格实践
  11. DeepMind用AlphaZero开发国际象棋新规则!
  12. 干货 | 何延哲:App个人信息安全治理的规则、案例与思考
  13. CUDA out of memory. Tried to allocate 150.00 MiB (GPU 0; 4.00 GiB total capacity; 2.24 GiB already a
  14. 华为鸿蒙即兴评述,华为的理性,鸿蒙的节奏
  15. MYSQL的开题报告题目,开题报告的选题意义.docx
  16. Python 数据分析微专业课程--项目实战11 中国城市资本流动问题探索
  17. postgres 通过zhparser实现全文搜索功能
  18. 四、答疑解惑之软考是什么(上)
  19. 转 给SSD(固态硬盘)编程
  20. Hardfault调试方法(调试技术)

热门文章

  1. 漏洞复现——Apache HTTPD多后缀解析漏洞
  2. 如何利用MongoDB打造TOP榜小程序
  3. java学习--基础知识阶段性总结--多线程
  4. 设计趋势:网页之粗粝设计风格
  5. Android loader 详解
  6. 项目管理和版本跟踪——Redmine和SVN的结合
  7. PHP通过反射获得类源码
  8. 学习《银光志 silverlight 3.0》 不错的实例讲解【含源码】
  9. 做人做得最失败的一次
  10. 【转载】在回答WCF问题时,在我们的园子找到了一篇彪悍的文章