优化算法PSO

 1. 粒子群优化算法PSO

粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。

  粒子群算法模仿昆虫、兽群、鸟群和鱼群等的群集行为,这些群体按照一种合作的方式寻找食物,群体中的每个成员通过学习它自身的经验和其他成员的经验来不断改变其搜索模式。 粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.

    PSO的优势:在于简单容易实现并且没有许多参数的调节。目前已被广泛应用于函数优化、神经网络训练、模糊系统控制以及其他遗传算法的应用领域。 

遗传算法和PSO的比较

    1)共性:
         (1) 都属于仿生算法。
         (2) 都属于全局优化方法。
         (3) 都属于随机搜索算法。
         (4) 都隐含并行性。
         (5) 根据个体的适配信息进行搜索,因此不受函数约束条件的限制,如连续性、可导性等。
         (6) 对高维复杂问题,往往会遇到早熟收敛和收敛 性能差的缺点,都无法保证收敛到最优点。  

    2)差异:     
         (1) PSO有记忆,好的解的知识所有粒子都保 存,而GA(Genetic Algorithm),以前的知识随着种群的改变被改变。
         (2) PSO中的粒子仅仅通过当前搜索到最优点进行共享信息,所以很大程度上这是一种单共享项信息机制。而GA中,染色体之间相互共享信息,使得整个种群都向最优区域移动。
         (3) GA的编码技术和遗传操作比较简单,而PSO相对于GA,没有交叉和变异操作,粒子只是通过内部速度进行更新,因此原理更简单、参数更少、实现更容易。

         (4) 应用于人工神经网络(ANN)

         GA可以用来研究NN的三个方面:网络连接权重、网络结构、学习算法。优势在于可处理传统方法不能处理的问题,例如不可导的节点传递函数或没有梯度信息。
         GA缺点:在某些问题上性能不是特别好;网络权重的编码和遗传算子的选择有时较麻烦。
         已有利用PSO来进行神经网络训练。研究表明PSO是一种很有潜力的神经网络算法。速度较快且有较好的结果。且没有遗传算法碰到的问题。

改进PSO算法

①gbest是PSO算法中的关键,在多次迭代后,gbest不再提升的原因很可能是其陷入了局部最优,为了防止其永久收敛我们需要重置gbest的部分基因,即将某些基因随机变异再评价是否提升,如果提升则替换,如果没有则回滚。

②pbest的局部搜索策略,同样地对于pbest来说,我们需要对其进行局部搜索来加快种群的收敛性。在二进制编码的PSO中,我们可以通过pbest部分基因位的flip策略来提升。

示意图:

缺点:以上两点虽然可以提升算法性能,但是由于其增加了评价次数,增加了时间的消耗,在大规模问题中有待改善。

参考资料:Tran B, Xue B, Zhang M. Improved PSO for Feature Selection on High-Dimensional Datasets[C]// Asia-Pacific Conference on Simulated Evolution and Learning. Springer International Publishing, 2014:503-515.

代码实现的话参考 https://pythonhosted.org/pyswarm/

from pyswarm import pso

def banana(x):
    x1 = x[0]
    x2 = x[1]
    return x1**4 - 2*x2*x1**2 + x2**2 + x1**2 - 2*x1 + 5

def con(x):
    x1 = x[0]
    x2 = x[1]
    return [-(x1 + 0.25)**2 + 0.75*x2]

lb = [-3, -1]
ub = [2, 6]

xopt, fopt = pso(banana, lb, ub, f_ieqcons=con)

# Optimum should be around x=[0.5, 0.76] with banana(x)=4.5 and con(x)=0

pso完整函数是:

pso(func, lb, ub, ieqcons=[], f_ieqcons=None, args=(), kwargs={},
    swarmsize=100, omega=0.5, phip=0.5, phig=0.5, maxiter=100, minstep=1e-8,
    minfunc=1e-8, debug=False)

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值