粒子群优化算法(PSO)

Particle Swarm Optimization

1、 算法起源

粒子群优化算法(PSO)是一种进化计算技术(evolutionary computation),1995 年由Eberhart 博士和kennedy 博士提出,源于对鸟群捕食的行为研究 。该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型。粒子群算法在对动物集群活动行为观察基础上,利用群体中的个体对信息的共享使整个群体的运动在问题求解空间中产生从无序到有序的演化过程,从而获得最优解。

2、 算法描述

2.1、 百科定义

粒子群算法,也称粒子群优化算法或鸟群觅食算法(Particle Swarm Optimization),缩写为 PSO, 是近年来由J. Kennedy和R. C. Eberhart等开发的一种新的进化算法(Evolutionary Algorithm - EA)。PSO 算法属于进化算法的一种,和模拟退火算法相似,它也是从随机解出发,通过迭代寻找最优解,它也是通过适应度来评价解的品质,但它比遗传算法规则更为简单,它没有遗传算法的“交叉”(Crossover) 和“变异”(Mutation) 操作,它通过追随当前搜索到的最优值来寻找全局最优。这种算法以其实现容易、精度高、收敛快等优点引起了学术界的重视,并且在解决实际问题中展示了其优越性。粒子群算法是一种并行算法。

2.2、 通俗点描述

如同前面的描述,PSO模拟的是鸟群的捕食行为。设想这样一个场景:一群鸟在随机搜索食物。在这个区域里只有一块食物。所有的鸟都不知道食物在那里。但是他们知道当前的位置离食物还有多远。那么找到食物的最优策略是什么呢。最简单有效的就是搜寻目前离食物最近的鸟的周围区域。

鸟群在整个搜寻的过程中,通过相互传递各自的信息,让其他的鸟知道自己的位置,通过这样的协作,来判断自己找到的是不是最优解,同时也将最优解的信息传递给整个鸟群,最终,整个鸟群都能聚集在食物源周围,即找到了最优解。

PSO中,每个优化问题的解都是搜索空间中的一只鸟。我们称之为“粒子”。所有的粒子都有一个由被优化的函数决定的适应值(fitness value),每个粒子还有一个速度决定他们飞翔的方向和距离。然后粒子们就追随当前的最优粒子在解空间中搜索。

PSO 初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次迭代中,粒子通过跟踪**两个"极值"**来更新自己。**第一个就是粒子本身所找到的最优解,这个解叫做个体极值pBest。另一个极值是整个种群目前找到的最优解,这个极值是全局极值gBest。**另外也可以不用整个种群而只是用其中一部分作为粒子的邻居,那么在所有邻居中的极值就是局部极值。

3、 粒子的属性

3.1 算法核心

粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。

鸟被抽象为没有质量和体积的微粒(点),并延伸到N维空间,粒子i在N维空间的位置表示为矢量Xi=(x1,x2,…,xN),飞行速度表示为矢量Vi=(v1,v2,…,vN)。每个粒子都有一个由目标函数决定的适应值(fitness value),并且知道自己到目前为止发现的最好位置(pbest)和现在的位置Xi。这个可以看作是粒子自己的飞行经验。除此之外,每个粒子还知道到目前为止整个群体中所有粒子发现的最好位置(gbest)(gbest是pbest中的最好值),这个可以看作是粒子同伴的经验。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。

3.2 速度和位置的更新

PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。

第①部分称为【记忆项】,表示上次速度大小和方向的影响;

第②部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;

第③部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。

以上面两个公式为基础,再来看一个公式:

4、 标准PSO算法流程

4.1、 标准PSO算法的流程

1)初始化一群微粒(群体规模为N),包括随机位置和速度;

2)评价每个微粒的适应度;

3)对每个微粒,将其适应值与其经过的最好位置pbest作比较,如果较好,则将其作为当前的最好位置pbest;

4)对每个微粒,将其适应值与其经过的最好位置gbest作比较,如果较好,则将其作为当前的最好位置gbest;

5)根据公式(2)、(3)调整微粒速度和位置;

6)未达到结束条件则转第2)步。

迭代终止条件根据具体问题一般选为最大迭代次数Gk或(和)微粒群迄今为止搜索到的最优位置满足预定最小适应阈值。

4.2、 PSO流程图解

4.3、 学习因子c1、c2分析

公式(2)和(3)中pbest和gbest分别表示微粒群的局部和全局最优位置。

  • 当C1=0时,则粒子没有了认知能力,变为只有社会的模型(social-only):

vi=ω×vi+c2×rand()×(gbesti−xi)v_i = \omega × v_i+c_2 × rand() × (gbest_i - x_i) vi​=ω×vi​+c2​×rand()×(gbesti​−xi​)

​ 称为全局PSO算法。粒子有扩展搜索空间的能力,具有较快的收敛速度,但由于缺少局部搜 索,对于复杂问题 比标准PSO 更易陷入局部最优。

  • 当C2=0时,则粒子之间没有社会信息,模型变为只有认知(cognition-only)模型:

vi=ω×vi+c1×rand()×(pbesti−xi)v_i = \omega × v_i+c_1 × rand() × (pbest_i - x_i) vi​=ω×vi​+c1​×rand()×(pbesti​−xi​)

​ 称为局部PSO算法。由于个体之间没有信息的交流,整个群体相当于多个粒子进行盲目的随 机搜索,收敛速度慢,因而得到最优解的可能性小。

5、代码实操

找到三维图示的最高点坐标:

% 函数表达式
function y = fit( x )y  = 3*(1-x(1)).^2.*exp(-(x(1).^2) - (x(2)+1).^2) - 10*(x(1)/5 - x(1).^3 - x(2).^5).*exp(-x(1).^2-x(2).^2) - 1/3*exp(-(x(1)+1).^2 - x(2).^2);
end
% main.m
clc
clear
close all
%% 参数初始化
c1 = 1.5;       % 学习因子
c2 = 1.5;
w=0.7;          % 惯性权重
D=2;           % 粒子维度
maxgen = 20;   % 迭代次数
sizepop = 5;  % 种群大小
Vmax = 1.5;     % 速度的范围
Vmin = -1.5;
popmax = 3;     % 搜索的范围
popmin = -3;
%% 种群初始化
for i = 1:sizepop% 随机产生一个种群pop(i,:) = rand(1,D)*2*popmax-popmax;    % 初始化位置V(i,:) = 0.5 * rands(1,D);   % 初始化速度% 适应度计算fitness(i) = fit(pop(i,:));
end
%% 个体极值和群体极值
[bestfitness,bestindex] = max(fitness);   % 默认将第一代的最大适应度值设置为最佳
zbest = pop(bestindex,:);   % 全局最佳
gbest = pop;                % 个体最佳
fitnessgbest = fitness;     % 个体最佳适应度值
fitnesszbest = bestfitness;   % 全局最佳适应度值
%% 迭代寻优
for i = 1: maxgenfor j = 1:sizepop% 速度更新V(j,:) = w*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) = fit(pop(j,:)); endfor j = 1:sizepop% 个体最优更新if fitness(j) > fitnessgbest(j)gbest(j,:) = pop(j,:);fitnessgbest(j) = fitness(j);end% 全局最优更新if fitness(j) > fitnesszbestzbest = pop(j,:);fitnesszbest = fitness(j);endend % 记录每一代的最优值bestx(i) = zbest(1);besty(i) = zbest(2);yy(i) = fitnesszbest;   disp(['迭代次数:',num2str(i),',最大值为:',num2str(yy(i)),',坐标:',num2str(bestx(i)),',',num2str(besty(i))]);
end
%% 输出结果并绘图x = -3:0.01:3;
y = -3:0.01:3;
[X,Y]=meshgrid(x,y);
z = 3*(1-X).^2.*exp(-(X.^2) - (Y+1).^2) - 10*(X/5 - X.^3 - Y.^5).*exp(-X.^2-Y.^2) - 1/3*exp(-(X+1).^2 - Y.^2);
mesh(x,y,z);
hold on
plot3(bestx,besty,yy,'r.','MarkerSize',10);

输出结果:

红点为每轮迭代的最优粒子点。

PSO 粒子群优化算法相关推荐

  1. Matlab:基于Matlab实现人工智能算法应用的简介(SVM支撑向量机GA遗传算法PSO粒子群优化算法)、案例应用之详细攻略

    Matlab:基于Matlab实现人工智能算法应用的简介(SVM支撑向量机&GA遗传算法&PSO粒子群优化算法).案例应用之详细攻略 目录 1.SVM算法使用案例 1.1.Libsvm ...

  2. 【项目实战】Python实现用PSO粒子群优化算法对KMeans聚类模型进行优化项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+代码讲解),如需数据+代码+文档+代码讲解可以直接到文章最后获取. 1.项目背景 粒子群优化算法(Particle Swarm optimizat ...

  3. PSO粒子群优化算法

    1算法简介 粒子群优化算法,在1995年由Eberhart博士和kennedy博士提出,源于对鸟群捕食的行为研究.该算法最初是受到飞鸟集群活动的规律性启发,进而利用群体智能建立的一个简化模型.算法流程 ...

  4. 【MATLAB教程案例11】基于PSO粒子群优化算法的函数极值计算matlab仿真及其他应用

    FPGA教程目录 MATLAB教程目录 -------------------------------------------------------------------------------- ...

  5. PSO 粒子群优化算法 大整理

    一.粒子群算法的概念   粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation).源于对鸟群捕食的行为 ...

  6. 粒子群matlab工具箱,科学网—PSO粒子群优化算法Matlab工具箱 - 白途思的博文

    PSO做实数优化有自身特性优势.而且全局寻优性能比较好. 只是该工具箱中的Trelea, Clerc两种类型的PSO我不了解,正在找这方面的资料看看. Robust Particle Swarm to ...

  7. 基于PSO粒子群优化算法的TSP问题最短路径求解matlab仿真

    up目录 一.理论基础 二.核心程序 三.测试结果 一.理论基础 在PSO中,群中的每个粒子表示为向量.在投资组合优化的背景下,这是一个权重向量,表示每个资产的分配资本.矢量转换为多维搜索空间中的位置 ...

  8. Python实现PSO粒子群优化支持向量机回归模型(svr算法)项目实战

    说明:这是一个机器学习实战项目(附带数据+代码+文档+视频讲解),如需数据+代码+文档+视频讲解可以直接到文章最后获取. 1.项目背景 在污水处理全过程中,为了更好地使解决后的水达到环保标准,在污水处 ...

  9. 2021-01-26 粒子群优化算法(PSO)以及Matlab实现

    粒子群优化算法(PSO)以及Matlab实现 1.粒子群算法 粒子群算法是一种智能优化算法.关于智能,个人理解,不过是在枚举法的基础上加上了一定的寻优机制.试想一下枚举法,假设问题的解空间很小,比如一 ...

  10. Particle Swarm Optimization粒子群优化算法(PSO算法)概念及实战

    Particle Swarm Optimization 粒子群算法(PSO算法) 定义 粒子群算法,又称粒子群优化算法(Particle Swarm Optimization),缩写为 PSO, 是近 ...

最新文章

  1. 【DOM编程艺术】动态创建标记(签)---创建和插入节点
  2. Python入门教程:很多人推荐学 Python 入 IT ,如果学完 Python 找不到工作怎么办...
  3. 网卡绑定技术linux c,Linux多网卡绑定
  4. 2批量批量查询数据插入数据_Excel如何快速对数据批量查询,vlookup+match函数高效完成工作...
  5. 小孩都看得懂的推荐系统
  6. (转)SpringMVC学习(一)——SpringMVC介绍与入门
  7. 手机优酷怎么删除自己发的弹幕
  8. wincc按钮控制的vb脚本_VB操作wincc脚本心得.docx
  9. python基础学习(八)元组
  10. 重返商用计算市场,紫光计算机要做数字化转型生意
  11. 数据库设计软件-powerdesign,导出表结构为Word文档
  12. linux 中文输入鼠标跳动,解决wps for linux 中文输入法光标不跟随的问题
  13. 多网卡下同网段内所有网卡共用一个IP的问题分析
  14. 坐拥百度/阿里/腾讯,这家车载导航上市公司的营收却一路下挫?
  15. Java练习题——运算符
  16. html中制作m3u8播放列表,播放具有HTML视频标签的m3u8文件
  17. 压缩包文件密码忘记了文件怎么办?
  18. python xlsm_Excel中的xls、xlsx、xlsm混合文件,看我如何用Python统一处理!
  19. 一种根据EI检索结果对比CCF期刊/会议评级的程序
  20. python甲骨文培训

热门文章

  1. Python自然语言处理—停用词词典
  2. 打印机服务器启用后自动关闭,共享打印机点击打印就自动关闭该怎么办?
  3. ​ java获取中文拼音首字母​
  4. 通俗理解博弈论相关术语
  5. TUXEDO中间件介绍及应用
  6. cad插件_CAD素材与插件合集
  7. 1.2 说说大学这滩泥淖——《逆袭大学》连载
  8. Windows下使用platform.pk8 和platform.x509.pem生成jks签名文件
  9. 2021计算机三级数据库大题总结
  10. C/S和B/S和RIA