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,因为它返回较多,可以用于更多的计算需求