2016-03-20 26 views
0

次のコード:最小化制約を持つ方程式系(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]+[p1]+[p2] - 1}) 


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

は、私がf1f2などs_t > 0sum s_t <= 1それを最小限にしたい

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

エラーをスローします、t = 1,2,3について。

+1

'Pを使用してみてください、型ndarrayでなければなりません[0] + [P1] + [P2]は'これは間違っている、それはないですか? – xvan

+0

これは 'sum s_t <= 1'という制約をモデル化すべきです。また、制約を許可するために 'method = 'SLSQP'を指定する必要があることに気付きましたが、' error:_slsqp.slsqpの8番目の引数g 'をC/Fortran配列に変換できませんでした。 stackoverflow上の別のトピックが、答えはありません.. – norac

答えて

0

2番目のパラメータは、

minimize(eq, np.ndarray([0.3,0.3,0.3]), bounds=bnds, constraints=cons) 
関連する問題