2

linprog在一个大的时间循环中运行以解决小的 ( m, n<=3) 线性程序,但这是我的代码的瓶颈。我发现Large scale 'off'在选项中使用 Simplex ( ) 而不是内部点可以让它更快一点。有没有更快的方法来做到这一点?矩阵A总是小而密 ( m, n<= 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。没有等式约束, 和mn都是A<=3。Albub在每次迭代t后更改。n此外,我对时间循环的加速更感兴趣,因为nt>> N,因此通过制定更大的问题来移除内部循环不会有太大帮助。

4

0 回答 0