最小化带约束的方程组 (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'
我想最小化 f1
和 f2
,使得 s_t > 0
和 sum 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 )
考虑以下代码:
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'
我想最小化 f1
和 f2
,使得 s_t > 0
和 sum 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 )