pygmo.fast_non_dominated_sorting()计算出的非支配前沿和botorch.is_non_dominated()计算出的非支配前沿不一样

import numpy as np
import pygmo as pg
import torch
from botorch.utils.multi_objective import is_non_dominated


# 生成随机数据作为解决方案
solutions = np.array([
    [2.0, 4.0],
    [3.0, 3.5],
    [1.5, 5.0],
    [2.5, 2.0],
    [3.0, 2.5]
])

# 使用pygmo找出非支配解集
# 默认求最小
nds = pg.non_dominated_front_2d(solutions)
pygmo_non_dominated_solutions = solutions[nds]


# 使用botorch找出非支配解集
# 默认求最大
tensor_solutions = torch.tensor(solutions, dtype=torch.float)
botorch_non_dominated_mask = is_non_dominated(tensor_solutions)
botorch_non_dominated_solutions = solutions[botorch_non_dominated_mask]


# 打印结果
print("Non-dominated solutions using pygmo:")
print(pygmo_non_dominated_solutions)
print("\nNon-dominated solutions using botorch:")
print(botorch_non_dominated_solutions)

对于同一组数据,求出的前沿是不一样的,是为什么?

【函数讲解】pygmo中的函数 fast_non_dominated_sorting() + 利用支配关系,学习一个SVM分类器,将解分为两类-CSDN博客

【函数讲解】botorch中的函数 is_non_dominated():用于计算非支配(non-dominated)前沿-CSDN博客

是因为这两个一个是求最大(botorh)、一个求最小(pygmo)

当然这里我还是更倾向于pygmo,因为它返回较多,可以用于更多的计算需求

猜你喜欢

转载自blog.csdn.net/weixin_43135178/article/details/134391839