Używam SciPy do optymalizacji i metoda SLSQP wydaje się ignorować moje ograniczenia.Scipy.optimize.minimize method = 'SLSQP' ignoruje ograniczenie
szczególności chcę x [3] i X [4], aby być w przedziale [0-1]
Dostaję komunikat: 'nierównościowych niekompatybilne'
Oto wyniki realizacji następnie przykładowy kod wykorzystuje funkcję (obojętne):
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
Oto mój kod:
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)
EDYCJA - Problem występuje nadal, nawet podczas usuwania pierwszego wiązania.
Problem występuje, gdy próbuję użyć zmiennych bana. tj
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)
Dlaczego używasz bezsensownej funkcji do optymalizacji? Jeśli funkcja po prostu zwraca 'random()' (aw szczególności nie zwraca nawet spójnych wyników dla tego samego wejścia), oczywiście SciPy będzie się mylić. – user2357112
Dla dobra przykładu. Ten problem występuje niezależnie od funkcji, której używam. Nie sądzę, że to jest problem @ user2357112 – Zahy
Przynajmniej w scipy docs, podczas korzystania z lambda podejmują bóle, aby zwrócić np.array(), jak: "zabawa": lambda x: np.array ([x [ 0] ** 3 - x [1]]). –