partminleswarm.GydF4y2Ba
基于肯尼迪和eberhart中描述的算法GydF4y2Ba[1]GydF4y2Ba,使用Mezura-Montes和Coello Coello建议的修改GydF4y2Ba[2]GydF4y2Ba在PedersenGydF4y2Ba[3]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
,它处于职位GydF4y2Bax(i)GydF4y2Ba
:GydF4y2Ba
选择一个随机的子集GydF4y2BaS.GydF4y2Ba
的GydF4y2BaN.GydF4y2Ba
除了以外的颗粒GydF4y2Ba一世GydF4y2Ba
。GydF4y2Ba
找GydF4y2BaFBEST(S)GydF4y2Ba
,邻居中最好的客观函数,和GydF4y2BaG(s)GydF4y2Ba
,邻居与最佳目标函数的位置。GydF4y2Ba
为了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
更新位置GydF4y2Bax = x + vGydF4y2Ba
。GydF4y2Ba
强制执行界限。如果有任何组成部分GydF4y2BaXGydF4y2Ba
在绑定之外,设置它等于该界限。对于那些刚刚设置为绑定的组件,如果速度GydF4y2BaV.GydF4y2Ba
在绑定之外的该组件点,将该速度分量设置为零。GydF4y2Ba
评估目标函数GydF4y2Baf = fun(x)GydF4y2Ba
。GydF4y2Ba
如果GydF4y2Baf
p = x.GydF4y2Ba
。这一步确保GydF4y2BaP.GydF4y2Ba
粒子已经看到了最佳位置。GydF4y2Ba
算法的下一步骤适用于整个群体的参数,而不是单个粒子。考虑最小的东西GydF4y2Baf = min(f(j))GydF4y2Ba
在颗粒中GydF4y2BajGydF4y2Ba
在群体中。GydF4y2Ba
如果GydF4y2BaF
B = F.GydF4y2Ba
和GydF4y2Bad = xGydF4y2Ba
。这一步确保GydF4y2BaB.GydF4y2Ba
拥有群体中最佳的客观函数,GydF4y2BaD.GydF4y2Ba
有最好的位置。GydF4y2Ba
如果在上一步中,则降低了最佳功能值,然后设置GydF4y2Ba标志=真实GydF4y2Ba
。除此以外,GydF4y2Ba标志=假GydF4y2Ba
。的价值GydF4y2Ba旗帜GydF4y2Ba
用于下一步。GydF4y2Ba
更新邻居。如果GydF4y2Ba标志=真实GydF4y2Ba
:GydF4y2Ba
放GydF4y2Bac = max(0,c-1)GydF4y2Ba
。GydF4y2Ba
放GydF4y2BaN.GydF4y2Ba
至GydF4y2BaMinneighborfoodsizeGydF4y2Ba
。GydF4y2Ba
如果GydF4y2BaC <2GydF4y2Ba
然后设置了GydF4y2Baw = 2 * wGydF4y2Ba
。GydF4y2Ba
如果GydF4y2BaC> 5GydF4y2Ba
然后设置了GydF4y2Baw = w / 2GydF4y2Ba
。GydF4y2Ba
确保这件事GydF4y2BaW.GydF4y2Ba
是在界限GydF4y2Ba惯性GydF4y2Ba
选项。GydF4y2Ba
如果GydF4y2Ba标志=假GydF4y2Ba
:GydF4y2Ba
放GydF4y2Bac = c + 1GydF4y2Ba
。GydF4y2Ba
放GydF4y2Ban = min(n + minneighborsize,swarmsize)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
[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