我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
x
和1
是向量,我们试图最大化 sum(x),这就是为什么我们在 1 和 的向量之间有一个内积x
。没有等式约束, 和m
,n
都是A
<=3。A
,lb
并ub
在每次迭代t
后更改。n
此外,我对时间循环的加速更感兴趣,因为nt
>> N
,因此通过制定更大的问题来移除内部循环不会有太大帮助。