粒子群算法(PSO)总结:算法流程,实例,思路

本文通过实例详细解析了粒子群算法的迭代流程,展示了从初始化到逐步优化的过程。文章探讨了全局搜索与局部搜索的概念,指出算法参数设置对全局搜索能力的影响,并分析了可能的搜索局限性。核心思想在于兼顾全局最优解和局部最优解,确保解集的多样性。
摘要由CSDN通过智能技术生成

本文是偏应用的简要总结

关于粒子群算法的基础知识和具体代码,网上有很多,不重复写了。本文没有代码,而是展示一个实例中的代码运行产生的中间结果,用于辅助理解算法流程。

本文分为四个部分:
第一部分,算法简要流程
第二部分,简单实例,按照第一部分的流程整理的代码运行时的迭代过程
第三部分,关于算法的全局搜索和局部搜索的理解
第四部分,算法思路整理

1. 简要流程

Step 1. 产生一批初始解(附带初始化粒子速度),作为当前种群(当前解集)
Step 2. 计算当前种群(当前解集)里每个解的适应度(目标函数值)
Step 3. 更新个体最优解与群体最优解
开始进入迭代,迭代环节为Step 4 ~ Step 6
Step 4. 种群更新(当前解集的更新):利用速度、位置更新公式
Step 5. 计算当前种群(当前解集)里每个解的适应度(目标函数值)
Step 6. 更新个体最优解与群体最优解
当满足迭代终止条件时,跳出迭代环节,执行Step 7
Step 7. 输出搜索到的最优解

2. 流程应用实例——求一元函数最小值

例子:求函数最小值

函数为y = (x-π)^2 + 20cos(x), x∈[-5,5] 

最小值:取x=π时,目标函数最小值为-20

自定义:
种群数量为8,限制最大速度0.5
算法里的每种操作都可以自由设计,而且设计方式非常多

代码运行迭代过程:(按第一部分的流程整理标注)

Step 1. 初始化时
种群粒子的速度
v: 0.5761 0.5616 0.9247 0.7607 0.3241 0.3785 0.6056 0.3797
种群粒子(就是解集)
x: -4.8553 -0.7866 1.6045 -4.1107 -2.0870 4.4501 0.2913 1.5804
Step 2. 计算每个解的目标函数值
y: 66.8003 29.5557 1.6885 41.2747 17.4665 -3.4746 27.2816 2.2452
Step 3. 群体最优解更新为
gbest_x: 4.4501 gbest_y: -3.4746
此时最优解:4.4501  对应目标函数值:-3.4746

第一轮迭代:
Step 4. 利用速度、位置更新公式
种群粒子的速度更新为
v: 0.5000 0.5000 0.5000 0.5000 0.5000 0.1514 0.5000 0.5000
种群粒子(就是解集)更新为
x: -4.3553 -0.2866 2.1045 -3.6107 -1.5870 4.6015 0.7913 2.0804
Step 5. 计算每个解的目标函数值
y: 49.2139 30.9367 -9.0992 27.7538 22.0354 -0.0830 19.5823 -8.6305
Step 6. 群体最优解更新为
gbest_x: 2.1045 gbest_y: -9.0992
此时最优解:2.1045  对应目标函数值:-9.0992

第二轮迭代:
Step 4. 利用速度、位置更新公式
种群粒子的速度更新为
v: 0.5000 -0.1717 0.2000 0.5000 0.5000 -0.5000 0.5000 0.2027
种群粒子(就是解集)更新为
x: -3.8553 -0.4584 2.3045 -3.1107 -1.0870 4.1015 1.2913 2.2831
Step 5. 计算每个解的目标函数值
y: 33.8388 30.8952 -12.6920 19.1006 27.1838 -10.5514 8.9410 -12.3344
Step 6. 群体最优解更新为
gbest_x: 2.3045 gbest_y: -12.6920
此时最优解:2.3045  对应目标函数值:-12.6920

第三轮迭代:
Step 4. 利用速度、位置更新公式
种群粒子的速度更新为
v: 0.5000 0.5000 0.0800 0.5000 0.5000 -0.5000 0.5000 0.1181
种群粒子(就是解集)更新为
x: -3.3553 0.0416 2.3845 -2.6107 -0.5870 3.6015 1.7913 2.4012
Step 5. 计算每个解的目标函数值
y: 22.6653 29.5924 -13.9637 15.8417 30.5545 -17.7108 -2.5511 -14.2162
Step 6. 群体最优解更新为
gbest_x: 3.6015 gbest_y: -17.7108
此时最优解:3.6015  对应目标函数值:-17.7108

迭代以此类推

3. 全局搜索 VS 局部搜索
将解集里的每个解与该解个体最优解的差值 视为 局部最优因素
将解集里的每个解与解集群体最优解的差值 视为 全局最优因素
全局搜索:群体算法,全局搜索能力强,解集里的每个解的更新增量受到局部最优因素与全局最优因素的影响,解更新之后有几率变动到解空间的任意地方
局部搜索:融入局部最优因素与全局最优因素的解的更新过程,可以认为是在解的邻域内搜索

个人看法:全局搜索能力和具体参数的设置有关
其他某些启发式方法,在迭代中后期仍然有几率搜索全部解空间,只是几率有大有小而已。(比如遗传算法,即使变异率设置很小,变异后的解仍然可能分布在解空间任意地方)
而对于粒子群算法,如果群体最优解对于解的更新的指引性太强、解的更新过程中的随机性太弱,那么,当解集向群体最优解汇聚的时候,群体最优解所在的一定范围之外的解空间就没有机会探索了。例如示意图中,红色点表示解,浅红色区域表示粒子在迭代过程中能搜索的解空间的范围。

图中,在搜索过程中,粒子几乎完全朝着最优解移动,粒子的搜索范围狭窄,导致搜索过程漏掉一些解空间。

4. 核心思路
兼顾全局最优解和局部最优解,解集里的每个解利用得到的全局最优解、局部最优解、随机因素更新自身为新解

粒子群算法(Particle Swarm Optimization,PSO)是一种群体智能算法,适用于优化问题。该算法通过模拟鸟群觅食的行为,将每个待优化参数看作鸟群中的一只鸟,而整个鸟群的移动过程则类似于寻优的过程。 Simulink是MATLAB中的一款强大的仿真环境,可用于建立、仿真、分析模拟电路、控制系统等,同时也支持各种求解算法,包括粒子群算法。 下面以单目标函数优化为例,介绍如何在Simulink中使用粒子群算法。 1.建立模型 首先,在Simulink中建立需要进行单目标函数优化的模型。 2.添加粒子群算法模块 在Simulink左侧的库浏览器中找到Control System Toolbox,打开Tools子目录,并拖动Particle Swarm Optimizer模块到模型画布中。 3.配置粒子群算法 双击Particle Swarm Optimizer模块,可进入粒子群算法参数设置界面。其中,需要配置以下参数: - 计算函数:输入需要优化的目标函数 - 最大迭代次数:设置寻优的最大循环次数 - 粒子个数:定义进行寻优的粒子数量 - 参数范围:设定需要优化的变量的取值范围 - 权重因子:粒子速度的调节系数,调节收敛速度 4.仿真运行 点击模型画布上的“Run”按钮,进行仿真运行。Simulink将自动执行粒子群算法,直到满足指定的停止条件或达到最大迭代次数为止。运行完成后,可在仿真数据中查看目标函数的最小值和相应的优化变量值。 总之,使用粒子群算法进行单目标函数优化,可在Simulink中通过Particle Swarm Optimizer模块实现。定义目标函数、设置算法参数范围等条件后,即可运行算法,得到优化结果。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值