【发布时间】:2017-07-22 22:20:44
【问题描述】:
尝试使用 scipy.optimize SLSQP 解决 NLP。这个问题显然是不可行的,但 scipy.optimize 中的最小化功能似乎不同意。
minimize X^2 + Y^2
subject to
X + Y = 11
X, Y >= 6
代码:
from scipy.optimize import minimize
def obj(varx):
return varx[1]**2 + varx[0]**2
def constr1(varx):
constr1 = -varx[0]-varx[1]+11
return constr1
bnds = [(6,float('Inf')),(6,float('Inf'))]
ops = ({'maxiter':100000, 'disp':'bool'})
cons = ({'type':'eq', 'fun':constr1})
res = minimize(obj, x0=[7,7], method='SLSQP', constraints = cons, bounds = bnds, options = ops)
print res.x
print res.success
输出:
Optimization terminated successfully. (Exit mode 0)
Current function value: 72.0
Iterations: 6
Function evaluations: 8
Gradient evaluations: 2
[ 6. 6.]
True
我错过了什么吗?
【问题讨论】:
-
我以前见过这个错误。不知道如何解决这个问题(除了使用不同的求解器)。
-
知道其他可靠的非线性求解器吗?
-
请参阅here 了解有关此问题的讨论。我主要做大规模建模,我主要的通用 NLP 求解器是 CONOPT 和 IPOPT(以及其他)。
标签: python optimization scipy nonlinear-optimization