【问题标题】:Is there a way to initialize the starting point of scipy.optimize.linprog?有没有办法初始化 scipy.optimize.linprog 的起点?
【发布时间】:2021-02-26 19:43:29
【问题描述】:

我有一系列线性程序要解决。每个实例仅与前一个实例不同,A、边界和成本略有不同。直观地说,以前问题的解决方案应该会有所帮助。我该如何实施呢?

scipy.optimize.linprog 有一个选项x0

x0:一维数组,可选

自变量的起始值,将通过优化算法进行细化。对于修改后的单纯形法,这些必须对应一个基本的可行解。

似乎可以做到这一点,但如果我只是初始化先前优化的结果(res.x)似乎不起作用。它失败并出现以下错误:

6 : Guess x0 cannot be converted to a basic feasible solution

【问题讨论】:

  • 我不会寄予太多希望,因为 A:与最先进的商业求解器相比,scipy 的实现相当有限(可能提供更多类似修复的功能)和更重要的 B:你正在做的突变,没有进一步的假设,正在扼杀所有好的保证。以增量方式使用单纯形的情况通常是这样的情况,其中修改导致保持原始可行性保持双重可行性。在您的情况下,两者都不能保证。如果性能如此重要,请开始使用最先进的求解器(不是 scipy)。

标签: scipy scipy-optimize


【解决方案1】:

该错误基本上意味着您刚刚解决的问题中的res.x在将res.x作为x0传递时不满足您尝试解决的问题的约束。

这是为什么呢?线性规划问题的解决方案总是在可行集的一个顶点处,基本上在您的约束所允许的边界上。如果您的下一个问题与您解决的问题略有不同,则很可能上一个问题的解决方案不满足新问题的约束——它在边界上,问题的微小变化使边界移动了位并使上一点在外面。在不了解优化问题的细节的情况下,很难在这里推荐一个明智的策略。例如,如果您知道点 (0,...,0) 总是可行的,则可以将res.x 的所有坐标缩小,直到进入可行集。

已经有一段时间了,所以我不确定,但是您可以尝试method='interior-point',因为x0 可能会更宽容地超出可行集。否则谷歌'如何找到线性规划问题的可行解决方案'

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-06-09
    • 2018-01-13
    • 1970-01-01
    • 2015-02-20
    • 1970-01-01
    • 1970-01-01
    • 2016-01-05
    • 2014-11-28
    相关资源
    最近更新 更多