【发布时间】:2021-01-20 03:04:11
【问题描述】:
我有一个非线性约束的有界优化问题,我正在尝试解决。非线性约束函数需要参数,这是我无法使其工作的地方。下面是我遵循的结构。如何将参数arg3, arg4, arg5 发送到约束函数cons?
from scipy.optimize import (BFGS, SR1, Bounds, NonlinearConstraint, minimize)
def objfcn(x, arg1, arg2):
...
return out1
def cons(x, arg3, arg4, arg5):
...
return out2
bounds = Bounds([-d, -d, -d, -d], [d, d, d, d])
nonlinear_constraint = NonlinearConstraint(cons, 0.0, 0.0, jac='2-point', hess=BFGS())
res = minimize(objfcn,
x0,
args=(arg1, arg2),
method='trust-constr',
jac="2-point",
hess=SR1(),
constraints=[nonlinear_constraint]
options={'verbose': 1},
bounds=bounds)
编辑:目前不太好的解决方案是我通过全局变量将参数传递给约束函数 cons()。
【问题讨论】:
-
只需将
x,arg1,arg2,arg3,arg4,arg5传递给两者。 -
您好欧文,感谢您的建议。我无法让它工作,我收到错误“TypeError: cons() missing 3 required positional arguments: ...”。
-
对不起,那是错误的。提供第二次尝试作为答案。
标签: python optimization scipy-optimize-minimize