注:version 11.0.2から Gurobi Interactive Shell は非推奨となりました
前へ: チュートリアル(Gurobi Interactive Shell):得られた解の確認
ここでは、簡易的なモデルの変更を紹介します。ここで扱っているモデルの詳細は チュートリアル(硬貨の製造):問題設定 をご覧下さい。最適化の条件として例えば最低でも Penny硬貨を10枚作りたいとします(すなわち最適化変数 Pennies の下限値を10.0としたいとします。)。これは、対応する変数オブジェクトの lb 属性を設定することで実現可能です(今回の例でいえばリスト v に入っている最初の変数が対応します。)。
gurobi> v = m.getVars()
gurobi> v[0].lb = 10
Gurobi はモデルの状態を常にトレースしているため、与えられた変更に対して今保持している解が最適でないことを検知できます。よって再度 optimize() を呼び出すことで変更が加わったモデルに対して改めて最適化が実行されます。
gurobi> m.optimize()
Gurobi Optimizer version 10.0.1 build v10.0.1rc0 (linux64)
CPU model: 11th Gen Intel(R) Core(TM) i7-1185G7 @ 3.00GHz, instruction set [SSE2]
Thread count: 4 physical cores, 4 logical processors, using up to 4 threads
Optimize a model with 4 rows, 9 columns and 16 nonzeros
Model fingerprint: 0xa40e053a
Variable types: 4 continuous, 5 integer (0 binary)
Coefficient statistics:
Matrix range [6e-02, 7e+00]
Objective range [1e-02, 1e+00]
Bounds range [1e+01, 1e+03]
RHS range [0e+00, 0e+00]
MIP start from previous solve did not produce a new incumbent solution
Presolve removed 2 rows and 5 columns
Presolve time: 0.00s
Presolved: 2 rows, 4 columns, 5 nonzeros
Variable types: 0 continuous, 4 integer (0 binary)
Found heuristic solution: objective 25.9500000
Root relaxation: objective 7.190000e+01, 2 iterations, 0.00 seconds (0.00 work units)
Nodes | Current Node | Objective Bounds | Work
Expl Unexpl | Obj Depth IntInf | Incumbent BestBd Gap | It/Node Time
* 0 0 0 71.9000000 71.90000 0.00% - 0s
Explored 1 nodes (2 simplex iterations) in 0.00 seconds (0.00 work units)
Thread count was 4 (of 4 available processors)
Solution count 2: 71.9 25.95
Optimal solution found (tolerance 1.00e-04)
Best objective 7.190000000000e+01, best bound 7.190000000000e+01, gap 0.0000%
結果として、Penny硬貨を最低10枚作ることを条件とすると、目的関数値は113.45 から 71.9に下がることが見て取れます。また、実際にPenny硬貨が作られている枚数は10枚です。
gurobi> print(v[0].x)
10.0
次へ: チュートリアル(Gurobi Interactive Shell):より難しいモデルの実行
コメント
0件のコメント
記事コメントは受け付けていません。