当前位置:   article > 正文

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

python优化pso算法

目录

▎标准PSO算法

▎RDPSO算法

▎标准PSO算法Python工具包

01 | 工具包适用范围

02 | 工具包安装方法

03 | 工具包使用实例

▎参考文献


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

▎标准PSO算法

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

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

X_{id}^{k+1}=X_{id}^{k}+V_{id}^{k+1}\\ V_{id}^{k+1}=\omega V_{id}^{k}+c_{1} r_{1}\left(P_{i d}^{k}-X_{id}^{k}\right)+c_{2} r_{2}\left(P_{g d}^{k}-X_{id}^{k}\right)

其中,k为迭代次数;

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

 X_{id}^{k+1}为第k+1代粒子i的位置;

 X_{id}^{k}为第k代粒子i的位置;

 V_{id}^{k+1}为第k+1代粒子i的速度;

 V_{id}^{k}为第k代粒子i的速度;

 P_{i d}^{k}为第k代个体最优粒子i的位置;

 P_{g d}^{k}为第k代全局最优粒子的位置;

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

c1和c2为常数。

学者Clerc等人发现标准PSO算法稳定收敛的条件是每个粒子都趋向于点 p_{i}^{k}=\left(p_{i 1}^{k}, p_{i 2}^{k}, \ldots, p_{i D}^{k}\right) 。其中\varphi计算公式如下: p_{i d}^{k}=\varphi P_{i d}^{k}+(1-\varphi) P_{g d}^{k} ,\varphi  是一个满足(0,1)均匀分布的随机数。

▎RDPSO算法

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

V_{id}^{k+1}=VR_{id}^{k+1}+VD_{id}^{k+1} ,其中VR_{id}^{k+1}  和  VD_{id}^{k+1}的计算公式分别如下:

VR_{id}^{k+1}=\alpha\left| C_{d}^{k}-X_{id}^{k} \right|\lambda_{id}^{k}\\ C_{d}^{k}=(1 / M) \sum_{i=1}^{M} P_{i d}^k

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

VD_{id}^{k+1}=\beta \left( p_{id}^{k} - X_{id}^{k}\right)\\ p_{id}^{k}=\varphi P_{i d}^{k}+(1-\varphi)P_{g d}^{k}

综上所述,V_{id}^{k+1}的计算公式如下:

V_{id}^{k+1}=\alpha\left| C_{d}^{k}-X_{id}^{k} \right|\lambda_{id}^{k} +\beta \left( p_{id}^{k} - X_{id}^{k}\right)

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

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

X_{i d}^{k+1}=X_{i d}^{k}+V_{i d}^{k+1}

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 | 工具包使用实例

求解问题为 \min f=\sum_{i=1}^{2} x_{i}^{2},求解代码如下,其中w设为0.9,c1设为0.5,c2设为0.3,种群数目n_particles设为10,迭代次数iters设为1000:

  1. # Import modules
  2. import numpy as np
  3. # Import PySwarms
  4. import matplotlib.pyplot as plt
  5. import pyswarms as ps
  6. from pyswarms.utils.functions import single_obj as fx
  7. from pyswarms.utils.plotters import plot_cost_history
  8. # Some more magic so that the notebook will reload external python modules;
  9. # see http://stackoverflow.com/questions/1907993/autoreload-of-modules-in-ipython
  10. # Set-up hyperparameters
  11. options = {'c1': 0.5, 'c2': 0.3, 'w':0.9}
  12. # Call instance of PSO
  13. optimizer = ps.single.GlobalBestPSO(n_particles=10, dimensions=2, options=options)
  14. # Perform optimization
  15. cost, pos = optimizer.optimize(fx.sphere, iters=1000)
  16. plot_cost_history(cost_history=optimizer.cost_history)
  17. plt.show()

求解结果如下:

  1. best cost: 5.230774092236189e-41
  2. 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.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/783576
推荐阅读
相关标签
  

闽ICP备14008679号