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

目录

▎标准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:

# 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.

  • 1
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值