私は最適化のためにSciPyを使用していますが、SLSQPは自分の制約を無視するようです。Scipy.optimize.minimize method = 'SLSQP'は制約を無視します
具体的には、私はメッセージを取得しています
[0-1]×[3]及びX [4]の範囲内であることがしたい: '不等式制約は、互換性のない'
をここにありますサンプルコードに続く実行の結果(ダミー関数を使用):ここ
status: 4
success: False
njev: 2
nfev: 24
fun: 0.11923608071680103
x: array([-10993.4278558 , -19570.77080806, -23495.15914299, -26531.4862831 ,
4679.97660534])
message: 'Inequality constraints incompatible'
jac: array([ 12548372.4766904 , 12967696.88362279, 39928956.72239509,
-9224613.99092537, 3954696.30747453, 0. ])
nit: 2
は私のコードである:
from random import random
from scipy.optimize import minimize
def func(x):
""" dummy function to optimize """
print 'x'+str(x)
return random()
my_constraints = ({'type':'ineq', 'fun':lambda(x):1-x[3]-x[4]},
{'type':'ineq', 'fun':lambda(x):x[3]},
{'type':'ineq', 'fun':lambda(x):x[4]},
{'type':'ineq', 'fun':lambda(x):1-x[4]},
{'type':'ineq', 'fun':lambda(x):1-x[3]})
minimize(func, [57.9499 ,-18.2736,1.1664,0.0000,0.0765],
method='SLSQP',constraints=my_constraints)
EDIT- 最初の制約を削除しても問題は解決しません。
境界値変数を使用しようとすると問題は解決しません。 すなわち、
bounds_pairs = [(None,None),(None,None),(None,None),(0,1),(0,1)]
minimize(f,initial_guess,method=method_name,bounds=bounds_pairs,constraints=non_negative_prob)
なぜ無意味な関数を使用して最適化していますか?関数が 'random()'を返すだけであれば(特に、同じ入力に対して一貫した結果を返していない)、もちろんSciPyは混乱するでしょう。 – user2357112
例のために。この問題は、使用する関数に関係なく発生します。私はそれが問題だとは思わない@ user2357112 – Zahy
少なくともscipyのドキュメントでは、lambdaを使うときに、np.array()を返すのに苦労する: 'fun':lambda x:np.array([x [ 0] ** 3 - x [1]])。 –