首页 > 解决方案 > 有没有办法初始化 scipy.optimize.linprog 的起点?

问题描述

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

scipy.optimize.linprog有一个选项x0

x0:一维数组,可选

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

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

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

标签: scipyscipy-optimize

解决方案


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

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

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


推荐阅读