複数の終了パラメータを設定した場合、Gurobi Optimizerは最初のパラメータが満たされた時点で最適化を停止します。例えば、MIPGAPが10%に達するか60秒が経過したときに停止したい場合はそれぞれのパラメータを、MIPGap=0.1, TimeLimit=60とします。
より複雑な設定が必要な場合はウォームスタートを利用することもできます。例として、
- ケース1:1%以下のMIPGAPが望ましいが、300秒未満で得られるのであればより小さいGAPが望ましいという状況を考えます。これを実現するには、まずTimeLimit=300として最適化を始めます。時間制限に到達したときに得られたGAPが0.01よりも大きかったらTimeLimitをより大きな値にして、MIPGap=0.01を設定し求解を続けます。
- ケース2:最初の実行可能解が見つかるまでは時間無制限で探索、実行可能解が見つかった後にTimeLimitを設定したい場合、次のようにします:
timeLimit = 20
try:
m = read('b1c1s1.mps.gz')
oldSolutionLimit = m.Params.SolutionLimit
m.Params.SolutionLimit = 1
m.optimize()
m.Params.TimeLimit = max(0, timeLimit - m.getAttr(GRB.Attr.Runtime))
m.Params.SolutionLimit = oldSolutionLimit - m.Params.SolutionLimit
m.optimize()
except (GurobiError, AttributeError, Exception) as e:
print('Caught: ' + e.message)
より複雑な条件を設定したい場合には、コールバック関数の利用を検討することをお勧めします。
コールバック関数による最適化の停止方法は? を参照してください。
その他の資料:
コメント
0件のコメント
記事コメントは受け付けていません。