优化算法 | 随机漂移粒子群优化算法(附标准PSO算法Python工具包)

优化算法 | 随机漂移粒子群优化算法(附标准PSO算法Python工具包),第1张

目录

▎标准PSO算法

▎RDPSO算法

▎标准PSO算法Python工具包

01 | 工具包适用范围

02 | 工具包安装方法

03 | 工具包使用实例

▎参考文献


今天为各位讲解一种改进的粒子群优化算法-随机漂移粒子群优化算法(Random Drift Particle Swarm Optimization,RDPSO)。RDPSO算法于2013年由孙俊教授等人提出,该算法设计思路源自于金属导体中自由电子的运动模型。相比于经典的PSO,RDPSO可以增强粒子摆脱局部最优的能力。

▎标准PSO算法

我们在MATLAB数学建模(六) | 粒子群优化(PSO)算法讲解 (上)和基于粒子群算法的多目标搜索算法讲解(附MATLAB代码)这两篇推文讲解过标准PSO算法的基本思想。

在这里我们再做一个简短回顾,标准PSO算法中粒子位置的更新公式如下:

其中,k为迭代次数;

w为惯性权重, 其取值一般为随着迭代次数的增加从0.9到0.4线性递减;

 为第k+1代粒子i的位置;

 为第k代粒子i的位置;

 为第k+1代粒子i的速度;

 为第k代粒子i的速度;

 为第k代个体最优粒子i的位置;

 为第k代全局最优粒子的位置;

r1和r2为(0,1)之间的随机数;

c1和c2为常数。

学者Clerc等人发现标准PSO算法稳定收敛的条件是每个粒子都趋向于点  。其中计算公式如下:  ,  是一个满足(0,1)均匀分布的随机数。

▎RDPSO算法
在RDPSO算法中,每个粒子的搜索行为被认为和金属导体中自由电子的运动规律是相似的。因此,RDPSO算法中粒子的搜索行为被认为热运动和漂移运动的叠加,即每个粒子的速度公式包含两个分量:

 ,其中  和  的计算公式分别如下:

其中 ,M为种群中粒子数目,为第k代个体最优粒子i的位置。是一个服从标准正太分布的随机数。

综上所述,的计算公式如下:

有学者研究发现当的取值为随着迭代次数的增加从0.9到0.3线性递减,取值恒为1.45时,RDPSO算法具有较好的性能。

最终,粒子i的位置更新公式为:

RDPSO算法伪代码如下所示:

▎标准PSO算法Python工具包

标准PSO算法有现成的Python工具包——PySwarm,官网链接如下:

Welcome to PySwarms’s documentation!​pyswarms.readthedocs.io/en/latest/index.html正在上传…重新上传取消

01 | 工具包适用范围

目前PySwarm工具包既可用来求解单目标连续优化问题,又可用来求解基于序列的单目标离散优化问题,如车间调度问题、旅行商问题等。

02 | 工具包安装方法

在终端执行如下命令:

pip install pyswarms
03 | 工具包使用实例

求解问题为 ,求解代码如下,其中w设为0.9,c1设为0.5,c2设为0.3,种群数目n_particles设为10,迭代次数iters设为1000:

# Import modules
import numpy as np

# Import PySwarms
import matplotlib.pyplot as plt
import pyswarms as ps
from pyswarms.utils.functions import single_obj as fx
from pyswarms.utils.plotters import plot_cost_history

# Some more magic so that the notebook will reload external python modules;
# see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython

# Set-up hyperparameters
options = {'c1': 0.5, 'c2': 0.3, 'w':0.9}

# Call instance of PSO
optimizer = ps.single.GlobalBestPSO(n_particles=10, dimensions=2, options=options)

# Perform optimization
cost, pos = optimizer.optimize(fx.sphere, iters=1000)

plot_cost_history(cost_history=optimizer.cost_history)
plt.show()

求解结果如下:

best cost: 5.230774092236189e-41
best pos: [-1.73648867e-21  7.02085095e-21]

▎参考文献

[1]Sun J, Palade V, Wu X J, et al. Solving the power economic dispatch problem with generator constraints by random drift particle swarm optimization[J]. IEEE Transactions on Industrial Informatics, 2013, 10(1): 222-232.

[2]李超. 粒子群优化算法改进策略及其应用研究[D]. 江南大学, 2021.

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/794641.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-06
下一篇 2022-05-06

发表评论

登录后才能评论

评论列表(0条)

保存