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

问题描述 投票:0回答:1

我正在尝试优化两个变量的函数。我希望将一个变量固定为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]))时,它会成功找到解决方案。这种行为的原因可能是什么?

python scipy scipy-optimize-minimize
1个回答
1
投票
约束必须是可区分的,而第二个约束则不可。如果用x[1]**2而不是abs(x[1])表示约束,则约束应该起作用。您也可以通过将约束分为两个单独的约束来消除abs,一个约束用于上限,一个约束用于下限。
© www.soinside.com 2019 - 2024. All rights reserved.