我正在尝试优化两个变量的函数。我希望将一个变量固定为50,将另一个变量固定为-5至5。我编写了以下代码:
x0 = np.array([50, 0.0])
res = minimize(error, x0, constraints=[
{'type': "eq", "fun": lambda x: x[0] - 50},
{'type': "ineq", "fun": lambda x: -abs(x[1]) + 5},
])
其中minimize
是scipy.optimize
的函数。第一个约束是x[0] == 50
,第二个约束是-5 <= x[1] <= 5
。我收到以下响应:message: 'Inequality constraints incompatible'
。但是,当我将第二个变量设置为非零值(例如x0 = np.array([50, 0.1])
)时,它会成功找到解决方案。这种行为的原因可能是什么?
x[1]**2
而不是abs(x[1])
表示约束,则约束应该起作用。您也可以通过将约束分为两个单独的约束来消除abs
,一个约束用于上限,一个约束用于下限。