文章目录

  • 1 多标准决策
  • 2 Compromise编程
  • 3 伪权重
  • 参考文献


1 多标准决策

  在获取一组非支配解后,可以由决策者决定保留一些甚至是单个的解。这个针对多目标问题的决策过程也称为多标准决策 (Multi-criteria decision making, MCDM)。尽管Pymoo的主要精力放在优化上,其也依然提供了一些初级工具来找到一个合适的解。

  一个双目标优化的示意可以从中找到,其给出了Pareto最优解的示意:

Python可以做到同时进行多目标回归 多目标规划模型python_权重


  需要注意不同目标的值的尺度可能差距很大,需要对其进行标准处理。如果没有标准化,横坐标所对应的优化目标将目标搜索空间中的任何距离计算,因为它的规模更大。处理不同尺度的目标是任何多目标算法的固有部分,而一种常见的标准化方法是使用所谓的理想和最低点

  出于决策和概括目的,我们假设理想和最低点 (也称为边界点) 和Pareto前沿) 是未知的。因此,这些点可以近似为:

Python可以做到同时进行多目标回归 多目标规划模型python_ide_02


  相应代码为:

import matplotlib.pyplot as plt

# 理想点和最低点
approx_ideal = F.min(axis=0)
approx_nadir = F.max(axis=0)

plt.figure(figsize=(7, 5))
plt.tight_layout()
plt.scatter(F[:, 0], F[:, 1], s=30, facecolors='none', edgecolors='blue')
plt.scatter(approx_ideal[0], approx_ideal[1], facecolors='none', edgecolors='red', marker="*", s=100, label="Ideal Point (Approx)")
plt.scatter(approx_nadir[0], approx_nadir[1], facecolors='none', edgecolors='black', marker="p", s=100, label="Nadir Point (Approx)")
plt.title("Search Space")
plt.legend()
plt.show()

  基于理想和最低点,可以获取缩放后的Pareto最优解:

Python可以做到同时进行多目标回归 多目标规划模型python_python_03


  代码如下:

import matplotlib.pyplot as plt

# 理想点和最低点
approx_ideal = F.min(axis=0)
approx_nadir = F.max(axis=0)

nF = (F - approx_ideal) / (approx_nadir - approx_ideal)

fl = nF.min(axis=0)
fu = nF.max(axis=0)
print(f"Scale f1: [{fl[0]}, {fu[0]}]")
print(f"Scale f2: [{fl[1]}, {fu[1]}]")

plt.figure(figsize=(7, 5))
plt.scatter(nF[:, 0], nF[:, 1], s=30, facecolors='none', edgecolors='blue')
plt.title("Objective Space")
plt.show()

2 Compromise编程

  另一种决策方法是使用分解函数,其需要定义反映用户意愿的权重向量。向量中的权重值只能是正浮点数,和为1,向量长度等于目标数。
  对于当前的双目标优化,假设权重为:

weights = np.array([0.2, 0.8])

  导入分解函数:

from pymoo.decomposition.asf import ASF

decomp = ASF()

  当前使用的分解函数是ASF,其应当被最小化,所以选择从所有解决方案中计算出的最小ASF值:

i = decomp.do(nF, 1/weights).argmin()

  此时的权重为1/weights。对于ASF,存在数值除法和数值相乘两种方式。在pymoo中,我们进行不体现用户标准的思想的划分。因此,需要应用逆运算,这将在后续介绍,目前需要知道关于分解函数的决策是至关重要的

  此时,我们可以在原始尺度上表示找到的最优解:

Python可以做到同时进行多目标回归 多目标规划模型python_权重_04


  代码如下:

plt.figure(figsize=(7, 5))
plt.scatter(F[:, 0], F[:, 1], s=30, facecolors='none', edgecolors='blue')
plt.scatter(F[i, 0], F[i, 1], marker="x", color="red", s=200)
plt.title("Objective Space")
plt.show()

3 伪权重

Python可以做到同时进行多目标回归 多目标规划模型python_Python可以做到同时进行多目标回归_05个目标的伪权重给定为:

Python可以做到同时进行多目标回归 多目标规划模型python_Python可以做到同时进行多目标回归_06该方程计算关于每个目标Python可以做到同时进行多目标回归 多目标规划模型python_Python可以做到同时进行多目标回归_05的最差解的归一化距离。对于非凸Pareto前沿,伪权重不对应于使用加权和进行优化的结果。而对于凸Pareto前沿,伪权重表示目标空间中的位置:

Python可以做到同时进行多目标回归 多目标规划模型python_权重_08


  代码如下:

from pymoo.mcdm.pseudo_weights import PseudoWeights

i = PseudoWeights(weights).do(nF)

plt.figure(figsize=(7, 5))
plt.scatter(F[:, 0], F[:, 1], s=30, facecolors='none', edgecolors='blue')
plt.scatter(F[i, 0], F[i, 1], marker="x", color="red", s=200)
plt.title("Objective Space")
plt.show()

参考文献

【1】https://pymoo.org/getting_started/part_3.html