MOEA/D 算法详解




1 聚合方法

1.1 权重求和法 (Weighted Sum Approach)

m a x i m i z e    g w s ( x / λ ) = ∑ i = 1 m λ i f i ( x ) s u b j e c t t o x ∈ Ω maximize \ \ g^{ws}(x/\lambda) = \sum_{i=1}^m \lambda_if_i(x) \\ subject to x \in \Omega maximize  gws(x/λ)=i=1mλifi(x)subjecttoxΩ

在这里插入图片描述

权重求和法的意义在于, 我们不需要去考虑多个目标函数值的优化, 而是为每个目标函数根据重要程度分配一个恰当的权重, 也即 ∑ i = 0 m λ i = 1 \sum_{i=0}^m \lambda^i = 1 i=0mλi=1 。 然后根据目标函数 f i f_i fi 的重要程度进行不同程度的优化来获取 max/min 的函数值。



1.2 切比雪夫聚合法 (Tchebycheff Approach)

公式
m i n i m i z e    g t e ( x ∣ λ , z ∗ ) = m a x 1 ≤ i ≤ m { λ ∣ f i ( x ) − z i ∗ ∣ } s . t . x ∈ Ω minimize \ \ g^{te}(x|\lambda,z^*) = \mathop{max}\limits_{1\le i \le m} \{\lambda |f_i(x)-z^*_i|\} \\ s.t. x\in \Omega minimize  gte(xλ,z)=1immax{λfi(x)zi}s.t.xΩ

切比雪夫方法思路在于不断迫使个体接近预定的理想点, 最终到达约束条件 Ω \Omega Ω 下的 Pareto 最优解。算法的精髓在于通过聚合函数把多目标优化问题转化为单目标优化。

对于上述公式提出的多目标优化问题, 求最小值, 种群规模为m, 解析如下:

z ∗ = ( z 1 ∗ , z 2 ∗ , . . . , z m ∗ ) z^* = (z_1^*,z_2^*,...,z_m^*) z=(z1,z2,...,zm) 为一系列参考点( 理想点 ) , 该点不一定实际存在, 如上图所示, 该点仅仅为了指出函数优化的方向, 也即理想状态, 用数学语言描述即对任意 i = 1 , 2 , . . . , m   均 有 z i ∗ ≤ m i n { f i ( x ) ∣ x ∈ Ω } i=1,2,...,m \ 均有 z_i^* \le min\{f_i(x)|x\in\Omega\} i=1,2,...,m zimin{fi(x)xΩ}

λ ∗ = ( λ 1 , λ 2 , . . . , λ m ) \lambda^* = (\lambda^1,\lambda^2,...,\lambda^m) λ=(λ1,λ2,...,λm) 为一系列权重指标, 其中 ∑ i = 0 m λ i = 1 \sum_{i=0}^m \lambda^i = 1 i=0mλi=1 。 以下面图为例 w i 等 价 λ i w_i 等价 \lambda_i wiλi ,权重的数量与种群规模相同,种群规模是m,那么权重的数量就是m。每组权重向量将多目标优化问题转化为一个单目标优化问题。m组权重向量就是m个单目标优化问题。

m a x 1 ≤ i ≤ m { λ ∣ f i ( x ) − z i ∗ ∣ } \mathop{max}\limits_{1\le i \le m} \{\lambda |f_i(x)-z^*_i|\} 1immax{λfi(x)zi} 为所求的目标函数。 以目标函数中的一对值 λ 1 ∣ f 1 ( x ) − z 1 ∗ ∣   与   λ 2 ∣ f 2 ( x ) − z 2 ∗ ∣ \lambda_1|f_1(x)-z_1^*| \ 与 \ \lambda_2|f_2(x)-z_2^*| λ1f1(x)z1  λ2f2(x)z2 来说明, 根据需求我们需要求得两者之中的最大值。 但是为什么要求最大值呢? 我们看以下切比雪夫集合方法的表达式

m i n i m i z e    g t e ( x ∣ λ , z ∗ ) = m a x 1 ≤ i ≤ m { λ ∣ f i ( x ) − z i ∗ ∣ } minimize \ \ g^{te}(x|\lambda,z^*) = \mathop{max}\limits_{1\le i \le m} \{\lambda |f_i(x)-z^*_i|\} minimize  gte(xλ,z)=1immax{λfi(x)zi}我们的需求是缩小 g t e ( x ∣ λ , z ∗ ) g^{te}(x|\lambda,z^*) gte(xλ,z) 的值以期获得约束集上的最小值。 这里我们考虑一个集合 A = { 10 , 8 , 7 , 4 , 5 } A = \{10,8,7,4,5\} A={10,8,7,4,5} , 我们获取了其中最大值 10 之后对其进行缩小, 来减小与理想值之间的差距 ( λ 1 ∣ f 1 ( x ) − z 1 ∗ ∣ \lambda_1|f_1(x)-z_1^*| λ1f1(x)z1 的几何意义也即 f 1 与 Z 1 ∗ 之 间 的 距 离 f_1 与 Z_1^* 之间的距离 f1Z1 ) , 那么 10 在缩小之后顺带着带动了所有 < 10 的元素都进行了缩小。 这里的思想也就等价于不等式证明的思想, 证明函数小于某个确定值, 仅需证明其函数最大值小于该确定值即可。 因此, 如果集合中最大的值都达到了其最小值, 那么其他小于它的值肯定也达到了最小值。对于一个权重向量 λ \lambda λ 是如此,每一个权重向量都是按照这个方式求得相应的解。

在切比雪夫聚合方法中, 一个确定点(个体) 移动方向可能是下图的情形。



1.3 边界交叉法 (Boundary Intersection Approach)

公式
m i n i m i z e g b i ( x ∣ λ , z ∗ ) = d s u b j e c t t o z ∗ − F ( x ) = d λ    x ∈ Ω minimize g^{bi}(x|\lambda,z^*)=d \\ subject to z^* - F(x) = d\lambda \ \ x \in \Omega minimizegbi(xλ,z)=dsubjecttozF(x)=dλ  xΩ

边界交叉法的核心思想在于缩短理想点 z ∗ z^* z 与 实际点或者说个体 M M M 之间的距离。

左图是基础边界交叉法的图示, 右图则是基于惩罚机制的边界交叉法图示。

见名知意, 基于惩罚机制的边界交叉法的精髓在于其加入了惩罚机制。 该惩罚机制在实际点距离理想点越远时惩罚力度越大(实质上也是迫使点更快趋近理想点), 与深度学习中的基于学习的SGD类似, 能够根据不同的实际情况来增大或缩小 LR



2 算法流程

2.1 解的生成

公式
m i n i m i z e    g t e ( x ∣ λ , z ∗ ) = m a x 1 ≤ i ≤ m { λ ∣ f i ( x ) − z i ∗ ∣ } s . t . x ∈ Ω minimize \ \ g^{te}(x|\lambda,z^*) = \mathop{max}\limits_{1\le i \le m} \{\lambda |f_i(x)-z^*_i|\} \\ s.t. x\in \Omega minimize  gte(xλ,z)=1immax{λfi(x)zi}s.t.xΩ

算法假设相邻的权重上的解相似,每个权重都有邻居。下面图中红色的点,它的邻居就是附近的四个点,用这四个点去生成新解。生成新解之后,就要替换邻域中的解了。这里面策略很多,可以随机替换邻域中两个解如果这个新解比他们好的话。如此,种群可以更新,最终收敛至近似的Pareto front。



2.2 输入

  1. 多目标优化问题
  2. 算法终止条件
  3. N: MOEA/D 定义的种群大小
  4. 均匀分布的 N 个权重向量: λ 1 , . . . , λ n \lambda_1,...,\lambda_n λ1,...,λn
  5. T: 每个邻域中权重向量的个数 (圈的大小)


2.3 初始化

  • Step 1

    计算每个权重向量之间的欧式距离 (对于二目标优化就是 ( x 1 , y 1 ) 与 ( x 2 , y 2 ) (x_1,y_1) 与 (x_2,y_2) (x1,y1)(x2,y2) 的距离),对于每个权重向量 λ i \lambda^i λi 得到离它最近的 T T T 个权重向量存放于 B ( i ) B(i) B(i)(相邻集合)中。实质上, 如果 λ i 与 λ j \lambda^i 与 \lambda^j λiλj 的距离近, 其对应的 g t e ( x ∣ λ i , z ∗ ) 与 g t e ( x ∣ λ j , z ∗ ) g^{te}(x|\lambda^i,z^*) 与 g^{te}(x|\lambda^j,z^*) gte(xλi,z)gte(xλj,z) 也相近 。如下图所示, 由于 ∑ i = 0 m λ i = 1 \sum_{i=0}^m \lambda^i = 1 i=0mλi=1 , 因此所有的 λ \lambda λ 会落在一条直线上, 故欧式距离越小,表示越相邻;

  • Step 2

    随机生成种群 x 1 , x 2 , . . . , x n x_1,x_2,...,x_n x1,x2,...,xn

  • Step 3

    初始化 z ∗ = ( z 1 ∗ , z 2 ∗ , . . . , z m ∗ ) z^* = (z_1^*,z_2^*,...,z_m^*) z=(z1,z2,...,zm) , z i = m i n { f i ( x 1 ) , f i ( x 2 ) , . . . , f i ( x N ) } z_i = min\{f_i(x_1),f_i(x_2),...,f_i(x_N)\} zi=min{fi(x1),fi(x2),...,fi(xN)} 即目标函数上的最小值

  • Step 4

    创建外部种群 EP 用于存储精英个体, 也即非支配个体, 初始为空



2.4 种群更新

参数解释

E P    E l i t e p o p u l a t i o n    精 英 种 群 EP \ \ Elite population \ \ 精英种群 EP  Elitepopulation  

B ( i )    邻 近 集 合 − 距 离 x 最 近 的 T 个 权 重 向 量 B(i) \ \ 邻近集合 - 距离 x 最近的 T个权重向量 B(i)  xT

z ∗    理 想 值 z^* \ \ 理想值 z  

F V x ( i )    F u n c t i o n V a l u e    目 标 函 数 值 FV^{x(i)} \ \ Function Value \ \ 目标函数值 FVx(i)  FunctionValue  

g t e ( x ( i ) ∣ λ , z ∗ )    理 解 为 到 Z ∗ 点 的 距 离 g^{te}(x(i)|\lambda,z^*) \ \ 理解为到 Z^* 点的距离 gte(x(i)λ,z)  Z

算法步骤

对每个编号为 i 个体执行以下操作

  • Step 1

    从邻近集合 B ( i ) B(i) B(i) 中随机选取序号 k , l k,l k,l 利用基因交叉生成新个体 y y y

  • Step 2

    对生成的新解(个体)进行修复和改进产生 修复后的解 y ′ y^{\prime} y

    notes: 修复的意义在于有时生成的解并不符合约束条件, 这时就需要执行修复函数进行修复,使其符合约束

  • Step 3

    更新理想值 z ∗ z^* z , 判断新生成的 y ′ y^{\prime} y 是否优于 z ∗ z^* z, 优于则替换

  • Step 4

    更新邻近集合 B ( i ) B(i) B(i) , 如果领域中解 g t e ( x ( i ) ∣ λ , z ∗ ) g^{te}(x(i)|\lambda,z^*) gte(x(i)λ,z) 小于 g t e ( y ′ ∣ λ , z ∗ ) g^{te}(y^{\prime}|\lambda,z^*) gte(yλ,z) , 则更新解对应的函数值 F V x ( i ) = F V y ′ , x ( i ) = y ′ FV^{x(i)} = FV^{y^{\prime}} , x(i) = y^{\prime} FVx(i)=FVy,x(i)=y

  • Step 5

    更新精英种群 E P EP EP, 从 E P EP EP 中移除所有被 y ′ y^{\prime} y 支配的解, 如果不存在则将 y ′ y^{\prime} y 加入 E P EP EP

  • 终止条件 是否达到迭代次数, 否则继续执行更新操作



2.5 算法框架

在这里插入图片描述
在这里插入图片描述



2.6 动画演示

动画制作比较简陋, 但大致的逻辑是对的, 可以参考, 后面有时间再做修改, 请不要做丑拒的小盆友~

更新后的 GIF 演示

附一个讲的很好的知乎回答 respect link.

  • 18
    点赞
  • 55
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
MOEAD算法是一种基于分解的多目标优化算法,最早由Qingfu Zhang等人在2007年提出。该算法的主要思想是将一个多目标优化问题分解为若干个标量优化子问题,并同时对它们进行优化。每个子问题只利用相邻的几个子问题的信息进行优化,使得MOEAD算法在每一代的计算复杂度都低于其他算法,如MOGLS和非支配排序遗传算法II(NSGA-II)。\[2\] MOEAD算法的MATLAB代码可以在GitHub上找到,可以通过下载免费源代码来使用。代码的整体结构与原文中给出的MOEA/D框架基本一致。在代码中使用了较多的结构体,这些结构体的组成在开头处有详细的解释。如果对MOEA/D算法的理论学习有需要,可以参考原文《MOEA/D: A Multiobjective Evolutionary Algorithm Based on Decomposition》。\[3\] 需要注意的是,尽管MOEAD算法的代码对于读者进行原论文算法流程的理解以及与NSGA-II算法优化结果的对比非常友好,但是该代码的二目标MOP优化结果可能略逊于上文中的代码优化结果,并且算法的运行时间没有得到特别大的改善。因此,在使用该代码时需要注意这些方面的特点。\[1\] #### 引用[.reference_title] - *1* *3* [进化计算(九)——MOEA/D代码实现及中文详解(Matlab)](https://blog.csdn.net/qq_43472569/article/details/121457243)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [多目标优化--MOEAD算法笔记](https://blog.csdn.net/qq_36317312/article/details/107245961)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值