[英]Why does my optimization (scipy.optimize.minimize) not work and return the initial values instead?
[英]Why scipy.optimize.minimize does not work with a constraint and initial value 0
我正在尝试优化两个变量的 function。 我希望一个变量固定为 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 的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
,一个用于上限,一个用于下限。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.