我有一个大规模的线性规划问题。我可以使用“linprog”在matlab中解决它。但是,它在一个循环中,我需要绕过它从第二次迭代到循环结束。它是一个简单的LP,形式如下:
最小化和a_i b_i ST。 ...
其中a_is是我的变量,b_is是系数。在每次循环迭代中,只有b_is略有变化。我希望在此更改后我的变量的新值。 (请注意,matlab不使用单纯形法来解决大规模问题)。
有什么方法可以节省我在循环中的时间并且不能多次解决LP?
由于
答案 0 :(得分:2)
请注意,LP / IP的灵敏度分析不是MATLAB的优势之一。
选项1 :如果您可以使用CPLEX或SAS,它们都具有“热启动”方法,这些方法将具有您之前的基础并快速提出。 (这是真正的灵敏度分析。)
这是设置初始解决方案的one IBM/CPLEX's link。
同样,SAS / OR也有warmstart options。
选项2 :如果您只能访问MATLAB
根据Matlab的文档,这里是"force" it to use 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的第二次和后续迭代是否有帮助,并略微改变系数。