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

2.基本思想
粒子群算法是模拟群体智能所建立起来的一种优化算法,粒子群算法可以用鸟类在一个空间内随机觅食为例,所有的鸟都不知道食物具体在哪里,但是他们知道大概距离多远,最简单有效的方法就是搜寻目前离食物最近的鸟的周围区域。对粒子群优化算法操作的一个简单解释如下:每一个粒子都代表了当前优化任务的一个可能解决方案。在每次迭代过程中,每个粒子都会朝着自己的最优解的方向加速,也会朝着种群中任何粒子迄今为止发现的全局最佳位置的方向加速。这意味着,如果一个粒子发现了一个更好的解,所有其他粒子都会靠近它,在这个过程中不断地搜索最优解。可以总结出粒子群算法地三条简单规则:(1)飞离最近的个体,以避免碰撞;(2)飞向目标;(3)飞向群体的中心。

假设存在一个维度为S的搜索空间,由m​个粒子组成粒子种群,其中第i​个粒子用一个S​维的向量表示,具体为Xi=(xi1,xi2,…,xiS)​

代入目标函数就可以算出其适应度值,适应度值的大小对应着粒子位置即可行解的好坏。另外,第i​个粒子移动的速度是S 维向量,记为Vi=(vi1,vi2,…,viS)
第i​个粒子搜索到的最优位置为Pi=(pi1,pi2,…,piS)​整个粒子群搜索到的最优位置为Pg=(pg1,pg2,…,pgS)​

3.算法流程
标准PSO算法的流程:

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

Step2:评价每个微粒的适应度;

Step3:对每个微粒,将其适应值与其经过的最好位置Pi
作比较,如果较好,则将其作为该粒子当前的最好位置Pi

Step4:对每个微粒,将其适应值与全局最好位置Pg

作比较,如果较好,则将其作为当前全局最好位置Pg

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

Step6:未达到结束条件则转Step2。

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

4.流程图

5.代码实现

%% 清空环境
clc
clear

%% 参数初始化
%粒子群算法中的三个参数
c1 = 1.49445;%加速因子
c2 = 1.49445;

maxgen=1000; % 进化次s数
sizepop=200; %种群规模
%惯性权重

Vmax=1; %限制速度围
Vmin=-1;
popmax=5; %变量取值范围
popmin=-5;
dim=10; %适应度函数维数

func=1; %选择待优化的函数,1为Rastrigin,2为Schaffer,3为Griewank
Drawfunc(func);%画出待优化的函数,只画出二维情况作为可视化输出

%% 产生初始粒子和速度
for i=1:sizepop
%随机产生一个种群
pop(i,:)=popmax*rands(1,dim); %初始种群
V(i,:)=Vmax*rands(1,dim); %初始化速度
%计算适应度
fitness(i)=fun(pop(i,:),func); %粒子的适应度
end

%% 个体极值和群体极值
[bestfitness bestindex]=min(fitness);
gbest=pop(bestindex,:); %全局最佳
pbest=pop; %个体最佳
fitnesspbest=fitness; %个体最佳适应度值
fitnessgbest=bestfitness; %全局最佳适应度值

%% 迭代寻优
for i=1:maxgen
%w = 0.9 - 0.5*(i/maxgen)*(i/maxgen);
fprintf('第%d代,',i);
fprintf('最优适应度%f\n',fitnessgbest);
for j=1:sizepop
w = 0.9 - 0.5*(i/maxgen)*(i/maxgen);
%速度更新
V(j,:) = w*V(j,:) + c1*rand*(pbest(j,:) - pop(j,:)) + c2*rand*(gbest - pop(j,:)); %根据个体最优pbest和群体最优gbest计算下一时刻速度
V(j,find(V(j,:)>Vmax))=Vmax; %限制速度不能太大
V(j,find(V(j,:)<Vmin))=Vmin;

%种群更新
pop(j,:)=pop(j,:)+0.5*V(j,:); %位置更新
pop(j,find(pop(j,:)>popmax))=popmax;%坐标不能超出范围
pop(j,find(pop(j,:)<popmin))=popmin;

if rand>0.98 %加入变异种子,用于跳出局部最优值
pop(j,:)=rands(1,dim);
end

%更新第j个粒子的适应度值
fitness(j)=fun(pop(j,:),func);

end

for j=1:sizepop

%个体最优更新
if fitness(j) < fitnesspbest(j)
pbest(j,:) = pop(j,:);
fitnesspbest(j) = fitness(j);
end

%群体最优更新
if fitness(j) < fitnessgbest
gbest = pop(j,:);
fitnessgbest = fitness(j);
end
end
yy(i)=fitnessgbest;

end
%% 结果分析
figure;
plot(yy)
title('最优个体适应度','fontsize',12);
xlabel('进化代数','fontsize',12);ylabel('适应度','fontsize',12);

6.参数对实验结果的影响

6.1 惯性权重w

由于惯性权重w过大全局寻优能力强,局部寻优能力弱;过小全局寻优能力弱,局部寻优能力强。所以,动态w能在搜索过程中线性变化可以比固态w求得更好的结果。

这里将设置函数w = 0.9 - 0.5*(i/maxgen)*(i/maxgen)   (maxgen是迭代次数)

运行结果

由图可知在迭代到600次左右收敛,最优适应度为1.989918

6.2 学习因子c1,c2

令c1=c2 = 0.89886,运行结果

由图可知迭代到680次左右,种群适应度为0,无法求得最优解

令c1=c2=2.55987  运行结果

   由图可知迭代50次左右  得到最优解5.969754

6.3种群规模sizepop对结果影响

令sizepop=20  运行结果

    由图可知当迭代到160次左右收敛  得到最优解

    令sizepop=1000  运行结果

由图可知迭代到970次左右收敛  求解速度慢

  6.4 适应度函数维数dim对结果的影响

  令dim=3  运行结果

    

      由图可知过早收敛无法取得最优解

令dim=100  运行结果

      由图可知迭代550次左右收敛

6.5 最大速度vmax对实验结果的影响

令vmax=0.1  运行结果

    

      由图可知迭代到50次左右时收敛  过早得到最优解

令vmax=20   运行结果

    

       由图可知迭代到700次左右收敛

    6.6经过大量的实验令w=0.78812,c1=c2=1.49618 是一组比较好的组合

运行结果

     

6.7总结

①惯性权重w:w越大,微粒飞行速度越大,微粒将会以更长的步长进行全局搜索;w较小,则微粒步长小,趋向于精细的局部搜索;因此,采用动态改变w的值;在搜索初期设w取0.9,然后随着迭代次数的不断增加,逐渐降低w的值;从而达到全局最优。

②学习因子c1,c2:c1,c2具有自我总结和向优秀个体学习的能力,从而使微粒向群体内最优点靠近。c1,c2分别调节微粒向个体最优或者群体最优方向飞行的最大步长,决定微粒个体经验和群体经验对微粒自身运行轨迹的影响。学习因子较小时,可能使微粒不在最优区域移动,无法得到最优解;学习因子较大时,可使微粒迅速向最优区域移动,过早收敛。

③种群规模sizepop:种群规规模过小,算法收敛速度快,但是容易陷入局部最优;种群规模过大,算法收敛速度较慢;导致计算时间增加,而且群体数目增加到一定数目时,再增加微粒数目不再有显著的效果。

④适应度函数维数dim:维度过小,算法早熟,陷入局部最优;维度过大,求解精度提高,但算法速度慢,比较耗时。

⑤最大速度vmax:vmax过大,粒子运动速度快,微粒探索能力强,但容易越过最优的搜索空间,错过最优解;Vmax较小,容易进入局部最优,可能会使微粒无法运动足够远的距离以跳出局部最优,从而也可能找不到最优解

7.PSO算法优缺点

优点:没有交叉和变异运算,靠粒子速度完成搜索,并在迭代中只有传递最优信息,搜索速度快,需要调整的参数不多,易于实现

缺点:缺乏速度的动态调节,容易陷入局部最优,导致收敛精度低和不易收敛;不能有效解决离散及组合优化问题;对于不同问题,参数不好选择,不能高效取得最优解。

 

PSO算法的更多相关文章

  1. PSO算法的改进(参数)

    ## 基本PSO的改进 虽然粒子群在求解优化函数时,表现了较好的寻优能力:通过迭代寻优计算,能够迅速找到近似解:但基本的PSO容易陷入局部最优,导致结果误差较大. 两个方面:1.将各种先进理论引入到P ...

  2. 基本PSO算法实现(Java)

    一.算法流程 Step1:初始化一群粒子(粒子个数为50个),包括随即位置和速度: Step2:计算每个粒子的适应度fitness: Step3:对每个粒子,将其适应度与其进过的最好位置(局部)pbe ...

  3. PSO:利用PSO算法优化二元函数,寻找最优个体适应度—Jason niu

    figure [x,y] = meshgrid(-5:0.1:5,-5:0.1:5); z = x.^2 + y.^2 - 10*cos(2*pi*x) - 10*cos(2*pi*y) + 20; ...

  4. 最基本PSO算法的C++实现

    按照James Kennedy & Russell Eberhart (1995)的版本,算法过程如下: [x*] = PSO() P = Particle_Initialization(); ...

  5. 一C++PSO(PSO)算法

    收集和变化PSO算法,它可用于参考实施: #include <cstring> #include <iostream> #include <cmath> #incl ...

  6. 粒子群算法(PSO)算法解析(简略版)

    粒子群算法(PSO) 1.粒子群算法(PSO)是一种基于群体的随机优化技术: 初始化为一组随机解,通过迭代搜寻最优解. PSO算法流程如图所示(此图是从PPT做好,复制过来的,有些模糊) 2.PSO模 ...

  7. 粒子群优化算法PSO及matlab实现

    算法学习自:MATLAB与机器学习教学视频 1.粒子群优化算法概述 粒子群优化(PSO, particle swarm optimization)算法是计算智能领域,除了蚁群算法,鱼群算法之外的一种群 ...

  8. ARIMA模型--粒子群优化算法(PSO)和遗传算法(GA)

    ARIMA模型(完整的Word文件可以去我的博客里面下载) ARIMA模型(英语:AutoregressiveIntegratedMovingAverage model),差分整合移动平均自回归模型, ...

  9. 计算智能(CI)之粒子群优化算法(PSO)(一)

    欢迎大家关注我们的网站和系列教程:http://www.tensorflownews.com/,学习更多的机器学习.深度学习的知识! 计算智能(Computational Intelligence , ...

随机推荐

  1. 解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题

    问题描述:     在IE8及以下版本时,点击label标签无法自动触发checkbox的click事件,导致无法产生希望的效果. 原HTML代码: <div class="col-s ...

  2. HTML中关于 浮动 的简单说明

    1.首先,标签之所以有存在等级分类,是因为他们处于标准文档流(块级元素,行内元素,行内块元素)当中. 2.如何脱离标准文档流? 浮动 绝对定位 固定定位 这些可以让一个标签脱离标准文档流,而元素一旦脱 ...

  3. 7.Redis的发布订阅

    Redis消息的订阅/发布 a)是什么 进程间的一种消息通信模式:发送者(pub)发送消息,订阅者(sub)接收消息. b)命令 SUBSCRIBE订阅 PUBLISH发布 c)案例 先订阅后发布后才 ...

  4. Go语言中的defer

    可以用作一些资源的释放. 1.在一个函数内的defer执行顺序是先写的后执行,后写的先执行(遵循栈结构) func DeferTest1(){ defer fmt.Println("我是 d ...

  5. 目标检测---搬砖一个ALPR自动车牌识别的环境

    目标检测---搬砖一个ALPR自动车牌识别的环境 参考License Plate Detection and Recognition in Unconstrained Scenarios@https: ...

  6. zend studio 13.6.1汉化包安装方法

    1.这里介绍的是离线汉化包的安装,在线汉化安装总是失败,还是离线的方便 2.汉化安装过程中系统可能会弹出报错,忽略就可以(反正我现在就是忽略了在用着) 下面图片中的链接就是在线安装的链接,不管是在线还 ...

  7. 算法设计与分析 - 李春葆 - 第二版 - pdf->word v3

    1.1 第1章─概论 练习题 . 下列关于算法的说法中正确的有( ). Ⅰ.求解某一类问题的算法是唯一的 Ⅱ.算法必须在有限步操作之后停止 Ⅲ.算法的每一步操作必须是明确的,不能有歧义或含义模糊 Ⅳ. ...

  8. 2.webpack最基本的使用方式

    什么是webpack? webpack是前端的一个项目构建工具,它是基于Node.js开发出来的一个前端工具: webpack安装的两种方式 1.运行 'npm i webpack -g' 全局安装w ...

  9. windows系统上 安装 Redis

    下载地址:https://github.com/microsoftarchive/redis/releases 下载完成后,把这个给解压出来 然后,使用 cmd 命令 进入 解压的redis目录 输入 ...

  10. BZOJ2301——莫比乌斯&&整除分块

    题目 对于给出的n个询问,每次求有多少个数对(x,y),满足a≤x≤b,c≤y≤d,且gcd(x,y) = k,gcd(x,y)函数为x和y的最大公约数. 分析 莫比乌斯经典入门题. (我也刚学,就写 ...