当前位置:网站首页>Pymoo学习 (4): 多标准决策
Pymoo学习 (4): 多标准决策
2022-07-23 14:12:00 【因吉】
1 多标准决策
在获取一组非支配解后,可以由决策者决定保留一些甚至是单个的解。这个针对多目标问题的决策过程也称为多标准决策 (Multi-criteria decision making, MCDM)。尽管Pymoo的主要精力放在优化上,其也依然提供了一些初级工具来找到一个合适的解。
一个双目标优化的示意可以从https://inkiyinji.blog.csdn.net//article/details/125914306中找到,其给出了Pareto最优解的示意:
需要注意不同目标的值的尺度可能差距很大,需要对其进行标准处理。如果没有标准化,横坐标所对应的优化目标将目标搜索空间中的任何距离计算,因为它的规模更大。处理不同尺度的目标是任何多目标算法的固有部分,而一种常见的标准化方法是使用所谓的理想和最低点。
出于决策和概括目的,我们假设理想和最低点 (也称为边界点) 和Pareto前沿) 是未知的。因此,这些点可以近似为:
相应代码为:
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最优解:
代码如下:
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中,我们进行不体现用户标准的思想的划分。因此,需要应用逆运算,这将在后续介绍,目前需要知道关于分解函数的决策是至关重要的。
此时,我们可以在原始尺度上表示找到的最优解:
代码如下:
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 伪权重
伪权重同样用于找到一个更优的解,第 i i i个目标的伪权重给定为:
w i = ( f i m a x − f i ( x ) ) / ( f i m a x − f i m i n ) ∑ m = 1 M ( f m m a x − f m ( x ) ) / ( f m m a x − f m m i n ) w_i=\frac{(f_i^{max}-f_i(x))/(f_i^{max}-f_i^{min})}{\sum_{m=1}^M(f_m^{max}-f_m(x))/(f_m^{max}-f_m^{min})} wi=∑m=1M(fmmax−fm(x))/(fmmax−fmmin)(fimax−fi(x))/(fimax−fimin)该方程计算关于每个目标 i i i的最差解的归一化距离。对于非凸Pareto前沿,伪权重不对应于使用加权和进行优化的结果。而对于凸Pareto前沿,伪权重表示目标空间中的位置:
代码如下:
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()
参考文献
边栏推荐
猜你喜欢

MongoDB数据库+图形化工具下载安装及使用

IR drop, EM, noise and antenna

Lake Shore—EMPX-H2 型低温探针台

OpenIM重大升级-群聊读扩散模型发布 群管理功能升级

软件配置 | Anaconda下载、安装及环境配置和卸载

微机原理与技术接口随堂练习

搜索二叉树——寻找节点,插入节点,删除节点

JMeter之函数二次开发/插件开发(细版)

Function secondary development / plug-in development of JMeter (detailed version)

Case analysis of building campus information management system with low code
随机推荐
Object.defineproperty method, data agent
The first stage of basic knowledge of numpy data analysis (numpy Foundation)
已解决(selenium 操作火狐Firefox浏览器报错)AttributeError: ‘WebDriver’ object has no attribute ‘execute_cdp_cmd’
Could not load dynamic library ‘cudnn64_8.dll‘; dlerror: cudnn64_8.dll not found
Eureka笔记
软件质量体系之思
Ie box model and standard box model
Wechat applet class binding, how to bind two variables
Lake Shore - empx-h2 low temperature probe station
C语言基础篇 —— 2-4 指针的数据类型含义和强制类型转换的解析
七月集训(第23天) —— 字典树
Leetcode-168.excel table column name
Browser homology policy
iphone 无法打开openv**文件的解决方案
串的初步认识
树
TOPSIS法(MATLAB)
General paging function
一文带你了解什么是TypeScript
pwn入门(3)堆