本文介绍了使用GpyOpt时如何添加限制条件?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
当前,我尝试使用GPyOpt来最小化功能并获得优化的参数.
Currently I try to minimize the function and get optimized parameters using GPyOpt.
import GPy
import GPyOpt
from math import log
def f(x):
x0,x1,x2,x3,x4,x5 = x[:,0],x[:,1],x[:,2],x[:,3],x[:,4],x[:,5],
f0 = 0.2 * log(x0)
f1 = 0.3 * log(x1)
f2 = 0.4 * log(x2)
f3 = 0.2 * log(x3)
f4 = 0.5 * log(x4)
f5 = 0.2 * log(x5)
return -(f0 + f1 + f2 + f3 + f4 + f5)
bounds = [
{'name': 'x0', 'type': 'discrete', 'domain': (1,1000000)},
{'name': 'x1', 'type': 'discrete', 'domain': (1,1000000)},
{'name': 'x2', 'type': 'discrete', 'domain': (1,1000000)},
{'name': 'x3', 'type': 'discrete', 'domain': (1,1000000)},
{'name': 'x4', 'type': 'discrete', 'domain': (1,1000000)},
{'name': 'x5', 'type': 'discrete', 'domain': (1,1000000)}
]
myBopt = GPyOpt.methods.BayesianOptimization(f=f, domain=bounds)
myBopt.run_optimization(max_iter=100)
print(myBopt.x_opt)
print(myBopt.fx_opt)
我想为此功能添加限制条件.这是一个例子.
I want to add limiting conditions to this function.Here is an example.
x0 + x1 + x2 + x3 + x4 + x5 == 100000000
我应该如何修改此代码?
How should I modify this code?
推荐答案
GPyOpt仅支持c(x0, x1, ..., xn) <= 0
形式的约束,因此,您最好的做法是选择一个足够小的值,并将约束表达式夹在中间",以便你有它.假设0.1足够小,那么您可以执行以下操作:
GPyOpt only supports constrains in a form of c(x0, x1, ..., xn) <= 0
, so the best you can do is to pick a small enough value and "sandwich" the constrain expression that you have with it. Let's say 0.1 is sufficiently small, then you could do this:
(x0 + x1 + x2 + x3 + x4 + x5) - 100000000 <= 0.1
(x0 + x1 + x2 + x3 + x4 + x5) - 100000000 >= -0.1
然后
(x0 + x1 + x2 + x3 + x4 + x5) - 100000000 - 0.1 <= 0
100000000 - (x0 + x1 + x2 + x3 + x4 + x5) - 0.1 <= 0
API看起来像这样:
The API would look like that:
constraints = [
{
'name': 'constr_1',
'constraint': '(x[:,0] + x[:,1] + x[:,2] + x[:,3] + x[:,4] + x[:,5]) - 100000000 - 0.1'
},
{
'name': 'constr_2',
'constraint': '100000000 - (x[:,0] + x[:,1] + x[:,2] + x[:,3] + x[:,4] + x[:,5]) - 0.1'
}
]
myBopt = GPyOpt.methods.BayesianOptimization(f=f, domain=bounds, constraints = constraints)
这篇关于使用GpyOpt时如何添加限制条件?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!