多目标优化算法——多目标粒子群优化算法(MOPSO)

Handling Multiple Objectives With Particle Swarm Optimization(多目标粒子群优化算法)

一、摘要:

本文提出了一种将帕累托优势引入粒子群优化算法 的方法,使该算法能够处理具有多个目标函数 的问题。与目前其他将粒子群算法扩展到解决多目标优化问题的建议不同,我们的算法使用二级(即外部)粒子库 ,这些粒子库稍后被其他粒子用来引导它们自己的飞行 。我们还加入了一个特殊的突变算子,丰富了我们算法的探索能力。采用几个测试函数和指标,从进化多目标优化的标准文献中验证了所提出的方法。结果表明,该方法具有很强的竞争性,可以被认为是解决多目标优化问题的可行选择。

二、概念解释

1.支配(Dominance ) : 在多目标优化问题中,如果个体p至少有一个目标比个体q好,而且个体p的所有目标都不比q差;那么称个体p支配个体q

S1支配S2:

S1和S2互不支配:

2.序值(Rank): 如果p支配q,那么p的序值比q低;如果p和q互不支配,那么p和q有相同的序值

3.拥挤距离(Crowding Distance): 表示个体之间的拥挤程度,测量相同序值个体之间的距离。

4.帕累托(Pareto)

pareto最优解与pareto最优解集:

如果对于优化问题的一个解A,不存在其他的解可以支配解A ,那么解A就是一个pareto最优解 。显然pareto最优解不只一个,由这些解组成的集合就称为pareto最优解集 。pareto最优解集中所有解的互相之间都是非支配的关系,也就是解集中不存在任何一个解完全优于其他解(要和平共处)。所以,和PSO最后要求出唯一一个最优解不同,MOPSO的目标是求出一个互相之间为非支配关系的解的集合,也就是pareto最优解集。

帕累托最优解也称为非劣解、可容许解或有效解;它们对应的向量称为非支配向量。

下图中:S1、S3、S5、S6、S9之间互不支配,且不被其他解支配 ,这些解称为Pareto解或非支配解 。在下图的多目标优化问题中,如果在整个可行的变量空间中再不能找到解能够支配上述五个解 ,那么上述五个解称为Pareto最优解 ,所有的Pareto最优解组成Pareto最优解集

5.帕累托最优解对应的目标函数值就是帕累托最优前沿 ,对于两个目标的问题,其Pareto最优前沿通常是条线 。而对于多个目标,其Pareto最优前沿通常是一个超曲面

6.外部存档:因为粒子群算法在迭代过程中各个粒子的速度和位置都是不断变化的,适应度(目标函数)也随之变化,所以一般都需要采用一个外部存档将pareto最优解的数据存储下来。

三、算法原理

​ 1.算法流程图

  1. MOPSO:
  • 根据pareto 支配原则,计算得到Archive 集(存放当前的非劣解)计算局部最优pbest
  • 计算Archive 集中的拥挤度在Archive 集选择全局最优gbest
  • 更新粒子的速度和位置,并计算适应值更新Archive集(需注意防止溢出)
  1. PSO和MOPSO的大框架一致,MOPSO只是根据多目标问题改进了PSO中的pbest和gbest的选取方法
  • 速度更新公式:
  • 位置更新公式:

​ 当一个决策变量超出其边界时,我们会做两件事:

​ 1)决策变量取其相应边界(下边界或上边界)的值;

​ 2)它的速度乘以**-1**,以便它在相反的方向上搜索。

  • pbest的选取:

    单目标问题中,PSO可以根据适应度直接找出该粒子历史最好的位置

    多目标问题中,MOPSO找出该粒子历史最好的位置(保存于该粒子结构体的一个属性中 ),(即如果记忆中的位置支配当前位置时,则保留记忆中的位置;否则当前位置取代记忆中的位置;)如果在更新当前粒子的历史最好位置发现当前位置与历史最佳互不支配0.5概率随机选一个

  • gbest的选取:

    单目标问题中,PSO可以根据适应度直接找出当前最好的粒子

    多目标问题中,MOPSO根据Pareto找出当前最好的粒子集合 ,最后找到最不拥挤的那个粒子

    MOPSO中,gbest变成了REP[h],REP[h]是从存储库中获取的值;索引h 的选择方式如下:那些包含一个以上粒子的超立方体的适应度值等于:任何数字x>1除以它们包含的粒子数的结果 。这旨在降低那些包含更多粒子的超立方体的适应度,它可以被视为一种适应度共享的形式。然后,我们将这些适应度值应用于轮盘赌来选择超立方体,再选择相应粒子。当选中某个超立方体后,我们随机选择超立方体中的一个粒子。

  1. 外部存档

​ 外部存档主要目的是保存搜索过程中发现的非支配向量的历史记录,由两个主要部分组成:存档控制器网格

存档控制器 :它的功能是决定一个解是否能被添加到归档集中。决策过程如下:算法的种群每次迭代发现的非支配向量与外部储存库的向量进行比较 ,这个外部储存库在一开始的时候是空的 。如果外部的归档集是空的,则接受当前解 (见Fig1,case1)。如果这个新解被外部归档集中的某个个体支配,则新解将自动被移除 (见Fig1,case2)。否则如果外部归档集中的个体没有一个支配想进入归档集的解,则这个解将被存储在外部归档集中 。如果归档集中存在某些解被新解支配,则这些解将从归档集中移除 (见Fig1,case3、4)。最后,如果外部种群达到最大容量,则启动自适应网格程序(见Fig1,case5)。

网格:为了获得均匀分布的Pareto前沿,我们的方法使用了[21]中提出的自适应网格技术。其基本思想是使用一个外部归档集储存所有非支配解。在归档集中,目标函数空间被分割成几个区域,如Fig2所示。注意,如果外部种群中的个体在当前网格边界外,则必须重新计算网格并且重新定位网格中的每个个体(见Fig3)。

自适应网格实际上是一个超立方体形成的空间。这个超立方体的维度和目标函数一样多。每个超立方体可以被解释为一个不含任何个体的地理区域。自适应网格技术的主要优点是其计算开销少于小生境技术。唯一的例外是如果网格在每一代都必须更新。此时,自适应网格技术的计算复杂度和小生境技术的计算复杂度相同。自适应网格用于实现解的均匀分布。为了实现这个目标,有必要提供确定的信息(即子网格的数量)。

  1. 突变算子:突变算子通过引入随机扰动,有效避免了粒子群陷入局部最优,提升了算法的全局搜索能力。均匀突变保证了随机性,而非均匀突变则随着迭代次数的增加逐渐减少突变程度,平衡了探索和开发的关系。
四、ZDT问题运行结果
  1. ZDT1

  2. ZDT2

  3. ZDT3

  4. ZDT4

相关推荐
z千鑫21 分钟前
【C/C++】深入解析 Stack 与 Queue 数据结构(详解):实现原理、应用场景与性能优化
c语言·开发语言·数据结构·c++·深度学习·算法·排序算法
Y编程小白1 小时前
Leecode经典题2--移除元素
数据结构·算法·leetcode
Wils0nEdwards1 小时前
Leetcode 颠倒二进制位
算法·leetcode·职场和发展
醇醛酸醚酮酯1 小时前
两数之和--leetcode100题
数据结构·算法·leetcode
xiaoshiguang31 小时前
LeetCode:19.删除链表倒数第N个节点
算法·leetcode·链表
m0_675988231 小时前
Leetcode3208:交替组 II
c语言·数据结构·算法·leetcode
yun_shui_1 小时前
【力扣】58.字符串中最后一个字符的长度
算法·leetcode·职场和发展
Sunyanhui11 小时前
力扣 二叉树的层序遍历-102
数据结构·算法·leetcode
Ws_1 小时前
leetcode x 的平方根
python·算法·leetcode
沈小农学编程1 小时前
【LeetCode面试150】——57插入区间
c++·python·算法·leetcode·面试·职场和发展