粒子群优化算法gydF4y2Ba

算法概述gydF4y2Ba

particleswarmgydF4y2Ba基于中描述的算法进行肯尼迪和埃伯哈特gydF4y2Ba[1]gydF4y2Ba使用的修改建议在Mezura-Montes和Coello CoellogydF4y2Ba[2]gydF4y2Ba而在他gydF4y2Ba[3]gydF4y2Ba。gydF4y2Ba

粒子群算法首先创建了初始粒子,并将其分配初始速度。gydF4y2Ba

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

它选择新速度,基于当前速度,粒子的个人最好的位置,和他们的邻居的最佳位置。gydF4y2Ba

然后迭代更新粒子位置(新位置是旧+速度,修改粒子保持在允许范围内),速度,和邻居。gydF4y2Ba

算法迭代进行直到达到停止准则。gydF4y2Ba

下面是步骤的细节。gydF4y2Ba

初始化gydF4y2Ba

默认情况下,gydF4y2BaparticleswarmgydF4y2Ba创建粒子随机均匀在允许范围内。如果有一个无界的组件,gydF4y2BaparticleswarmgydF4y2Ba创建粒子随机均匀分布从-1000年到1000年。如果你只有一个绑定,gydF4y2BaparticleswarmgydF4y2Ba转变创建绑定作为端点,和一个宽间隔2000年创建。粒子gydF4y2Ba我gydF4y2Ba有位置gydF4y2Bax(我)gydF4y2Ba,这是一个行向量gydF4y2Ba据nvargydF4y2Ba元素。控制跨度的初始群体使用gydF4y2BaInitialSwarmSpangydF4y2Ba选择。gydF4y2Ba

同样的,gydF4y2BaparticleswarmgydF4y2Ba创建初始粒子速度gydF4y2BavgydF4y2Ba范围内的随机均匀gydF4y2Ba(- r, r)gydF4y2Ba,在那里gydF4y2BargydF4y2Ba初始向量的吗gydF4y2Ba范围gydF4y2Ba。组件的范围gydF4y2BakgydF4y2Ba是gydF4y2Bamin(乌兰巴托(k) -磅(k), InitialSwarmSpan (k))gydF4y2Ba。gydF4y2Ba

particleswarmgydF4y2Ba评估目标函数的粒子。记录当前位置gydF4y2Bap(我)gydF4y2Ba每个粒子的gydF4y2Ba我gydF4y2Ba。在随后的迭代,gydF4y2Bap(我)gydF4y2Ba将粒子的最佳目标函数的位置在哪里吗gydF4y2Ba我gydF4y2Ba找到了。和gydF4y2BabgydF4y2Ba是最好的在所有粒子:gydF4y2Bab = min(乐趣(p (i)))gydF4y2Ba。gydF4y2BadgydF4y2Ba位置,这样吗gydF4y2Bab =乐趣(d)gydF4y2Ba。gydF4y2Ba

particleswarmgydF4y2Ba初始化社区大小gydF4y2BaNgydF4y2Ba来gydF4y2BaminNeighborhoodSize = max(2楼(SwarmSize * MinNeighborsFraction))gydF4y2Ba。gydF4y2Ba

particleswarmgydF4y2Ba初始化惯性gydF4y2BaW = max (InertiaRange)gydF4y2Ba,或者如果gydF4y2BaInertiaRangegydF4y2Ba是负的,集吗gydF4y2BaW = min (InertiaRange)gydF4y2Ba。gydF4y2Ba

particleswarmgydF4y2Ba初始化停滞计数器gydF4y2Bac = 0gydF4y2Ba。gydF4y2Ba

为了方便的符号,设置变量gydF4y2Ba日元= SelfAdjustmentWeightgydF4y2Ba,gydF4y2Bay2 = SocialAdjustmentWeightgydF4y2Ba,在那里gydF4y2BaSelfAdjustmentWeightgydF4y2Ba和gydF4y2BaSocialAdjustmentWeightgydF4y2Ba是选择。gydF4y2Ba

迭代步骤gydF4y2Ba

蜂群算法更新如下。为粒子gydF4y2Ba我gydF4y2Ba,这是在位置gydF4y2Bax(我)gydF4y2Ba:gydF4y2Ba

  1. 随机选择一个子集gydF4y2Ba年代gydF4y2Ba的gydF4y2BaNgydF4y2Ba粒子除了gydF4y2Ba我gydF4y2Ba。gydF4y2Ba

  2. 找到gydF4y2Bafb (S)gydF4y2Ba,邻居之间的最佳目标函数gydF4y2Bag (S)gydF4y2Ba,邻居的位置最好的目标函数。gydF4y2Ba

  3. 为gydF4y2Bau1gydF4y2Ba和gydF4y2Bau2gydF4y2Ba一致(0,1)分布式随机向量的长度gydF4y2Ba据nvargydF4y2Ba、更新速度gydF4y2Ba

    v = W * v + y1 * u1。* (px) + y2 * u2。* (g-x)gydF4y2Ba。gydF4y2Ba

    这个更新使用加权之和:gydF4y2Ba

    • 前面的速度gydF4y2BavgydF4y2Ba

    • 当前位置的区别,最好的位置粒子gydF4y2BapxgydF4y2Ba

    • 当前位置的区别,最好的位置在当前社区gydF4y2Bag-xgydF4y2Ba

  4. 更新位置gydF4y2Bax = x + vgydF4y2Ba。gydF4y2Ba

  5. 实施范围。如果任何组件gydF4y2BaxgydF4y2Ba外一组绑定,它等于绑定。对于那些只是设置为绑定的组件,如果速度gydF4y2BavgydF4y2Ba组件点外的绑定,设置速度分量为零。gydF4y2Ba

  6. 评估目标函数gydF4y2Baf (x) =乐趣gydF4y2Ba。gydF4y2Ba

  7. 如果gydF4y2Baf <有趣(p)gydF4y2Ba,然后设置gydF4y2Bap = xgydF4y2Ba。这一步确保gydF4y2BapgydF4y2Ba最佳位置的粒子。gydF4y2Ba

  8. 接下来的步骤的算法适用于参数整群,而不是单个粒子。考虑最小的gydF4y2Baf = min (f (j))gydF4y2Ba粒子之间的gydF4y2BajgydF4y2Ba群。gydF4y2Ba

    如果gydF4y2Baf < bgydF4y2Ba,然后设置gydF4y2Bab = fgydF4y2Ba和gydF4y2Bad = xgydF4y2Ba。这一步确保gydF4y2BabgydF4y2Ba最好的目标函数群,gydF4y2BadgydF4y2Ba有最好的位置。gydF4y2Ba

  9. 在前面的步骤,如果当时最好的函数值降低,集gydF4y2Ba国旗= truegydF4y2Ba。否则,gydF4y2Ba国旗= falsegydF4y2Ba。的价值gydF4y2Ba国旗gydF4y2Ba在下一步中使用。gydF4y2Ba

  10. 更新社区。如果gydF4y2Ba国旗= truegydF4y2Ba:gydF4y2Ba

    1. 集gydF4y2Ba颈- 1 c = max (0)gydF4y2Ba。gydF4y2Ba

    2. 集gydF4y2BaNgydF4y2Ba来gydF4y2BaminNeighborhoodSizegydF4y2Ba。gydF4y2Ba

    3. 如果gydF4y2Bac < 2gydF4y2Ba,然后设置gydF4y2BaW = 2 * WgydF4y2Ba。gydF4y2Ba

    4. 如果gydF4y2Bac > 5gydF4y2Ba,然后设置gydF4y2BaW = W / 2gydF4y2Ba。gydF4y2Ba

    5. 确保gydF4y2BaWgydF4y2Ba的界限吗gydF4y2BaInertiaRangegydF4y2Ba选择。gydF4y2Ba

    如果gydF4y2Ba国旗= falsegydF4y2Ba:gydF4y2Ba

    1. 集gydF4y2Bac = c + 1gydF4y2Ba。gydF4y2Ba

    2. 集gydF4y2BaN = min (N + minNeighborhoodSize SwarmSize)gydF4y2Ba。gydF4y2Ba

停止条件gydF4y2Ba

particleswarmgydF4y2Ba迭代,直到它到达停止准则。gydF4y2Ba

停止选项gydF4y2Ba 停止测试gydF4y2Ba 出口标志gydF4y2Ba
MaxStallIterationsgydF4y2Ba和gydF4y2BaFunctionTolerancegydF4y2Ba 相对最好的目标函数值的变化gydF4y2BaggydF4y2Ba在过去gydF4y2BaMaxStallIterationsgydF4y2Ba迭代小于gydF4y2BaFunctionTolerancegydF4y2Ba。gydF4y2Ba 1gydF4y2Ba
MaxIterationsgydF4y2Ba 的迭代次数达到gydF4y2BaMaxIterationsgydF4y2Ba。gydF4y2Ba 0gydF4y2Ba
OutputFcngydF4y2Ba或gydF4y2BaPlotFcngydF4y2Ba OutputFcngydF4y2Ba或gydF4y2BaPlotFcngydF4y2Ba可以停止迭代。gydF4y2Ba 1gydF4y2Ba
ObjectiveLimitgydF4y2Ba 最好的目标函数值gydF4y2BaggydF4y2Ba小于gydF4y2BaObjectiveLimitgydF4y2Ba。gydF4y2Ba 3gydF4y2Ba
MaxStallTimegydF4y2Ba 最好的目标函数值gydF4y2BaggydF4y2Ba并没有改变在过去吗gydF4y2BaMaxStallTimegydF4y2Ba秒。gydF4y2Ba 4gydF4y2Ba
MaxTimegydF4y2Ba 函数运行时间超过gydF4y2BaMaxTimegydF4y2Ba秒。gydF4y2Ba 5gydF4y2Ba

如果gydF4y2BaparticleswarmgydF4y2Ba停止和退出旗gydF4y2Ba1gydF4y2Ba,它可以调用一个混合函数后退出。gydF4y2Ba

引用gydF4y2Ba

[1]肯尼迪,J。,R. Eberhart. "Particle Swarm Optimization."《IEEE国际会议上神经网络。gydF4y2Ba珀斯,澳大利亚,1995年,页1942 - 1945。gydF4y2Ba

[2]Mezura-Montes E。,C. A. Coello Coello. "Constraint-handling in nature-inspired numerical optimization: Past, present and future."群和演化计算。gydF4y2Ba2011年,页173 - 194。gydF4y2Ba

[3]彼得·m·E。“好为粒子群优化参数。”卢森堡:Hvass Laboratories, 2010.

相关的话题gydF4y2Ba