【问题标题】:How to evaluate bounds with scipy optimize changing step ranges如何使用 scipy 评估边界优化变化的步长范围
【发布时间】: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


【解决方案1】:

您可以尝试对这些值进行硬编码。我的意思是说,当 x1 不属于您提供的列表时,您可以返回一个非常高的值。但这将是非常低效的操作。

另一种选择是使用 Basin-Hopping 算法,您可以在其中定义自己的步长值,然后在需要时进行优化。

如果可能,请指定 x1 是指第二次猜测还是“x”向量的第二个元素。

【讨论】:

    猜你喜欢
    • 2017-10-29
    • 1970-01-01
    • 2016-10-11
    • 2013-08-15
    • 2012-08-24
    • 1970-01-01
    • 2018-02-16
    • 1970-01-01
    • 2012-01-27
    相关资源
    最近更新 更多