You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何参考点取极值时归一化超体积(S metric)计算结果异常?

为何此场景下归一化超体积结果异常?

问题背景

帕累托前沿包含两个点(415, 110929)和(78, 258337),参考点设置为[max(X)+1, max(Y)+1]。

计算代码

import pandas as pd
import pygmo as pg
import numpy as np

X = [415, 78]
Y = [110929, 258337]
df = pd.DataFrame(data=zip(X, Y))
ref_point = [max(X)+1, max(Y)+1]
data = df.to_numpy()
hyp = pg.hypervolume(data)
print(hyp.compute(ref_point))
hv_normalised = hyp.compute(ref_point) / np.prod(ref_point)
print(hv_normalised)

预期与实际结果

我推导的结果:此场景下归一化超体积应约为0.125(支配区域约为矩形(258337-0)(415-0)的1/8,支配区域面积约为(258337-110929)(415-78)/2,对应超体积为0.125)。

但实际计算得到的归一化超体积为0.0001!

参考资料

超体积的更多详情可参考PyGMO官方文档及以下论文:

Zitzler, Eckart, and Simon Künzli. "多目标搜索中基于指标的选择",并行问题求解国际会议,Springer,柏林、海德堡,2004。


问题原因分析

  • 目标方向不匹配:PyGMO的超体积计算默认以最小化目标为前提,但你的推导是基于最大化目标的逻辑。两者的支配区域计算方向完全相反:PyGMO计算的是参考点被帕累托点支配的区域,而你推导的是帕累托点支配原点的区域。
  • 参考点与归一化基准错误:你推导时以原点为下界、目标最大值为上界的矩形作为基准,但代码中用max(X)+1, max(Y)+1作为参考点,且归一化基准是该参考点的乘积,和你推导的基准数值差距极大,直接导致归一化结果偏差。

修正方案

如果你的目标是最大化X和Y,需将目标值取反转为PyGMO默认的最小化问题,同时调整参考点和归一化基准:

import pandas as pd
import pygmo as pg
import numpy as np

X = [415, 78]
Y = [110929, 258337]
# 取反转换为最小化目标(原目标越大,取反后越小)
data = np.array([[-x, -y] for x, y in zip(X, Y)])
# 参考点对应原目标的最小下界(取反后为[0,0],即原目标的0值)
ref_point = [0, 0]
hyp = pg.hypervolume(data)
hv = hyp.compute(ref_point)
# 归一化基准用原目标最大值的乘积,和你的推导逻辑一致
hv_normalised = hv / (max(X) * max(Y))
print(hv_normalised)  # 结果接近预期的0.125

如果目标是最小化X和Y,那你的推导逻辑本身错误,此时代码计算的结果是正确的:两个帕累托点都非常接近参考点(max(X)+1, max(Y)+1),因此超体积占参考点乘积的比例极低,结果约为0.0001是合理的。


内容的提问来源于stack exchange,提问作者dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 11:24:23