ValueError for SQLQP(scipy.optimize.minimize)



我想解决这个问题在我的书,我已经研究过,但我不能解决这个!因此,我在这里要求解决方案。如果你能帮助我,我将不胜荣幸。

from scipy.optimize import minimize
def objective(x):
x1 = x[0]
x2 = x[1]
x3 = x[2]
x4 = x[3]
return x1*x4*(x1+x2+x3)+x3
def constraint1(x):
return x[0]*x[1]*x[2]*x[3]-25.0
def constraint2(x):
sum_sq = 40
for i in range(4):
sum_sq = sum_sq - x[i]**2
return sum_sq
x0 = [1, 5, 5, 1]
print(objective(x0))
b = (1, 0, 5, 0)
bnds = (b,b,b,b)
con1 = {'type':'ineq', 'fun':constraint1}
con2 = {'type':'ineq', 'fun':constraint2}
cons = [con1,con2]
sol = minimize(objective,x0,method='SLSQP',bounds=bnds,constraints=cons)
print(sol)

和Error显示如下

ValueError                                Traceback (most recent call last)
Cell In[21], line 29
26 con2 = {'type':'ineq', 'fun':constraint2}
27 cons = [con1,con2]
---> 29 sol = minimize(objective,x0,method='SLSQP',bounds=bnds,constraints=cons)
31 print(sol)
.
.
.
ValueError: too many values to unpack (expected 2)

这是我书中揭示的答案但是,我不能得到他们,即使我尝试了几个解决方案在堆栈溢出

fun: 17.01401724549506
jac: array([14.572, 1.379, 2.379, 9.564])
message: 'Optimization terminated successfully.'
nfev: 30
nit: 5
njev: 5
status: 0
success: True
x: array([1., 4.743, 3.821, 1.379])

边界应该是(lo,up)的列表。

所以使用:

b = (1, 5)
bnds = [b,b,b,b]

请在https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.minimize.html阅读文档。

最新更新