我有一个大规模的线性规划问题。我可以使用“linprog”在matlab中解决它。但是,它在一个循环内,我需要从第二次迭代绕过它到循环结束。这是一个简单的LP,形式如下:
最小化总和 a_i b_i st。...
其中 a_is 是我的变量, b_is 是系数。在每次循环迭代中,只有 b_is 略有变化。在此更改后,我想要变量的新值。(请注意,matlab 对大规模问题不使用单纯形法)。
有什么办法可以节省我在循环中的时间并且不多次解决 LP 问题?
谢谢
我有一个大规模的线性规划问题。我可以使用“linprog”在matlab中解决它。但是,它在一个循环内,我需要从第二次迭代绕过它到循环结束。这是一个简单的LP,形式如下:
最小化总和 a_i b_i st。...
其中 a_is 是我的变量, b_is 是系数。在每次循环迭代中,只有 b_is 略有变化。在此更改后,我想要变量的新值。(请注意,matlab 对大规模问题不使用单纯形法)。
有什么办法可以节省我在循环中的时间并且不多次解决 LP 问题?
谢谢
请注意,LP/IP 的敏感性分析不是 MATLAB 的优势之一。
选项 1:如果您可以使用 CPLEX 或 SAS,它们都具有“热启动”方法,这些方法将具有您以前的基础并快速提出一些建议。(这是真正的敏感性分析。)
这是一个 IBM/CPLEX设置初始解决方案的链接。
同样,SAS/OR 也有热启动选项。
选项 2:如果您只能访问 MATLAB
从 Matlab 的文档中,这里是如何“强制”它使用 Simplex。
To use the simplex method, set 'LargeScale' to 'off' and 'Simplex' to 'on' in options.
options = optimset('LargeScale','off','Simplex','on')
注意:如果默认的内点法更适合您的特定 LP,首先像在迭代 1 中那样求解它。然后将基本变量的上限和下限设置为解值,现在设置 linprog调用 Simplex 的选项。它会轻而易举地解决它。
尝试将解决方案引擎切换为使用simplex,看看这是否有助于 LP 的第二次和后续迭代,但系数会略有变化。