主要内容GydF4y2Ba

粒子群优化算法GydF4y2Ba

算法大纲GydF4y2Ba

partminleswarm.GydF4y2Ba基于肯尼迪和eberhart中描述的算法GydF4y2Ba[1]GydF4y2Ba,使用Mezura-Montes和Coello Coello建议的修改GydF4y2Ba[2]GydF4y2Ba在PedersenGydF4y2Ba[3]GydF4y2Ba。GydF4y2Ba

粒子群算法开始通过创建初始粒子,并为它们分配初始速度。GydF4y2Ba

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

它根据当前速度,粒子的个性最佳位置以及其邻居的最佳位置选择新的速度。GydF4y2Ba

然后它迭代地更新粒子位置(新位置是旧的一个加速,修改为保持界限内的粒子),速度和邻居。GydF4y2Ba

迭代继续,直到算法达到停止标准。GydF4y2Ba

以下是这些步骤的细节。GydF4y2Ba

初始化GydF4y2Ba

默认,GydF4y2Bapartminleswarm.GydF4y2Ba在界限内均匀产生颗粒。如果有一个无限的组件,GydF4y2Bapartminleswarm.GydF4y2Ba从-1000到1000创建随机均匀分布的粒子。如果您只有一个绑定,GydF4y2Bapartminleswarm.GydF4y2Ba将创建转移以使绑定为端点,以及2000宽的创建间隔。粒子GydF4y2Ba一世GydF4y2Ba有位置GydF4y2Bax(i)GydF4y2Ba,这是一排矢量GydF4y2BaNVARS.GydF4y2Ba元素。控制初始群体的跨度使用GydF4y2Bainitialswarmspan.GydF4y2Ba选项。GydF4y2Ba

相似地,GydF4y2Bapartminleswarm.GydF4y2Ba创造初始粒子速度GydF4y2BaV.GydF4y2Ba在范围内均匀GydF4y2Ba[-r,r]GydF4y2Ba, 在哪里GydF4y2BaR.GydF4y2Ba是初始的矢量GydF4y2Ba范围GydF4y2Ba。组件范围GydF4y2BaK.GydF4y2Ba是GydF4y2Bamin(UB(k) - lb(k),initialswarmspan(k))GydF4y2Ba。GydF4y2Ba

partminleswarm.GydF4y2Ba评估所有粒子的目标函数。它记录当前位置GydF4y2Bap(i)GydF4y2Ba每个颗粒GydF4y2Ba一世GydF4y2Ba。在随后的迭代中,GydF4y2Bap(i)GydF4y2Ba将是粒子的最佳目标函数的位置GydF4y2Ba一世GydF4y2Ba找到了。和GydF4y2BaB.GydF4y2Ba所有粒子都是最好的:GydF4y2Bab = min(乐趣(p(i)))GydF4y2Ba。GydF4y2BaD.GydF4y2Ba是位置这样的位置GydF4y2BaB =有趣(D)GydF4y2Ba。GydF4y2Ba

partminleswarm.GydF4y2Ba初始化邻域大小GydF4y2BaN.GydF4y2Ba至GydF4y2BaMinneighborfoodsize = Max(2,地板(群体化* Minneighborsfraction))GydF4y2Ba。GydF4y2Ba

partminleswarm.GydF4y2Ba初始化惯性GydF4y2Baw = max(inertiarange)GydF4y2Ba, 或者如果GydF4y2Ba惯性GydF4y2Ba是消极的,它套装GydF4y2Baw = min(inertiarange)GydF4y2Ba。GydF4y2Ba

partminleswarm.GydF4y2Ba初始化失速计数器GydF4y2BaC = 0.GydF4y2Ba。GydF4y2Ba

为方便表示符号,请设置变量GydF4y2Bay1 = selfadjustment重量GydF4y2Ba, 和GydF4y2BaY2 = SocialAdjustment重量GydF4y2Ba, 在哪里GydF4y2Baselfadjustment重量GydF4y2Ba和GydF4y2Ba社交调节重量GydF4y2Ba是选项。GydF4y2Ba

迭代步骤GydF4y2Ba

算法更新群体如下。对于粒子GydF4y2Ba一世GydF4y2Ba,它处于职位GydF4y2Bax(i)GydF4y2Ba:GydF4y2Ba

  1. 选择一个随机的子集GydF4y2BaS.GydF4y2Ba的GydF4y2BaN.GydF4y2Ba除了以外的颗粒GydF4y2Ba一世GydF4y2Ba。GydF4y2Ba

  2. 找GydF4y2BaFBEST(S)GydF4y2Ba,邻居中最好的客观函数,和GydF4y2BaG(s)GydF4y2Ba,邻居与最佳目标函数的位置。GydF4y2Ba

  3. 为了GydF4y2BaU1.GydF4y2Ba和GydF4y2BaU2.GydF4y2Ba均匀(0,1)分布的随机载体长度GydF4y2BaNVARS.GydF4y2Ba,更新速度GydF4y2Ba

    v = w * v + y1 * u1。*(p-x)+ y2 * u2。*(g-x)GydF4y2Ba。GydF4y2Ba

    此更新使用加权总和:GydF4y2Ba

    • 以前的速度GydF4y2BaV.GydF4y2Ba

    • 所见的当前位置与最佳位置之间的差异GydF4y2BaP-X.GydF4y2Ba

    • 当前位置与当前邻域中最佳位置之间的差异GydF4y2BaG-X.GydF4y2Ba

  4. 更新位置GydF4y2Bax = x + vGydF4y2Ba。GydF4y2Ba

  5. 强制执行界限。如果有任何组成部分GydF4y2BaXGydF4y2Ba在绑定之外,设置它等于该界限。对于那些刚刚设置为绑定的组件,如果速度GydF4y2BaV.GydF4y2Ba在绑定之外的该组件点,将该速度分量设置为零。GydF4y2Ba

  6. 评估目标函数GydF4y2Baf = fun(x)GydF4y2Ba。GydF4y2Ba

  7. 如果GydF4y2Baf 然后设置了GydF4y2Bap = x.GydF4y2Ba。这一步确保GydF4y2BaP.GydF4y2Ba粒子已经看到了最佳位置。GydF4y2Ba

  8. 算法的下一步骤适用于整个群体的参数,而不是单个粒子。考虑最小的东西GydF4y2Baf = min(f(j))GydF4y2Ba在颗粒中GydF4y2BajGydF4y2Ba在群体中。GydF4y2Ba

    如果GydF4y2BaF 然后设置了GydF4y2BaB = F.GydF4y2Ba和GydF4y2Bad = xGydF4y2Ba。这一步确保GydF4y2BaB.GydF4y2Ba拥有群体中最佳的客观函数,GydF4y2BaD.GydF4y2Ba有最好的位置。GydF4y2Ba

  9. 如果在上一步中,则降低了最佳功能值,然后设置GydF4y2Ba标志=真实GydF4y2Ba。除此以外,GydF4y2Ba标志=假GydF4y2Ba。的价值GydF4y2Ba旗帜GydF4y2Ba用于下一步。GydF4y2Ba

  10. 更新邻居。如果GydF4y2Ba标志=真实GydF4y2Ba:GydF4y2Ba

    1. 放GydF4y2Bac = max(0,c-1)GydF4y2Ba。GydF4y2Ba

    2. 放GydF4y2BaN.GydF4y2Ba至GydF4y2BaMinneighborfoodsizeGydF4y2Ba。GydF4y2Ba

    3. 如果GydF4y2BaC <2GydF4y2Ba然后设置了GydF4y2Baw = 2 * wGydF4y2Ba。GydF4y2Ba

    4. 如果GydF4y2BaC> 5GydF4y2Ba然后设置了GydF4y2Baw = w / 2GydF4y2Ba。GydF4y2Ba

    5. 确保这件事GydF4y2BaW.GydF4y2Ba是在界限GydF4y2Ba惯性GydF4y2Ba选项。GydF4y2Ba

    如果GydF4y2Ba标志=假GydF4y2Ba:GydF4y2Ba

    1. 放GydF4y2Bac = c + 1GydF4y2Ba。GydF4y2Ba

    2. 放GydF4y2Ban = min(n + minneighborsize,swarmsize)GydF4y2Ba。GydF4y2Ba

停止标准GydF4y2Ba

partminleswarm.GydF4y2Ba迭代,直到它到达停止标准。GydF4y2Ba

停止选择GydF4y2Ba 停止测试GydF4y2Ba 退出旗帜GydF4y2Ba
最大值GydF4y2Ba和GydF4y2Bafunctiontolerance.GydF4y2Ba 最佳目标函数值的相对变化GydF4y2BaGGydF4y2Ba在过去GydF4y2Ba最大值GydF4y2Ba迭代率小于GydF4y2Bafunctiontolerance.GydF4y2Ba。GydF4y2Ba 1GydF4y2Ba
最大GydF4y2Ba 迭代次数达到GydF4y2Ba最大GydF4y2Ba。GydF4y2Ba 0.GydF4y2Ba
outputfcn.GydF4y2Ba或者GydF4y2BaPlotfcn.GydF4y2Ba outputfcn.GydF4y2Ba或者GydF4y2BaPlotfcn.GydF4y2Ba可以停止迭代。GydF4y2Ba -1GydF4y2Ba
Objectivelimit.GydF4y2Ba 最佳客观函数价值GydF4y2BaGGydF4y2Ba小于GydF4y2BaObjectivelimit.GydF4y2Ba。GydF4y2Ba -3GydF4y2Ba
maxstalltime.GydF4y2Ba 最佳客观函数价值GydF4y2BaGGydF4y2Ba最后没有改变GydF4y2Bamaxstalltime.GydF4y2Ba秒。GydF4y2Ba -4GydF4y2Ba
MaxTime.GydF4y2Ba 功能运行时间超过GydF4y2BaMaxTime.GydF4y2Ba秒。GydF4y2Ba -5GydF4y2Ba

如果GydF4y2Bapartminleswarm.GydF4y2Ba停止退出标志GydF4y2Ba1GydF4y2Ba,它可选地在退出后调用混合函数。GydF4y2Ba

参考GydF4y2Ba

[1] Kennedy,J.和R. Eberhart。“粒子群优化。”GydF4y2BaIEEE神经网络国际会议的诉讼程序。GydF4y2Ba珀斯,澳大利亚,1995年,第194-1945页。GydF4y2Ba

[2] Mezura-Montes,E.和C.A.Coello Coello。“在自然启发的数值优化中处理 - 过去,现在和未来。”GydF4y2Ba群和进化计算。GydF4y2Ba2011年,第173-194页。GydF4y2Ba

[3] Pedersen,M。E.“粒子群优化的好参数”。卢森堡:HVASS Laboratories,2010。GydF4y2Ba

相关话题GydF4y2Ba