2017-03-03 16 views
2

scipy.optimize.minimizeを使用しようとすると、最適化が失敗するようです。
1.目的関数は以下のとおりです:f(x)= x[0]+x[1]+x[2]+x[3]+10
2.制約がある:x_i >= 0
3.初期の推測では、次のとおりです。x0 = [1,1,1,1]
非常に些細な問題を、最適解x=[0,0,0,0], f(x)=10で、私は次のようでした。
コード:Python scipy最適化で最小値が見つからない

fun: 100543626.59510386 
jac: array([ 0., 0., 0., 0., 0.]) 
message: 'Optimization terminated successfully.' 
nfev: 54 
nit: 9 
njev: 9 
status: 0 
success: True 
    x: array([ 24128556.46553156, 24130378.42917114, 28154390.61929696, 
    24130291.0811042 ]) 

明らかに間違った答え(しかし、成功フラグが真である)である:

def pos(x): 
    return min(x) 
def f1(p): 
    return (p[0] + p[1] + p[2] +p[3] + 10) 
cons2 = ({'type' : 'ineq', 'fun' : pos}) 
x0 = np.array([1,1,1,1]) 
res = opt.minimize(f1, x0,method='SLSQP',constraints=cons2) 

私は、次の結果を得ます。
私はいくつかの前提があることを知っています。 "f"は続く必要がありますが、この場合 "f"は単なる超平面なので、私は本当に混乱しています。何か案は?

答えて

2

def pos(x): 
    return x 

def pos(x): 
    return min(x) 

(不等式制約関数はベクトルを返すことができ、ベクトルの各成分が制約を満たさなければならない。)交換

2つの製剤は、数学的に見えますあなたのバージョンに関する何かが計算を破ります。 SLSQPアルゴリズムでは、制約関数が微分可能であると仮定しており、min(x)は微分不可能である可能性があります。

+0

ありがとうございます。実際に問題を解決しました –

関連する問題