Gurobiが返す結果が期待したものと異なる場合、最初のステップは誤った結果の種類を特定することです。
よくある状況は次のとおりです:
- 実行可能なはずのモデルに対し、Gurobiが実行不能 (infeasible) と報告する
- Gurobiが予期しない最適目的関数値の解を返す
- Gurobiが予期しない変数値の解を返す
- Gurobiが同じ問題に対して異なる2つの解を返す
実行可能なはずのモデルに対し、Gurobiが実行不能 (infeasible) と報告する場合
この問題で最もよく見られる理由はユーザーモデリングのエラーです。よくある例は、ユーザーが変数の下限値を明示的に設定していない場合です。Gurobiのデフォルトの下限は0.0であり、負の無限大ではありません。
もちろん、モデルの数値的な問題など他の理由も考えられます。実行不能性を診断するのに役立ついくつかのナレッジベース記事を提供しています。
- 許容解があるはずのモデルがInfeasibleになった場合
- "Model is infeasible or unbounded" エラーを解決するには?
- モデルが実行不能(Infeasible)な理由を調べるには?
- 「compute IIS」を使って実行不能の原因となる制約の部分集合を見つけるには?
- feasRelaxを使用して実行不能なモデルを実行可能にするために変数および/または制約の境界を変更するには?
Gurobiが予期しない最適目的関数値の解を返す場合
この問題の一般的な理由には、誤った目的関数の方向(最小化/最大化;Gurobiのデフォルトは最小化)を使用していることや、モデルが数値的な問題を抱えている場合があります。
Gurobiが予期しない変数値の解を返す場合
よくある理由は、Gurobiが整数変数の解の値を丸めないためです。
Gurobiが同じ問題に対して異なる2つの解を返す場合
Gurobiは、パラメータMIPGapおよびMIPGapAbsで定義された許容誤差に基づいて最適解を返します。ユーザー定義の終了基準がない限り、異なるマシンで解く場合など、異なる解の経路をたどるとMIPGapおよびMIPGapAbsの許容範囲内で異なる2つの解を得ることがあります。
Gurobiは決定論的に動作させることが可能ですが、常に同じ解を返すためにはいくつかのガイドラインに従う必要があります。