Tôi đang sử dụng SciPy để tối ưu hóa và phương pháp SLSQP dường như bỏ qua những ràng buộc của tôi.Scipy.optimize.minimize method = 'SLSQP' bỏ qua ràng buộc
Cụ thể, tôi muốn x [3] và x [4] để được trong khoảng [0-1]
Tôi nhận được thông báo: 'hạn chế bất bình đẳng không tương thích'
Đây là Kết quả của việc thực hiện tiếp theo là một ví dụ mã (sử dụng một chức năng dummy):
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
đây là mã của tôi:
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 - Sự cố vẫn tiếp diễn khi ngay cả khi tháo ràng buộc đầu tiên.
Sự cố vẫn tiếp diễn khi tôi cố gắng sử dụng các biến số giới hạn. tức là,
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)
Tại sao bạn sử dụng chức năng vô nghĩa để tối ưu hóa? Nếu hàm chỉ trả về 'random()' (và đặc biệt, thậm chí không trả về các kết quả nhất quán cho cùng một đầu vào), tất nhiên SciPy sẽ bị lẫn lộn. – user2357112
Vì lợi ích của ví dụ. Vấn đề này xảy ra bất kể chức năng tôi sử dụng. Tôi không nghĩ rằng đó là vấn đề @ user2357112 – Zahy
Ít nhất trong các tài liệu scipy, khi sử dụng một lambda họ mất đau để trả về một np.array(), như: 'fun': lambda x: np.array ([x [ 0] ** 3 - x [1]]). –