主要内容

粒子群优化算法

算法概要

particleswarm 基于肯尼迪和艾伯哈特 [1] 所述的算法,使用梅苏拉-蒙特斯和科埃略-科埃略 [2] 以及佩德森 [3] 建议的修改。

粒子群算法首先创建初始粒子,并赋予它们初始速度。

它计算每个粒子位置的目标函数,并确定最佳(最低)函数值和最佳位置。

它会根据当前速度、粒子各自的最佳位置及其邻点的最佳位置来选择新速度。

然后,它以迭代方式更新粒子位置(新位置是旧位置加上速度,经过修改以使粒子保持在一定边界内)、速度和邻点。

迭代继续进行,直到算法达到停止条件。

以下是步骤的详细信息。

初始化

默认情况下,particleswarm 在边界内随机均匀地创建粒子。如果存在无界分量,particleswarm 创建从 -1000 到 1000 的随机均匀分布的粒子。如果您只有一个边界,particleswarm 会对创建移位,将该边界作为端点,创建间隔宽度为 2000。粒子 i 的位置为 x(i),这是一个包含 nvars 个元素的行向量。使用 InitialSwarmSpan 选项控制初始群的跨度。

同样,particleswarm 在范围 [-r,r] 内随机均匀地创建初始粒子速度 v,其中 r 是初始范围的向量。分量 k 的范围是 min(ub(k) - lb(k),InitialSwarmSpan(k))

particleswarm 计算目标函数在所有粒子上的值。它记录每个粒子 i 的当前位置 p(i)。在后续迭代中,p(i) 将是粒子 i 找到最佳目标函数值的位置。而 b 是所有粒子中最好的:b = min(fun(p(i)))d 是使得 b = fun(d) 的位置。

particleswarm 将邻域大小 N 初始化为 minNeighborhoodSize = max(2,floor(SwarmSize*MinNeighborsFraction))

particleswarm 初始化惯量 W = max(InertiaRange);如果 InertiaRange 为负,则设置 W = min(InertiaRange)

particleswarm 初始化停滞计数器 c = 0

为了方便表示,设置变量 y1 = SelfAdjustmentWeighty2 = SocialAdjustmentWeight,其中 SelfAdjustmentWeightSocialAdjustmentWeight 是选项。

迭代步骤

该算法对群进行如下更新。对于所在位置为 x(i) 的粒子 i

  1. 选择包含 N 个粒子的随机子集 S,而不是 i

  2. 求邻点中的最佳目标函数值 fbest(S),以及具有最佳目标函数值的邻点的位置 g(S)

  3. 对于长度为 nvars 的均匀 (0,1) 分布的随机向量 u1u2,更新速度

    v = W*v + y1*u1.*(p-x) + y2*u2.*(g-x).

    此更新使用以下各项的加权和:

    • 先前的速度 v

    • 当前位置与粒子所见的最佳位置之间的差值 p-x

    • 当前位置与当前邻域中最佳位置的差值 g-x

  4. 更新位置 x = x + v

  5. 强制执行边界。如果 x 的任何分量在边界之外,则将其设置为等于该边界。对于那些刚刚设置为边界的分量,如果该分量的速度 v 指向边界外,则将该速度分量设置为零。

  6. 计算目标函数 f = fun(x) 的值。

  7. 如果 f < fun(p) ,则设置 p = x。此步骤确保 p 有粒子所见的最佳位置。

  8. 算法的下一个步骤应用于整个群的参数,而不是单个粒子。请考虑群中粒子 j 中的最小值 f = min(f(j))

    如果是 f < b,则设置 b = fd = x。此步骤确保 b 在群中具有最佳目标函数值,并且 d 具有最佳位置。

  9. 如果在上一步骤中最佳函数值降低,则设置 flag = true。否则,flag = falseflag 的值将用于下一步骤。

  10. 更新邻点。如果 flag = true

    1. 设置 c = max(0,c-1)

    2. N 设置为 minNeighborhoodSize

    3. 如果 c < 2 ,则设置 W = 2*W

    4. 如果 c > 5 ,则设置 W = W/2

    5. 确保 WInertiaRange 选项的边界内。

    如果 flag = false

    1. 设置 c = c+1

    2. 设置 N = min(N + minNeighborhoodSize,SwarmSize)

停止条件

particleswarm 迭代,直到达到停止条件。

停止选项停止测试退出标志
MaxStallIterationsFunctionTolerance在前 MaxStallIterations 次迭代中,最佳目标函数值 g 的相对变化小于 FunctionTolerance1
MaxIterations迭代次数达到 MaxIterations0
OutputFcnPlotFcnOutputFcnPlotFcn 可以停止迭代。-1
ObjectiveLimit最佳目标函数值 g 小于 ObjectiveLimit-3
MaxStallTime最佳目标函数值 g 在最后 MaxStallTime 秒内没有变化。-4
MaxTime函数运行时间超过 MaxTime 秒。-5

如果 particleswarm 停止并返回退出标志 1,它可以选择在退出后调用混合函数。

参考

[1] Kennedy, J., and R. Eberhart. "Particle Swarm Optimization." Proceedings of the IEEE International Conference on Neural Networks. Perth, Australia, 1995, pp. 1942–1945.

[2] Mezura-Montes, E., and C. A. Coello Coello. "Constraint-handling in nature-inspired numerical optimization: Past, present and future." Swarm and Evolutionary Computation. 2011, pp. 173–194.

[3] Pedersen, M. E. "Good Parameters for Particle Swarm Optimization." Luxembourg: Hvass Laboratories, 2010.

另请参阅

主题