粒子群算法介绍

优化算法——粒子群优化介绍

1. 基本概念

粒子群优化算法(PSO:Particle swarm optimization) 是一种进化计算技术(evolutionary computation)。源于对鸟群捕食的行为研究。粒子群优化算法的基本思想:是通过群体中个体之间的协作和信息共享来寻找最优解.
PSO的优势:在于简单容易实现并且没有许多参数的调节。

2. 算法分析

2.1 基本思想

粒子群算法通过设计一种无质量的粒子来模拟鸟群中的鸟,粒子仅具有两个属性:速度和位置,速度代表移动的快慢,位置代表移动的方向。每个粒子在搜索空间中单独的搜寻最优解,并将其记为当前个体极值,并将个体极值与整个粒子群里的其他粒子共享,找到最优的那个个体极值作为整个粒子群的当前全局最优解,粒子群中的所有粒子根据自己找到的当前个体极值和整个粒子群共享的当前全局最优解来调整自己的速度和位置。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.2 更新规则

PSO初始化为一群随机粒子(随机解)。然后通过迭代找到最优解。在每一次的迭代中,粒子通过跟踪两个“极值”(pbest,gbest)来更新自己。在找到这两个最优值后,粒子通过下面的公式来更新自己的速度和位置。
( 1 ) v i = v i + c 1 × rand ⁡ ( ) × ( p b e s t i − x i ) + c 2 × r a n d 0 × ( g b e s t i − x i ) (1) v_{i}=v_{i}+c_{1} \times \operatorname{rand}() \times\left(p b e s t_{i}-x_{i}\right)+c_{2} \times r a n d 0 \times\left(g b e s t_{i}-x_{i}\right) 1vi=vi+c1×rand()×(pbestixi)+c2×rand0×(gbestixi)

( 2 ) x i = x i + v i (2)x_{i}=x_{i}+v_{i} 2xi=xi+vi

式子中,i=1,2,3…N,N是此群中的粒子数量。rand()是介于(0,1)的随机数。 c 1 c_1 c1 c 2 c_2 c2是学习因子,通常=2.

公式(1)的第一部分称为【记忆项】,表示上次速度大小和方向的影响;公式(1)的第二部分称为【自身认知项】,是从当前点指向粒子自身最好点的一个矢量,表示粒子的动作来源于自己经验的部分;公式(1)的第三部分称为【群体认知项】,是一个从当前点指向种群最好点的矢量,反映了粒子间的协同合作和知识共享。粒子就是通过自己的经验和同伴中最好的经验来决定下一步的运动。以上面两个公式为基础,形成了PSO的标准形式。
v i = ω × v i + c 1 × rand ⁡ ( ) × ( p  best  i − x i ) + c 2 × rand ⁡ ( ) × (  gbest  i − x i ) v_{i}=\omega \times v_{i}+c_{1} \times \operatorname{rand}() \times\left(p \text { best }_{i}-x_{i}\right)+c_{2} \times \operatorname{rand}() \times\left(\text { gbest }_{i}-x_{i}\right) vi=ω×vi+c1×rand()×(p best ixi)+c2×rand()×( gbest ixi)
ω \omega ω叫做惯性因子,其值非负。值较大,全局寻优能力强,局部寻优能力弱;值较小,全局寻优能力弱,局部寻优能力强。动态 ω \omega ω可以获得更好的寻优结果。目前采用较多的是线性递减权值策略。

2.3 流程图、伪代码

在这里插入图片描述

3. 量子粒子群算法

3.1 PSO算法的缺点:

1、需要设定的参数(惯性因子 ω \omega ω ,局部学习因子 c 1 c_1 c1 和全局学习因子 c 2 c_2 c2 )太多,不利于找到待优化模型的最优参数。
2、粒子位置变化缺少随机性,容易陷入局部最优的陷阱。

3.2 量子粒子群算法

量子粒子群优化(Quantum Particle Swarm Optimization,QPSO)算法取消了粒子的移动方向属性,粒子位置的更新跟该粒子之前的运动没有任何关系,这样就增加了粒子位置的随机性。

量子粒子群算法中引入的新名词:
mbest:表示pbest的平均值,即平均的粒子历史最好位置。
量子粒子群算法的粒子更新步骤:

  1. 计算mbest

M b e s t = 1 M ∑ i = 1 M p b e s t − i M_{b e s t}=\frac{1}{M} \sum_{i=1}^{M} p_{b e s t_{-} i} Mbest=M1i=1Mpbesti

其中M表示粒子群的大小, p b e s t _ i p_{{best}\_i} pbest_i 表示当前迭代中的第 i i i p b e s t pbest pbest

  1. 粒子位置更新

KaTeX parse error: Expected '}', got '_' at position 33: … p_{\text {best_̲i}}+(1-\phi) \t…

其中 g b e s t gbest gbest 表示当前全局最优粒子, P i P_i Pi 用于第 i i i 个粒子位置的更新。
粒子位置更新公式为:
x i = P i ± α ∣ M b e s t − x i ∣ ln ⁡ ( 1 u ) x_{i}=P_{i} \pm \alpha\left|M_{b e s t}-x_{i}\right| \ln \left(\frac{1}{u}\right) xi=Pi±αMbestxiln(u1)
其中 x i x_i xi 表示第 i i i 个粒子的位置, α \alpha α 为创新参数, ϕ \phi ϕ u u u 为(0,1)上的均匀分布数值。取+和−的概率为0.5。

由上所示,QPSO算法中只有一个创新参数 α \alpha α 设置,一般 α \alpha α 不大于1。


转载请注明:Daniel的博客

  • 2
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于量子粒子群算法,我没有找到与之直接相关的引用内容。量子粒子群算法是一种改进的粒子群算法,结合了量子计算的思想和粒子群算法的优势。它在搜索解空间时使用了量子位来表示粒子的位置和速度,以及量子态叠加和测量等操作。这样的设计使得量子粒子群算法具有更好的全局搜索能力和更快的收敛速度。 在Matlab中实现量子粒子群算法可以通过定义适应度函数和调用相应的优化函数来完成。首先,你需要定义一个适应度函数,该函数根据粒子的位置计算其适应值。然后,你可以使用Matlab提供的优化函数,如"ga"或"fmincon",来调用量子粒子群算法进行优化。这些函数通常需要指定粒子的数量、学习因子、权重因子和最大迭代次数等参数。 以下是一个可能的量子粒子群算法Matlab实现的示例: ```matlab % 定义适应度函数 function fitnessValue = fitnessFunction(x) % 根据粒子的位置计算适应值 % ... end % 调用量子粒子群算法进行优化 N = 50; % 粒子数量 c1 = 2; % 学习因子1 c2 = 2; % 学习因子2 w = 0.7; % 权重因子 M = 100; % 最大迭代次数 D = 10; % 解空间维度 [xm, fv = PSO(fitnessFunction, N, c1, c2, w, M, D); ``` 这段代码中,`fitnessFunction`函数用于计算粒子的适应值,`N`表示粒子数量,`c1`和`c2`是学习因子,`w`是权重因子,`M`是最大迭代次数,`D`是解空间维度。最后,使用`PSO`函数调用量子粒子群算法进行优化,并返回最优解`xm`和最优适应值`fv`。 请注意,以上示例仅用于说明如何在Matlab中实现量子粒子群算法,并没有直接引用到某个具体的参考内容。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值