Abstract
分解是传统多目标优化算法中的基础策略,但是分解策略还未能广泛的应用于多目标进化优化算法中。该篇文章提出了一个基于分解的多目标进化算法MOEA/D:将一个多目标优化问题分解成许多单目标优化子问题,然后同时对这些子问题进行优化。由于对每一个子问题进行优化时仅使用该子问题邻近的几个子问题的相关信息,因此MOEA/D算法有较低的计算复杂度。实验结果显示了使用标准化目标函数的MOEA/D算法能够处理不同缩放程度的目标。此外,使用高级分解方法的MOEA/D算法对三目标测试问题进行优化时可以生成一系列均匀分布的解。小种群的MOEA/D算法性能以及MOEA/D算法的可拓展性和灵敏性也在文章中以实验的方式进行了展示。
这个算法的精髓在于通过聚合函数把多目标优化问题转化为单目标优化。首先需要在目标空间均匀分布权重,以下面图为例,权重的数量与种群规模相同,种群规模是N,那么权重的数量就是N。每组权重向量将多目标优化问题转化为一个单目标优化问题。N组权重向量就是N个单目标优化问题。
文中 λ ∗ = ( λ 1 , λ 2 , . . . , λ m ) \lambda^*=(\lambda^1,\lambda^2,...,\lambda^\mathrm{m}) λ∗=(λ1,λ2,...,λm) 为一系列权重指标,其中 ∑ i = 0 m λ i = 1 \sum_{i=0}^\mathrm{m}\lambda^\mathrm{i}=1 ∑i=0mλi=1 。即上图为例 w i w_i wi 等价 λ i \lambda_\mathrm{i} λi。
II. DECOMPOSITION OF MULTIOBJECTIVE OPTIMIZATION 多目标优化的分解
A. Weighted Sum Approach 加权和方法(向量投影角度理解)
该方法通过一个非负权重向量将MOP转换为单目标子向量。设 λ = ( λ 1 , λ 2 , . . . λ m ) T \lambda=(\lambda_1,\lambda_2,...\lambda_{\mathrm{m}})^{\mathrm{T}} λ=(λ1,λ2,...λm)T是权重向量且满足 ∑ i = 1 m λ i = 1 \sum_{\mathrm{i}=1}^{\mathrm{m}}\lambda_{\mathrm{i}}=1 ∑i=1mλi=1(每个目标函数都有自己的权重),那么下面这个单目标优化问题的最优解(唯一) 就是一个Pareto最优解。
maxmize g w s ( x ∣ λ ) = ∑ i = 1 m λ i f i ( x ) ( 1 ) s . t . x ∈ Ω \text{maxmize}\quad\mathrm{g^{ws}(x|\lambda)=\sum_{i=1}^{m}\lambda_if_i(x)\quad(1)}\\\mathrm{s.t.~x~\in~\Omega} maxmizegws(x∣λ)=i=1∑mλifi(x)(1)s.t. x ∈ Ω
它的最优解就是MOP的一个Pareto最优解, g w s ( x ∣ λ ) g^{ws}(x|\lambda) gws(x∣λ) 说明了x是待优化的变量, λ \lambda λ 是这个目标函数的一个系数向量。在上述的标量优化问题当中,如果需要一组不同的Pareto最优向量,那么我们可以利用不同的权重向量 λ \lambda λ 去产生它们 [ 8 ] ^{[8]} [8]。
对式(1), ∑ i = 1 m λ i f i ( x ) \sum_{i=1}^{\mathrm{m}}\lambda_{\mathrm{i}}f_{\mathrm{i}}(x) ∑i=1mλifi(x) (即权重向量和目标函数值向量相乘)可以看做点 f i ( x ) \mathrm{f_i( x) } fi(x) (目标函数向量即为一个Pareto最优解)在 λ \lambda λ方向上的投影。从各个最优解向 λ \lambda λ方向作垂线,从原点到垂点的距离即是投影值。上图中,A即为最短投影点。
通过设置不同的权重向量 λ \lambda λ,就可以得到所有的最短投影点,共同组成Pareto最优解集。然而,使用这种方法难以寻找非凸解 (非凸解
向参照向量的垂线不能与PF相切)。实际应用时可以采用 ε − \varepsilon- ε−constraint的方法解决这种问题。
B. Tchebycheff Approach [1] 切比雪夫聚合法(最大距离最小化角度理解)
切比雪夫法中单目标优化函数的表达形式为:(m 个目标,x 为一组决策变量)
minimize g t e ( x ∣ λ , z ∗ ) = max 1 ≤ i ≤ m { λ i ( f i ( x ) − z i ∗ ) } ( 2 ) s.t. s . t . x ∈ Ω \begin{array}{rl}\text{minimize}&\mathrm{g^{te}(x|\lambda,z^*)=\max_{1\leq i\leq m}\{\lambda_i(f_i(x)-z_i^*)\}\quad(2)}\\\text{s.t.}&\mathrm{s.t.~x~\in~\Omega}\end{array} minimizes.t.gte(x∣λ,z∗)=max1≤i≤m{λi(fi(x)−zi∗)}(2)s.t. x ∈ Ω
注意公式中: 总共 m 个目标,通过计算 f i ( x ) − z i ∗ \mathrm{f_i( x) - z_i^*} fi(x)−zi∗ 的最大值,从而将 m 个目标转化为单目标问题。
其中, z ∗ = ( z 1 ∗ , . . . , z m ∗ ) T \mathrm{z}^*=(\mathrm{z}_1^*,...,\mathrm{z}_m^*)^\mathrm{T} z∗=(z1∗,...,zm∗)T是参考点 (理想点), z i ∗ = min { f i ( x ) ∣ x ∈ Ω } \mathrm{z}_{\mathrm{i}}^*=\min\left\{\mathrm{f}_{\mathrm{i}}(\mathrm{x})|\mathrm{x}\in\Omega\right\} zi∗=min{fi(x)∣x∈Ω}, 即z ∗ ^* ∗是由所有目标函数最小值组成的参考向量。原文中给出的是 max \max max,但是由于后续仿真实验中作者采用的均是minimization MOP,所以此处应为min,也就是论文中的该处注释:
当真实点与理想点之间最大的距离都最小了,那其他点肯定也是最小点了,即达到了最优。
z ∗ = ( z 1 ∗ , . . . , z m ∗ ) \mathrm{z}^*=(\mathrm{z}_1^*,...,\mathrm{z}_m^*) z∗=(z1∗,...,zm∗) 为一系列参考点 ( 理想点 ),该点不一定实际存在,如下图所示,该点仅仅为了指出函数优化的方向,也即理想状态用数学语言描述即对任意 i = 1 , 2 , . . . , m \mathrm{i= 1, 2, ..., m} i=1,2,...,m 均有 z i ∗ ≤ m i n { f i ( x ) ∣ x ∈ Ω } \mathrm{z_i^* \leq min\{ f_i( x) |x\in \Omega\} } zi∗≤min{fi(x)∣x∈Ω} 。
以其中一组权重向量 w 为例,下面公式为切比雪夫分解,其中 z 为理想点,m 为目标函数的个数,x 为一组决策变量。我们结合下面图说明,是如何将多目标问题转化为但目标问题的呢? 有两个目标函数 f1 和 f2。首先计算 w1*|f1(x)-z1|
和 w2|f2(x)-z2|
,取其中最大的值,这样相当于两目标只计算了单目标,从而转化为单目标问题进行求解。问题来了,为什么要取最大的值呢?我们可以想一下,这个数值越大说明什么呢?说明在这个目标函数上离理想点越远。假设w1*|f1(x)-z1|较大吧,我们逐渐改变x,让这个值离z越来越近,直到到达Pareto front上对应的点为止。这个过程其实就是在求这个函数g(x)=w1|f1(x)-z1|的最小值。如果连这个较大的w1|f1(x)-z1|都达到了它的最小值了,那么w2*|f2(x)-z2|不也达到它的最小值了么?对于一个权重向量w是如此,每一个权重向量都是按照这个方式求得相应的解。
C. Boundary Intersection (BI) Approach 边界交叉聚合方法-BI Approach(最小化最小值参考点与权重向量上的所求解之间的距离)
边界交叉方法适用于连续MOP问题。通常情况下,最大化连续MOP问题的PF前沿会是目标函数集的右上部分(最小化MOP的PF前沿是左下部分)。从几何学角度上理解,BI Approach是为了寻找边界处与一组线的交点。如果这组线在某种意义上均匀分布,那么所得到的交点就可以很好的代表PF 的近似前沿。这种方法可以用于求解非凸集。论文中采用由参考点发散出的一组线求解交点。单目标优化函数形式可以表示为
min g b i ( x ∣ λ , z ∗ ) = d ( 3 ) s . t . z ∗ − F ( x ) = d λ , x ∈ Ω \begin{array}{c}\min\quad\mathrm{g^{bi}(x|\lambda,z^*)=d\quad(3)}\\\mathrm{s.t.}\quad\mathrm{z^*-F(x)=d\lambda,}\\\mathrm{x\in\Omega}\end{array} mingbi(x∣λ,z∗)=d(3)s.t.z∗−F(x)=dλ,x∈Ω
其中, λ \lambda λ和 z ∗ \mathrm{z^* } z∗与上文中的定义相同, F ( x ) \mathrm{F( x) } F(x)目标空间的一个解。如下图所示, z ∗ − F ( x ) = d λ \mathrm{z^* - F( x) = d\lambda} z∗−F(x)=dλ是为了确保 F ( x ) \mathcal{F(x)} F(x)与z^*共线于直线L(直线L朝入方向且经过参考点)。该问题的求解目标就是尽可能地使 F ( x ) \mathcal{F(x)} F(x)高 (d尽可能小) 直到到达PF。
但上述问题不易满足等式约束条件。论文中引入惩罚方法处理约束条件,作者称这种方法为PBI approach。单目标约束问题就变为了
min g b i p ( x ∣ λ , z ∗ ) = d 1 + θ d 2 (4) s . t . x ∈ Ω \begin{array}{rcl}\min&\mathrm{g^{bip}(x|\lambda,z^*)=d_1+\theta d_2}&\text{(4)}\\\mathrm{s.t.}&\mathrm{x\in\Omega}&\end{array} mins.t.gbip(x∣λ,z∗)=d1+θd2x∈Ω(4)
其中 θ > 0 \theta>0 θ>0 是惩罚参数
d 1 = ∥ ( z ∗ − F ( x ) ) T λ ∥ ∥ λ ∥ d 2 = ∥ F ( x ) − ( z ∗ − d 1 λ ) ∥ \begin{gathered} \mathrm{d}_{1}=\frac{\left\|\left(\mathrm{z}^{*}-\mathrm{F}\left(\mathrm{x}\right)\right)^{\mathrm{T}}\lambda\right\|}{\left\|\lambda\right\|} \\ \mathrm{d}_2=\left\|\mathrm{F}\left(\mathrm{x}\right)-\left(\mathrm{z}^*-\mathrm{d}_1\lambda\right)\right\| \end{gathered} d1=∥λ∥ (z∗−F(x))Tλ d2=∥F(x)−(z∗−d1λ)∥
从式(4)物理意义来理解,算法通过引入惩罚参数以此放宽了对所求解的要求。也就是说,所求解可以不在权重向量方向上,但若不在权重向量方向上就必须要接收惩罚。所求解距离权重向量越远,受的惩罚越厉害,以此来约束算法向权重向量的方向生成解。
从几何角度理解
d
1
\mathrm{d}_1
d1和
d
2
\mathrm{d}_2
d2两个公式: ·
d
1
\mathrm{d}_1
d1: 由点
F
(
x
)
\mathcal{F(x)}
F(x)指向参考点z
∗
^{*}
∗的向量在
λ
\lambda
λ方向上的投影。
·
d
2
:
\mathrm{d}_2:
d2: 由点y指向点
F
(
x
)
\mathrm{F( x) }
F(x)的向量模长。【反映所求解
F
(
x
)
\mathcal{F(x)}
F(x)与权重向量方向的偏离程度
算法流程
classdef MOEAD < ALGORITHM
% <multi/many> <real/integer/label/binary/permutation>
% 基于分解的多目标进化算法
% type --- 1 --- 聚合函数的类型
%------------------------------- 参考文献 --------------------------------
% Q. Zhang and H. Li, MOEA/D: A multiobjective evolutionary algorithm based
% on decomposition, IEEE Transactions on Evolutionary Computation, 2007,
% 11(6): 712-731.
%--------------------------------------------------------------------------
methods
function main(Algorithm, Problem)
%% 参数设置
type = Algorithm.ParameterSet(1);
%% 生成权重向量:N × M,种群数量 × 目标数量
[W, Problem.N] = UniformPoint(Problem.N, Problem.M);
T = ceil(Problem.N/10); % 设置 T 为后续选取的邻居数
%% 检测每个解的邻居
B = pdist2(W, W);
[~, B] = sort(B, 2); % 对距离矩阵进行排序,得到每个解的邻居索引。
B = B(:, 1:T); % 选择每个解的前 T 个最近邻
%% 生成随机种群
Population = Problem.Initialization();
Z = min(Population.objs, [], 1);
%% 优化
while Algorithm.NotTerminated(Population)
% 对于每个解
for i = 1 : Problem.N
% 选择父代, 这里 size(B, 2) 得到邻居集合 B 的列数,即邻居的数量。
% randperm 生成一个包含 1 到 size(B, 2) 的整数的随机排列,并用于从邻居集合中随机选择父代。
P = B(i, randperm(size(B, 2)));
% 生成后代
% 从邻域中选择两个父代进行 GA 的模拟二进制交叉和多项式变异操作
Offspring = OperatorGAhalf(Problem, Population(P(1:2)));
% 更新理想点
Z = min(Z, Offspring.obj);
% 更新邻居
switch type
case 1
% PBI方法
normW = sqrt(sum(W(P, :).^2, 2));
normP = sqrt(sum((Population(P).objs - repmat(Z, T, 1)).^2, 2));
normO = sqrt(sum((Offspring.obj - Z).^2, 2));
CosineP = sum((Population(P).objs - repmat(Z, T, 1)).*W(P, :), 2)./normW./normP;
CosineO = sum(repmat(Offspring.obj - Z, T, 1).*W(P, :), 2)./normW./normO;
g_old = normP.*CosineP + 5*normP.*sqrt(1 - CosineP.^2);
g_new = normO.*CosineO + 5*normO.*sqrt(1 - CosineO.^2);
case 2
% Tchebycheff方法
g_old = max(abs(Population(P).objs - repmat(Z, T, 1)).*W(P, :), [], 2);
g_new = max(repmat(abs(Offspring.obj - Z), T, 1).*W(P, :), [], 2);
case 3
% 带归一化的Tchebycheff方法
Zmax = max(Population.objs, [], 1);
g_old = max(abs(Population(P).objs - repmat(Z, T, 1))./repmat(Zmax - Z, T, 1).*W(P, :), [], 2);
g_new = max(repmat(abs(Offspring.obj - Z)./(Zmax - Z), T, 1).*W(P, :), [], 2);
case 4
% 修改后的Tchebycheff方法
g_old = max(abs(Population(P).objs - repmat(Z, T, 1))./W(P, :), [], 2);
g_new = max(repmat(abs(Offspring.obj - Z), T, 1)./W(P, :), [], 2);
end
Population(P(g_old >= g_new)) = Offspring;
end
end
end
end
end