怎么将不同的粒子群优化算法在一个测试函数上比较?MATLAB?

关注者
5
被浏览
7,943
登录后你可以
不限量看优质回答私信答主深度交流精彩内容一键收藏

谢邀,先吐槽一下自己,没想到在知乎上回答的最多的话题竟然是有关本科期间研究过的进化算法……主要可能还是因为熟悉,毕竟研究过两年多,也带过很多人~

以下是正文:


题主的意思是想复现论文中的实验结果吧,Matlab 的话有自带pso处理工具箱,但是如果需要对比其他几种改进过的算法则推荐全部由自己编写(通常是自己在原作者提供的标准pso算法基础上去进行改进工作),这是因为进化算法的改进文章极少有提供代码的,但是对照论文中的改进步骤自己编写也不难。毕竟针对进化算法的改进无非就是几大类:

1.改进搜索方程,通过加入一些特定参数提高算法性能

2.在添加参数的同时可能去除原算法中的参数(经典例子就是在粒子群算法中去除速度项的简化版pso,例子附图回答末尾)

3.在搜索方程以外的其他部分做出改进

但无论如何,改进的详细步骤及操作通常在文中都有提及,正常编程水准的人应该都可以编程实现。

而后便是实验仿真阶段,进化算法的改进文章通常采用对比在不同目标函数下(通常采用多维度多峰多极值的函数)固定进化代数时得到的精度(多次实验,取平均值);或固定优化精度,对比达到该精度所对应的进化代数(多次实验,取平均值)。

所以要想对比几个算法的性能,就在相同粒子数及相同其他参数的情况下用每个算法去求解每个目标函数就可以了。

最后编写代码一定注意保留各项实验数据,方便画出函数进化曲线,这个是非常具有说服力的结果展示方法,也可以让你对照原文实验结果,看一下自己编写的程序是否有误。

Tips: 画出图像时比较简便的一种方法就是比如bpso的进化曲线已经在fig1中画出,那么在gpso得出结果后,画图不要给出创建新fig的指令,直接画,以颜色区分,就可以把图像画到同一个fig里了。如果操作不熟练的话,把实验结果的参数保存下来,方便后面再利用结果进行操作,就不必再重复实验了(保留结果各种参数的习惯很重要,在进化算法的改进实验中还好,我之前做配准的时候一个实验就要跑10分钟到两个小时,然后需要跑5个算法,4个模型,也就是20个实验,如果结果参数没有保存好,之后要补图之类的会很辛酸的……)。


题外话,题主应该是刚开始接触科研或者刚开始使用Matlab ?

提个小建议吧,如果要将进化算法作为研究课题,从pso入手的确是个非常好的开始。但相对于其他来说,pso毕竟比较古老了,不太适合如今需要处理问题的优化需求。进化算法可以关注一下澳大利亚的Seyedali Mirjalili

学者,这简直就是个进化算法的狂魔(灌水大师),每年都会发表新的进化算法并提供代码~)再给出一个非常厉害的国内玩家:高卫峰 (西安电子科技大学),我的文章发表还是受了他论文的很大启发,相比于前面提到的澳大利亚人,我认为这是真大佬。。。

此外,进化算法的研究在科研领域内来说目前基本已达到天花板。所有的改进套路的非常相似,基本也就你抄我抄你吧……毕竟已经被研究了很久了,非常难以得出极为优秀的改进策略。我认为比较好的灌水方式就是查找最近发布的算法,再用一些在其他算法上效果非常好的改进策略去改。(初入科研的话,灌水一篇还是ok的,不过长期下去,还是要认真创新,少做无意义的灌水工作)此外,由于进化算法的天花板现状,目前很多期刊都很难录用这方面的改进(灌水)文章了。大概只能往IF比较低的期刊投比较容易中,也就是三区四区吧。三区都很难了现在,我学弟前段时间改了一个算法,投了一个IF 2点几的三区期刊然后被狂怼拒录,hhh。一区二区那就不说了,需要很好的改进策略或者综述类文章。(国内的期刊不作评论,没有研究过,不过想来核心期刊很难,普通期刊里这类文章应该还是比较容易发的吧~)总体而言很难,出成果的效率相比于其他领域偏低,不过将进化算法结合到别的领域内作应用的相关改进文章倒是非常不错,引一下自己发的文章吧,如果感兴趣的话可以看一下:doi.org/10.1016/j.cviu.


BTW,题主若是有关于其他进化算法或者图像配准(以前的研究方向,hhh)方面的问题,欢迎私信,我看到之后一般都会回的~


Ref: