目前我尝试最小化函数,并使用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)
我想给这个函数添加限制条件。 这里有一个例子。在
^{pr2}$我应该如何修改此代码?在
GPyOpt只支持
c(x0, x1, ..., xn) <= 0
形式的约束,因此您所能做的最好的就是选择一个足够小的值,并“夹心”您所拥有的约束表达式。假设0.1足够小,那么可以这样做:然后呢
^{pr2}$API应该是这样的:
我找到了一个更快的方法。在
如果需要X0+X1…..Xn==100000000,则只需将X0+X1….Xn-1给GpyOpt。在
在GpyOpt给你(X0+X1…..Xn-1)后,你可以得到
Xn = 100000000 - sum(X0+X1.....Xn-1)
相关问题 更多 >
编程相关推荐