2

小さな ( , <=3) 線形プログラムlinprogを解くために大きな時間ループ内で実行していますが、それが私のコードのボトルネックです。オプションで内点の代わりにシンプレックス ( ) を使用すると、少し速くなることがわかりました。これを行うより速い方法はありますか?行列は常に小さくて密です ( , <= 3)。TOMLAB の MINOS と LPOPT と QPOPT を試しましたが、それでも高速です。TOMLAB を正しく使用していないのか、大きな問題サイズに適しているのかはわかりません。mnLarge scale 'off'Amnlinprog

小さな問題に対してより高速な LP ソルバーをコーディングする簡単な方法はありますか? 私の現在の問題linprogでは、2 * 2の問題を解決するのに1回の反復で〜.0012秒かかります。私はネストされたループ内にそれを持っています、以下は疑似コードです:

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です。等式制約なし、およびmnA両方とも <=3 です。Albおよび反復ubごとに変更tします。nまた、時間ループで得られるスピードアップについてももっと興味があります。なぜならnt>> N、より大きな問題を定式化して内部ループを削除してもあまり役に立たないからです。

4

0 に答える 0