多目标粒子群(MOPSO)算法原理及其MATLAB实现

粒子群算法(PSO)是Eberhart和Kennedy于1995年提出的一种模拟鸟类觅食行为的算法[1],具有操作简单、速度快等特点。但在实际应用中,许多决策问题都是多目标优化问题,采用粒子群算法来处理多目标优化问题是一种有效方法,Coello 等人将粒子群优化算法扩展到多个目标,提出了基于外部存档思想和 Pareto支配基本原理的多目标粒子群算法(MOPSO)[2]

并且,在众多多目标优化算法中,多目标粒子群算法因其适用范围广、设置参数少、优化结构简单,目前在绝大多数领域都得到了应用,对其的研究也更多,也是种经典的多目标优化算法。因此本文将介绍该算法的原理及其代码实现。

00 文章目录

1 多目标粒子群优化算法原理

2 代码目录

3 算法性能

4 源码获取

01 多目标粒子群优化算法原理

1.1 算法基础-粒子群

MOPSO较之PSO,虽然多了外部存档和非支配解的概念,但MOPSO的粒子更新逻辑和PSO一致,因此了解PSO的位置更新方式是必要的。

PSO是一种基于粒子之间信息共享的启发式算法,种群中的每个粒子代表待优化问题的一个潜在解,算法通过粒子在解空间内追随最优粒子的行为迭代搜索最优解。在PSO中,粒子的位置和速度更新公式如下:

其中,pi(t)代表粒子i的最佳位置,视作粒子的" 自知部分

"学习样本,而gi(t)是群体中的最佳粒子,视作粒子的" 社会部分

"学习样本。w为惯性权重,协调全局/局部搜索能力,c1=r1* 𝜑1和c2=r2 * 𝜑2分别叫做局部和全局加速常数。

1.2 外部档案

外部档案是多目标粒子群的精英群体,算法利用网格技术对外部档案进行更新

网格技术即是对外部档案中的解集进行网格划分,当存档溢出,则要根据网格的密度删除一定数量的个体保持档案规模。

针对该策略在前面的MOGWO中作过详细讲解,这里不再赘述,感兴趣的朋友可以点下方链接。

MOGWO|多目标灰狼优化算法原理、改进、利用及代码实现(Matlab)

1.3 突变算子

虽然PSO具有高收敛速度,但其可能会导致PSO收敛到虚假的Pareto前沿(局部最优),因此原作者为提高粒子的探索能力,引入了突变算子。

1.4 算法流程

MOPSO流程和PSO相似,只是多了对于最佳粒子的轮盘赌选择以及网格机制,同样,MOPSO也有PSO算法的局限,如搜索精度不高、收敛慢等,针对这些问题可以对MOPSO进行改进

02 代码目录

MOPSO代码逻辑清晰简单,KAU已将代码进行详细注释,方便学习。

03 算法性能

以Viennet2问题为例,运行MOPSO,结果如下:

04 源码获取

公众号(KAU的云实验台 )后台回复 MOPSO

参考文献

1\] Goldberg D E, Genetic algorithms for search, optimization, and machince learning\[ M\]. Reading; MA: Addison-Wesley,1989: 100-150 \[2\]Coello CA C, Pulido G T,Lechuga M S.Handling multiple objectives with particle swarm optimization\[J\].IEEE Transactions on Evolutionary Computation,2004,8(3):256-279. 另:如果有伙伴有待解决的优化问题(各种领域都可),可以发我,我会选择性的更新利用优化算法解决这些问题的文章。 如果这篇文章对你有帮助或启发,可以点击右下角的赞/在看 (ง•̀_•́)ง(不点也行)

相关推荐
春生野草1 小时前
0413-多态、Object类方法、访问权限修饰符、装箱拆箱、128陷阱
java·开发语言
烁3471 小时前
每日一题(小白)暴力娱乐篇25
java·数据结构·算法·娱乐
烁3471 小时前
每日一题(小白)暴力娱乐篇26
java·开发语言·算法·娱乐
学c++的一天1 小时前
蓝桥杯备战
算法·职场和发展·蓝桥杯
周周记笔记1 小时前
探索R语言:在线学习资源汇总
开发语言·r语言
zuoming1201 小时前
c# 系列pdf转图片 各种处理3--net3.1到net8 PDFtoImage
开发语言·pdf·c#
FreeLikeTheWind.1 小时前
Qt问题之 告别软件因系统默认中文输入法导致错误退出的烦恼
开发语言·c++·windows·经验分享·qt
梭七y1 小时前
【力扣hot100题】(096)多数元素
算法·leetcode·职场和发展
余瑾瑜2 小时前
如何在CentOS部署青龙面板并实现无公网IP远程访问本地面板
开发语言·后端·golang
wangnaisheng2 小时前
【C#】CAN通信的使用
开发语言·c#