多目标粒子群(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. 另:如果有伙伴有待解决的优化问题(各种领域都可),可以发我,我会选择性的更新利用优化算法解决这些问题的文章。 如果这篇文章对你有帮助或启发,可以点击右下角的赞/在看 (ง•̀_•́)ง(不点也行)

相关推荐
wbs_scy3 分钟前
C++11:类新功能、lambda与包装器实战
开发语言·c++
2301_7657031418 分钟前
C++中的职责链模式实战
开发语言·c++·算法
StandbyTime27 分钟前
《算法笔记》学习记录-第一章
c++·算法·算法笔记
近津薪荼31 分钟前
优选算法——双指针8(单调性)
数据结构·c++·学习·算法
f狐0狸x32 分钟前
【C++修炼之路】C++ list容器基本用法详解
开发语言·c++·list
格林威33 分钟前
Baumer相机铆钉安装状态检测:判断铆接是否到位的 5 个核心算法,附 OpenCV+Halcon 的实战代码!
人工智能·opencv·算法·计算机视觉·视觉检测·工业相机·堡盟相机
坚持就完事了37 分钟前
Java的OOP
java·开发语言
jllllyuz42 分钟前
基于MATLAB的锂电池物理对象建模实现
开发语言·matlab
MyBFuture1 小时前
C#数组详解:一维二维与交错数组
开发语言·windows·c#·visual studio·vision pro
程序 代码狂人1 小时前
CentOS7初始化配置操作
linux·运维·开发语言·php