2017-04-14 15 views
3

Pyomoが膨大な数の制約と変数(約10e6)を持つORモデルを生成することに興味があります。私は現在GAMSを使用して最適化を開始していますが、別のPythonの機能を使いたいのでPyomoを使ってモデルを生成します。膨大な数の制約を持つモデルを生成するpyomoの性能

私はいくつかのテストを行い、明らかにモデルを書くとき、制約を定義するために使用されるpythonメソッドは、制約がインスタンス化されるたびに呼び出されます。私の実装をさらに進める前に、numpyの配列データに基づいて制約のブロックを直接作成する方法があるかどうかを知りたいと思いますか?私の見地からは、ブロックによる制約の構築は、大型モデルの方が効率的かもしれません。

pyomoや他のpythonモデリングライブラリでGAMSや他のAML言語に匹敵するパフォーマンスを得ることは可能でしょうか?

ご協力いただきありがとうございます。

+0

通常、GAMSはPyomoよりも高速です(私のモデルでは、通常、AMPLよりも高速ですが、特にデータ操作手順が多い場合はAMPLがかなり速いモデルが分かります)。 –

答えて

3

Pyomo制約を作成するときにNumPyデータを使用することはできますが、Pyomoを使用してNumPy形式の単一コマンドで制約ブロックを作成することは現在できません。それが価値あるものを捨てて、私はあなたがAMPLやGAMSのような言語でもできるとは信じていません。 Pyomoは最終的に行列とベクトル演算を使って制約を定義するユーザをサポートするかもしれませんが、ソルバインタフェース(例えばNL、LP、MPSファイル)はすべて明示的な "フラット"な表現であるため、個々の制約を表します。これは、Pyomoが代数(表現式)の表現をソルバーに明示的に生成する必要があるためです。対照的に、NumPyはを計算するだけです結果:C/C++バックエンド(つまり、ではなく、Pythonでは)のデータを作成し、結果を効率的に計算するために低レベルのBLAS演算を使用し、 の結果をに戻すだけでPythonに戻すことができます。

パフォーマンスとスケーラビリティについては、13e6個以上の変数と21e6個の制約を持つ生のモデルを生成しました。つまり、Pyomoは柔軟性と速度に対する拡張性を考慮して設計されていました。 Pythonのランタイムは、cPythonを使用している場合、AMPLよりもはるかに遅くなる可能性があります(ただし、pypyを使用して4倍または5倍に縮小できます)。少なくとも歴史的に、AMPLはGAMSよりも高速であるため、PyomoとGAMSの間のギャップは小さくなければなりません。

+0

あなたの答えはありがとう、私はいつもPyomoについてこの疑いがありました。しかし、あなたは以下の部分をさらに明確にすることができますか? > [...]ソルバーインターフェース[...]は、明示的[ly]が個々の制約を表すすべての「フラット」表現です。 [...] Pyomoは、_algebra_(すなわち式)の表現を明示的に生成してソルバに送る必要があります。これとは対照的に、NumPyは結果を計算するだけです:結果を効率的に計算するために低レベルのBLAS演算に依存するC/C++バックエンド[...]でデータを作成し、その結果をPython。 –

+0

マトリックス表現の場合とスカラー形式の連立一次方程式の書き方との違いは?確かに、ソルバの入力ファイルには、多数の制約を示すための行列がありますか?それとも、希薄さのためにそうでないと言っていますか? –

+0

私の知る限りでは、標準的なソルバ入力フォーマットは、制約を指定するための "行列のような"方法をサポートしていません。リニアソルバーの場合、標準フォーマットはLP(行ベース)とMPS(列ベース)です。どちらも明示的に "A"行列のすべての非零点をリストします。一般的な非線形の場合、実際には標準形式はありません。 AMPLのNLフォーマットが最も近く、それは行ベースです。いくつかの凸ソルバは行列形式の入力をサポートしていますが、一般的な非線形ソルバでは一般的な形式ではありません。 – jsiirola

4

私はジョナスHORSCHとトム・ブラウンからのコードのこの作品に出会った、それは私にとって非常に有用であったとき、私はまた同じことを思っていた:

https://github.com/FRESNA/PyPSA/blob/master/pypsa/opt.py

彼らはよりも効率的に制約を定義するクラスを定義元のPyomoパーサーは行います。私が持っている大型モデルでいくつかのテストを行い、かなりの生成時間を短縮しました。

関連する問題