繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM