最小化带约束的方程组 (scipy.optimize.minimize)

Minimize System of Equations with constraints (scipy.optimize.minimize)

考虑以下代码:

import numpy as np
from scipy.optimize import minimize

def eq( p ):
    s1,s2,s3 = p 
    f1 = 1.1**3 / s1*1.1**1+s2*1.1**2+s3*1.1**3
    f2 = 0.9**1 / s1*0.9**1+s2*0.9**2+s3*0.9**3
    return (f1, f2) 

bnds = ( (0, None), (0, None), (0, None) )
cons = ( { 'type' : 'ineq', 'fun': lambda p: p[0]+p[1]+p[2] - 1} )


minimize( eq, (0.3,0.3,0.3),  bounds=bnds, constraints=cons )

抛出错误

TypeError: unsupported operand type(s) for -: 'tuple' and 'tuple'

我想最小化 f1f2,使得 s_t > 0sum s_t <= 1,对于 t = 1、2、3。

minimize( eq, (0.3,0.3,0.3),  bounds=bnds, constraints=cons )

第二个参数应该是 ndarray 而不是元组。 args 元组出现在初始猜测 (x0) 之后。

http://docs.scipy.org/doc/scipy-0.17.0/reference/generated/scipy.optimize.minimize.html

第二个参数应该是ndarray类型,尝试使用

 minimize( eq, np.ndarray([0.3,0.3,0.3]),  bounds=bnds, constraints=cons )