Gurobiは決定論的に設計されています。すなわち同じコンピュータ上、同じGurobiのバージョン、同じ入力(モデルとパラメータ)を与えたとき、常に同じ結果が得られます。Gurobiは並列最適化においても決定論的です。複数のスレッド動作した場合にも常に同じ結果が得られます。しかし、以下のような小さな変更も含め、何らかの入力を変更した場合、異なる結果が得られる可能性があります。
- パラメータの値
- 係数のRounding
- 制約や変数の順番
- 初期解
また、次のような時間に依存するパラメータを利用する場合、決定論的動作をしない場合があります。
- TimeLimit パラメータ:実行時のワークロードによって同一時間内の処理が変わりうる
- NoRelHeurTime パラメータ:同上
- 同時最適化(Method=3) と concurrent MIP (ConcurrentMIP > 1) パラメータ: 同じく時間に依存する可能性がある
TimeLimitパラメータの決定論的な代替案は、WorkLimitパラメータです。同じくNoRelHeurTimeについてはNoRelHeurWorkが利用できます。
再現性のある結果を保証するためには、Gurobiで解くモデルを構築するコードも決定論的であるべきです。例えばPythonの集合(set)のようないくつかのデータ構造は決定論的ではなく、同じデータを使って同じコードを実行しても、モデル内の変数や制約の順序が異なる可能性があります。2つのモデルが同じかどうかを確認するには、それらのfingerprintsを比較します。
コメント
0件のコメント
記事コメントは受け付けていません。