Gurobi 9.0以降ではログに次のような fingerprint が含まれます。
Model fingerprint: 0x6775726f2つのモデルが同じfingerprintを持つのは、それらが完全に同じ場合のみです。同じfingerprintを持つ2つのモデルを、同じプラットフォームで同じGurobiパラメータ設定を使って(場合によっては同じ初期解を使って)解くと、解の探索経路は同じになります。これは、Gurobiが同じノード数を探索し、同じ単体法の反復回数で終了することなどを意味します。2つのモデルを同一視できるのは、制約と変数の定義順序も含めて同じである必要があることに注意してください。さらに、与えている場合にはVarHintVal, BranchPriority, Partition, PoolIgnore, VBasis, CBasis, PStart, DStartなどの属性値もモデルのfingerprintに影響します。
fingerprintは同じモデルを解いていることを確認するために使用できます。2つのモデルが異なったfingerprint持っている場合、それはモデルが何らかの要素について異なっていることを意味します。これはモデルを作成または記述するコードが非決定論的である場合に起こり得ます。Pythonのコードに由来する主な非決定論的動作は、組み込みの集合 (set) と一部の pandas の操作です。
また、モデルオブジェクトのFingerprint attributeによってfingerprintを取得することもできます。ただしログのヘッダー部に表示されるfingerprintは16進数表記であるのに対し、Fingerprint attributeで取得できる値は通常10進数であることに注意が必要です。参考までに、Python上でint値を16進文字列に変換するコードは下記のとおりです(modelはgurobipyのモデルオブジェクトとします)。:
hex((model.Fingerprint + (1 << 32)) % (1 << 32))