【发布时间】:2020-07-17 05:24:57
【问题描述】:
我正在尝试在“scipy”优化中优化我的界限。我的“x”向量中的一些变量受到极大限制,我无法使用其他值优化我的目标函数。
例如,x1 只能取以下值:19、20、24、40。Scipy 要求提供 x1 的边界,如 (19, 40),但函数会根据需要采取容差步骤。
有一种方法可以通过 scipy 为某些变量开发一个受约束的步骤进行优化??
bounds = ((19, 40),...)
x0 = (300, 19, ...)
resultado = optimize.minimize(fun, x0, bounds = bounds, method = 'TNC',
constraints = cons)
【问题讨论】:
-
一般来说:没有。该算法的框架不允许这样做。您的限制可以被视为强制完整性等等:定义一个不连续的集合。即使是前者,在线性情况下,也会出现 NP-hard 问题。当是线性时,这是混合整数规划(并且有可用的求解器)。非线性时,还有其他类别,例如 MINLP。然后凸性发挥作用,一些要检查的求解器可能是 Bonmin(仅凸)或 Couenne。 MINLP,尤其是在非凸设置中非常困难。
-
我可以用 scipy.optimize 解决 MINLP 问题吗?
标签: python optimization scipy minimize bounds