多目标粒子群(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.

另:如果有伙伴有待解决的优化问题(各种领域都可),可以发我,我会选择性的更新利用优化算法解决这些问题的文章。

如果这篇文章对你有帮助或启发,可以点击右下角的赞/在看 (ง•̀_•́)ง(不点也行)

相关推荐
zmd-zk几秒前
flink学习(2)——wordcount案例
大数据·开发语言·学习·flink
好奇的菜鸟5 分钟前
Go语言中的引用类型:指针与传递机制
开发语言·后端·golang
诚丞成8 分钟前
滑动窗口篇——如行云流水般的高效解法与智能之道(1)
算法
Alive~o.014 分钟前
Go语言进阶&依赖管理
开发语言·后端·golang
花海少爷16 分钟前
第十章 JavaScript的应用课后习题
开发语言·javascript·ecmascript
手握风云-17 分钟前
数据结构(Java版)第二期:包装类和泛型
java·开发语言·数据结构
喵叔哟36 分钟前
重构代码中引入外部方法和引入本地扩展的区别
java·开发语言·重构
尘浮生43 分钟前
Java项目实战II基于微信小程序的电影院买票选座系统(开发文档+数据库+源码)
java·开发语言·数据库·微信小程序·小程序·maven·intellij-idea
hopetomorrow1 小时前
学习路之PHP--使用GROUP BY 发生错误 SELECT list is not in GROUP BY clause .......... 解决
开发语言·学习·php
小牛itbull1 小时前
ReactPress vs VuePress vs WordPress
开发语言·javascript·reactpress