Gurobiが返す目的関数値が期待したものと異なる場合、最初のステップは誤った結果の種類を特定することです。
最も典型的な原因は以下の通りです:
- 終了基準
- 目的関数の方向の誤り
- MPSファイルを使用している場合、目的関数の方向が正しく設定されているか確認してください。方向の指定がない場合、Gurobiは最小化問題を仮定します。
- 数値的な問題および最適解における変数値の誤り
- 解が誤っているときの検証方法を参照してください。
返された解と既知の解の比較
既知の解がある場合、その解がモデルに対して実行可能かどうかをテストできます。変数を既知の解の値に固定することで、固定したモデルを作成します。これを行うには、各変数の下限(LB)および上限(UB)を解の値に設定します。
固定モデルは実行可能ですか?
- 実行不能だった場合:
- 固定モデルのIISは何ですか?モデルのIIS (Irreducible Infeasible Subsystem)を計算するには、How do I use 'compute IIS' to find a subset of constraints that are causing model infeasibility?の記事の手順に従ってください。
- 実行可能だった場合:
- 固定モデルの目的値が期待値と異なっている、または元のモデルの目的値と異なっていますか?目的関数の誤った計算につながるようなモデリングのミスがないか、モデルを確認してください。
- 固定モデルのログに、変数または制約が実行可能性の許容誤差(Feasibility Tolerance)を違反していることを示す警告が表示されますか?これは一般に、モデルの数値的な問題を示します。モデルに数値的な問題があるか確認してください。NumericFocusパラメータをより大きいに設定する、Aggregateパラメータを0に設定する、またはPresolveを無効にすることで数値的な問題が緩和される場合があります。ただし最善の方法は、数値的な問題に対処するためにモデルを再定式化および再スケーリングすることです。数値的な問題に関するガイドラインもご覧ください。
注意: 古いバージョンのGurobiを使用している場合は、最新のGurobiリリースにアップデートしてください。すべてのリリースで、以前のバージョンからのバグ修正を含む多くの改善が行われています。