8

PuLP を使用しようとしていますが、4000 個の制約 (67 個の変数) を追加するのに50 秒かかります。問題の解決にはほんの一瞬しかかかりません。

PuLP を使用して、多数の問題セットで複数のソルバーを簡単にテストしたいと考えています。

PuLP にこれほど時間がかかるのでしょうか。PyGLPK を直接使用すると、セットアップと解決の両方を含めてほんの数秒しかかからないので、そうならないことを願っています。PuLP でのこのステップの効率を改善するにはどうすればよいですか?


アップデート

私の制約行列は非常にまばらで、非ゼロの係数のみを含めることで、この特定の問題のセットアップ時間を 4 ~ 5 秒に短縮できました。独自の .lp または .mps 形式のファイルを作成し、cbc または glpsol サブプロセスで問題を解決し、PuLP よりもはるかに効率的にソリューションを解析できます。これは、PuLP の場合に入力ファイルを数ミリ秒で書き込むことができるためです。数秒かかります。これがなぜなのかはまだわかりません。

4

2 に答える 2

12

コメントするのに十分な担当者がいません。

しかし、あなたはこれを見ましたか:

https://groups.google.com/forum/#!topic/pulp-or-discuss/p1N2fkVtYyM

質問は尋ねられます:

"The problem is solved in less than 0.5 second.
However setting it up with PULP takes more than 10 seconds. "

こちらもご報告のようです。そして、解決策は += または sum(...) 演算子を使用しないことですが、代わりに、リンクでも説明されているように:

yeah using the += operator with pulp is really slow, as is using sum() 
instead of lpSum()

最初に制約のリストを作成し、最後に制約を PuLP に追加するのではなく、一度に 1 つずつ制約を PuLP に追加しているのではないでしょうか。

于 2015-03-16T21:54:59.017 に答える