您的位置:首页 > 大数据 > 人工智能

粒子群算法(三)局部版本

2015-11-24 16:44 591 查看
在全局的标准粒子群算法中,每个粒子速度的更新是根据两个因素变化的。这两个因素是:
1.粒子自己历史最优值 pi。
2.粒子群体的全局最优值 pg。
如果改变粒子速度更新公式,让每个粒子速度的更新根据以下两个因素进行:A.粒子自己历史最优值pi。B.粒子邻域内粒子的最优值pnk。其余保持跟全局的标准粒子群算法一样,这个算法就变为局部的粒子群算法。
一般一个粒子i的邻域随着迭代次数的增加而逐渐增加,开始第一次迭代,它的邻域为0,随着迭代次数邻域线性变大,最后邻域扩展到整个粒子群,这时就变成全局的粒子群算法了。经过实践证明:全局的粒子群算法收敛速度快,但是容易陷入局部最优。局部的粒子群算法收敛速度慢,但是很难陷入局部最优。现在的粒子群算法大都在收敛速度与摆脱局部最优这两个方面下功夫。其实这两个方面是矛盾的,这就要看如何更好的折中了。

根据选取邻域的方式不同,局部的粒子群算法有很多不同的实现方法。

第一种方法:按照粒子的编号取粒子的邻域,取法有四种:1,环形取法 2,随机环形取法 3,轮形取法 4,随机轮形取法。
     1  环形

2 随机环形


     3 轮形


4随机轮形


对环形取法的一点说明:以粒子1为例,当邻域是0的时候,邻域是它本身,当邻域是1时,邻域为2,8;当邻域是2时,邻域是2,3,7,8;......,以此类推,一直到邻域为4,这个时候邻域扩展到整个粒子群体。
据文献介绍(国外的文献),采用轮形拓扑结构,PSO的效果很好。

第二种方法:按照粒子的欧式距离取粒子的邻域
在第一种方法中,按照粒子的编号来得到粒子的邻域,但是这些粒子其实可能在实际位置上并不相邻,于是Suganthan提出基于空间距离的划分方案,在迭代中计算每一个粒子与群中其他粒子的距离。记录任何2个粒子间的最大距离为dm。对每一粒子按照||xa-xb||/dm计算一个比值。其中||xa-xb||是当前粒子a到b的距离。而选择阈值frac根据迭代次数而变化。当另一粒子b满足||xa-xb||/dm<frac时,认为b成为当前粒子的邻域。
这种办法经过实验,取得较好的应用效果,但是由于要计算所有粒子之间的距离,计算量大,且需要很大的存储空间,所以该方法一般不经常使用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息