我正在尝试使用两个约束来最小化函数:x[0] > 1, x[1] > 1
如果我将它们作为元组传递(在下面的代码中注释掉),我得到了正确的答案(即(1,1))。
但是,如果我在for循环中传递它们,似乎忽略了第一个约束(x[0] > 1
)。我得到答案为(0,1)。
我错过了什么?
from scipy.optimize import minimize
def costFunction(x):
f = x[0]**2 + x[1]**2
return f
cons = []
n = 2
for i in range(n):
cons.append({'type': 'ineq', 'fun': lambda x: x[i] - 1})
# cons = ({'type': 'ineq', 'fun': lambda x: x[0] - 1},
# {'type': 'ineq', 'fun': lambda x: x[1] - 1})
x0 = [0,0]
sol = minimize(costFunction, x0, constraints = cons)
print(sol['x'])
感谢。