主要内容gydF4y2Ba

粒子群优化算法gydF4y2Ba

算法概述gydF4y2Ba

particleswarmgydF4y2Ba是基于Kennedy和EberhartgydF4y2Ba[1]gydF4y2Ba,采用Mezura-Montes和Coello Coello建议的修改gydF4y2Ba[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均匀分布的长度随机向量gydF4y2Ba据nvargydF4y2Ba,更新速度gydF4y2Ba

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

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

    • 前面的速度gydF4y2BavgydF4y2Ba

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

    • 当前位置与当前附近最佳位置之间的差值gydF4y2Bag-xgydF4y2Ba

  4. 更新位置gydF4y2BaX = X + vgydF4y2Ba.gydF4y2Ba

  5. 实施范围。如果有gydF4y2BaxgydF4y2Ba在界限之外,设它等于那个界限。对于那些被设定了界限的分量,如果速度gydF4y2BavgydF4y2Ba将速度分量设为0。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

肯尼迪,J.和R.埃伯哈特。“粒子群优化”。gydF4y2BaIEEE国际神经网络会议论文集。gydF4y2Ba珀斯,澳大利亚,1995,1942-1945页。gydF4y2Ba

[2] Mezura-Montes, E.和c.a. Coello。“受自然启发的数值优化中的约束处理:过去、现在和未来。”gydF4y2Ba群和进化计算。gydF4y2Ba2011年,页173 - 194。gydF4y2Ba

彼得森,m.e。“粒子群优化的良好参数”。卢森堡:赫瓦斯实验室,2010年。gydF4y2Ba

相关的话题gydF4y2Ba