为什么 scipy.optimize.minimize 不适用于约束和初始值 0

Why scipy.optimize.minimize does not work with a constraint and initial value 0

我正在尝试优化一个包含两个变量的函数。我希望一个变量固定在 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},
])

其中 minimizescipy.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,一个用于上限,一个用于下限。