最適化問題を解くための最後のステップは、作ったモデルをGurobi Optimizerに読み込ませることです。今回はGurobiのコマンドラインインターフェースを利用します。これはモデルファイルに記述されたモデルを解く際の非常にシンプルなインターフェースになっています。
gurobi_clの実行
コマンドラインインターフェースを利用するには、まずそれを実行可能なウィンドウを立ち上げる必要があります。
- Linux または Mac: Terminal window.
- Windows: Command Prompt または Powershell window.
(Gurobi Interactive Shellは、コマンドラインからのプログラム入力を直接受け付けないことに注意してください。)
Gurobiのコマンドラインツールは gurobi_clと呼ばれます。これを呼び出すにはコマンドライン上でgurobi_clと入力し、その後ろにモデルファイルの名前を続けて記述します。
例えばモデルファイルが $GUROBI_HOME/examples/data/coins.lp に配置されているとすると次のように入力することで、最適化が実行されます。
> gurobi_cl $GUROBI_HOME/examples/data/coins.lp
このコマンドを実行すると次のような出力がプロンプト上に現れます。
Set parameter LogFile to value "gurobi.log"
Using license file /opt/gurobi/gurobi.lic
Gurobi Optimizer version 11.0.2 build v11.0.2rc0 (linux64)
Copyright (c) 2023, Gurobi Optimization, LLC
Read LP format model from file /opt/gurobi1002/linux64/examples/data/coins.lp
Reading time = 0.00 seconds
: 4 rows, 9 columns, 16 nonzeros
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: 0x06e334a4
Variable types: 4 continuous, 5 integer (0 binary)
Coefficient statistics:
Matrix range [6e-02, 7e+00]
Objective range [1e-02, 1e+00]
Bounds range [5e+01, 1e+03]
RHS range [0e+00, 0e+00]
Found heuristic solution: objective -0.0000000
Presolve removed 1 rows and 5 columns
Presolve time: 0.00s
Presolved: 3 rows, 4 columns, 9 nonzeros
Variable types: 0 continuous, 4 integer (0 binary)
Found heuristic solution: objective 26.1000000
Root relaxation: objective 1.134615e+02, 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 113.46153 0 1 26.10000 113.46153 335% - 0s
H 0 0 113.3000000 113.46153 0.14% - 0s
H 0 0 113.4500000 113.46153 0.01% - 0s
0 0 113.46153 0 1 113.45000 113.46153 0.01% - 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 4: 113.45 113.3 26.1 -0
Optimal solution found (tolerance 1.00e-04)
Best objective 1.134500000000e+02, best bound 1.134500000000e+02, gap 0.0000%
Gurobiのログの詳細についてはGurobi Reference Manualを参照してください。 ここでは最適な目的値が113.45であることが確認できます。また、目的関数の単位はドルでした。したがって,適切な生産計画を選択すれば,造幣局は今利用可能な鉱物を使って113.45ドル相当の硬貨を生産できることがわかりました。さらに,この値が最適であり,113.45ドルより大きい価値の硬貨を生産することは不可能であることもわかります。
Solution fileの取得
今回の計画を実現するには生産された各硬貨それぞれの正確な数を知る必要があります。gurobi_cl コマンドでは、コマンドライン引数でGurobiのパラメータを設定することができます。今回の場合特に有用なパラメータは ResultFile で、最適化が完了した後に結果をファイルを書き込むよう Gurobi Optimizer に指示できます。ファイルのタイプは拡張子で示されます。.solファイルを指定するには次のようにします。
> gurobi_cl ResultFile=coins.sol $GUROBI_HOME/examples/data/coins.lp
このコマンドにより最適化後の変数の値を含むファイルを出力することができます。
# Objective value = 113.45
Pennies 0
Nickels 0
Dimes 2
Quarters 53
Dollars 100
Cu 999.8
Ni 46.9
Zi 50
Mn 30
最適解では dollar 硬貨100個、quarters硬貨53個、dimes硬貨2個が生産されています。
モデルの定数を変更して試してみたい場合(例えば、利用可能な鉱物の量を変えると最適解がどのように変化するかを検討したい場合など)は、テキストエディターを使ってLPファイルを修正して再度実行することで可能です。しかし、そういったテストを行う場合には、Gurobi APIsを利用することを推奨します。
コメント
0件のコメント
記事コメントは受け付けていません。