LLSO算法笔记

近期阅读了关于大尺度优化问题论文:《A Level-Based Learning Swarm Optimizer for Large-Scale Optimization》,是对PSO做出的改进,算法容易实现,这里做出简单总结。

一、改进策略

(一)动态层数选择
在这里插入图片描述
将种群按适应度值进行排序,排序后将粒子分层,层数的大小从层数池中选择。层数池为集合S:
在这里插入图片描述
粒子的总数np,所分的层数为nl(nl∈S),每层的粒子数为ls,ls=np/nl,余数=(np%nl),放入底层。
(1)动态层数选择
为了提高粒子的收敛速度,使用轮盘赌的方法在集合S中动态选择层数。定义集合:
在这里插入图片描述
各元素初始化为1,其中存放的是对集合S中存放的层数的相对性能改进。
在这里插入图片描述
F是上一代全局最佳适应度值,F弯是当代全局最佳适应度值。
定义集合
在这里插入图片描述
存放的是集合S中各层数被选择的概率。使用轮盘赌的方法,通过生成[0,1]的随机数,落在特定的概率区间,就选择一个特定的层数。
在这里插入图片描述
每更新一代将重新排序,再次随机选择层数,最大评估粒子数MAX_fes作为结束条件。
(二)分层学习
层数选好之后,粒子从底层开始不断向上更新,第一层不更新直接进入下一代。
在这里插入图片描述
在这里插入图片描述
公式中v(d,(i,j))代表当前在i层的第j个粒子在维度d的速度,参数ф=0.4,是(i-1)层中的随机两层,且规定rl1<rl2(如果i=2,则直接在第一层中选择),k1是[1,ls]的随机数,指在第rl1层中第k1粒子,同样的,k2是[1,ls]的随机数,指在第rl2层中第k2粒子(如果i=2,则规定k1<k2)。

二、实验结果

本实验使用测试函数
z = x^2 + y^2 - 10cos(2pix) - 10cos(2piy) + 20;
三维图像如下:
在这里插入图片描述
实验参数:
ф = 0.4;
MAX_fes=10^5; %最大评估粒子
np =300; %种群规模
s=6; %层数池中的元素个数
S=[4,6,8,10,20,50];%层数池
在这里插入图片描述
这是粒子在三维图上的分布在z轴仰视图,粒子逐渐密集与一个区域。
在这里插入图片描述
这是粒子在二维平面的运动变化收敛图,可以明显的看出粒子的收敛速度非常快。
在这里插入图片描述
这是记录器记录的粒子的适应度的变化,最优解的寻找速度也是比较快的。

三、总结

将粒子按适应度值进行动态分层,优秀粒子保留被学习,让差的粒子进行探索,不仅保持了多样性,还加速了粒子的收敛,实现了大规模优化。但是该算法还是存在一定的缺陷,改进接近全局最优将是下一步的工作。

猜你喜欢

转载自blog.csdn.net/wendy3orz/article/details/85390167