0

我有一个函数 f(x1,x2) 并且想使用 skopt 为 x 的两个维度设置 gp_minimization 的边界。

使用一个变量 (x1) 效果很好:

def func(x1):
    return x1[0]

bounds = [(1.0, 10.0)]

gp_res = gp_minimize(func, dimensions=bounds, acq_func="EI", n_calls=100, random_state=0)

但是使用具有多个变量的函数,例如 f(x1,x2),我需要添加第二个变量的边界。我试过这样:

def func(x1, x2):
    return x1[0][0]*x2[0][1]

bounds = [[(1.0, 10.0),(10.1, 9.9)]]
bounds[0][0] #(1.0,10.0) To set the bounds for x1
bounds[0][1] #(10.1,9.9) To set the bounds for x2

gp_res = gp_minimize(func=func, dimensions=bounds, acq_func="EI", n_calls=100, random_state=0)

我收到错误消息: ValueError: Invalid dimension [(1.0, 4.0), (1.1, 3.9)]。阅读支持类型的文档。

通过将边界更改为此:

def func(x1, x2):
    return x1[0][0]*x2[0][1]

bounds = [(1.0, 10.0),(10.1, 9.9)]

gp_res = gp_minimize(func=func, dimensions=bounds, acq_func="EI", n_calls=100, random_state=0)

我收到以下错误消息: TypeError: func() missing 1 required positional argument: 'x2'

你能帮我解决这个问题吗?如何设置两个变量的界限?

参考此示例(Tim Head,2016 年 7 月。由 Holger Nahrstaedt 2020 重新格式化): https ://scikit-optimize.github.io/stable/auto_examples/strategy-comparison.html#sphx-glr-download-auto-examples-策略比较-py

4

1 回答 1

0

解决了。

解决方案:

dim1 = Real(name='x1', low=1.0, high=100.0)
dim2 = Real(name='x2', low=1.0, high=100.0)
bounds = [dim1, dim2]

@use_named_args(dimensions=bounds)
def func(x1, x2):
 return x1*x2
于 2021-01-18T16:11:03.487 回答