メモリ不足エラーを回避するには、 SoftMemLimit パラメータを設定し、使用可能な RAM よりも数 GB 少ないメモリ量に制限します。これにより、最適化を安全に終了することができ、解の情報(利用可能な場合)を取得することができます。
以下は使用メモリを減らす方法についての紹介です。
- 連続最適化モデル(LP,QP,SOCP)の場合、シンプレックス法(Method=0 or 1)を利用します。内点法(Barrier アルゴリズム)や並列実行よりも要求メモリ量が少なくて済みます。
- 多くのノードを必要とするMIPモデルの場合には、ノード情報を書き出すことのできるノードファイルを利用できます。ノードファイルを利用するには NodeFileStart パラメータを例えば0.5などに設定します。これにより分枝限定法のノード情報が圧縮されてディスク上に書き出されるようになります。
*NodeFileStartは連続最適化モデルや、MIPモデルのルートノード付近では効果がありません。 - Gurobiはデフォルトではすべてのコアを利用しようとします。 Threads パラメータを減らすことでメモリ消費量を減らすことができる場合があります。
- PreSparsify パラメータを利用することにより、前処理後のモデルが持つ非ゼロ要素を減らすことができます。
- 前処理(Presolve)の無効化を避けます。つまり、Presolve=0としている場合は1や2に数値を増やします。
- Compute ServerまたはGurobi Cloudを利用すると、より多くのメモリを持つ計算機に計算を任せることができます。
理想的な解決策としては、単純に十分なメモリを搭載することです。メモリは比較的安価であり、RAM上にメモリをロードして解くことができるように、十分なメモリを搭載することを推奨します。