MATLAB中的灵敏度分析

时间:2011-11-19 18:39:58

标签: matlab linear-programming

我有一个大规模的线性规划问题。我可以使用“linprog”在matlab中解决它。但是,它在一个循环中,我需要绕过它从第二次迭代到循环结束。它是一个简单的LP,形式如下:

最小化和a_i b_i ST。 ...

其中a_is是我的变量,b_is是系数。在每次循环迭代中,只有b_is略有变化。我希望在此更改后我的变量的新值。 (请注意,matlab不使用单纯形法来解决大规模问题)。

有什么方法可以节省我在循环中的时间并且不能多次解决LP?

由于

1 个答案:

答案 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的第二次和后续迭代是否有帮助,并略微改变系数。