在MATLAB中解决循环内的小线性程序的最快方法是什么?

时间:2013-03-04 09:07:28

标签: performance matlab optimization mathematical-optimization linear-programming

我在一个大时间循环中运行linprog来解决小型(mn< = 3)线性程序,但它是我的代码的瓶颈。我发现在选项中使用Simplex(Large scale 'off')而不是内部点会使它更快一些。有更快的方法吗?矩阵A总是小且密集(mn< = 3)。我尝试过TOMLAB的MINOS和LPOPT以及QPOPT但仍然linprog更快。我不知道也许我没有正确使用TOMLAB,或者他们只是对大问题规模更好。

是否有一种简单的方法可以为较小的问题编写更快的LP解算器。对于我当前的问题linprog,单次迭代需要〜.0012秒来解决2 * 2问题。我把它放在一个嵌套循环中,下面是一个伪代码:

for t =1:nt 
  for n = 1:N 
      linprog 
  end 
end

所以最好让它像〜0.0005秒/迭代一样快。我想在尝试使内循环平行之前这样做。由于依赖性(时间循环),外部循环不能并行。

我非常感谢任何帮助,因为我的模拟需要比实时更快。

谢谢,

雏鹰

编辑:线性程序的格式为:

max 1'x 
s.t.  Ax <= b
      lb<=x<=ub

x1是向量,我们正在尝试最大化sum(x),这就是为什么我们在1的向量和x之间有一个内积。没有等式约束,m的{​​{1}},n都是&lt; = 3。每次AA迭代后,lbubt会发生变化。此外,我对时间循环的速度感兴趣,因为n&gt;&gt; nt,因此通过制定更大的问题来移除内循环将无济于事。

0 个答案:

没有答案