概要
GurobiはPythonに対するgurobipyなどを含む多くのプログラミング言語から、Gurobi公式のAPIを通じてアクセス可能です。Gurobiとしては公式APIの利用を推奨していますが、ユーザの中にはすでにオープンソースのモデリングフレームワークを使ってモデルを実装していて、そのコードを書き換えることなくGurobiでそのモデルを解きたいという方々もいます。この記事では、最も一般的なモデリングフレームワークのうちのいくつかについて、それらからGurobiを利用する方法を紹介します。
Gurobi公式のAPIとの比較
Gurobiの公式APIを利用することで、いくつかの大きなメリットがあります。
- Gurobi社のR&Dチームとエキスパートチームによるサポートを受けられる。
- Gurobiのすべての機能にアクセスできる。(モデリングフレームワークの場合、Gurobiの機能の多くにアクセスできない場合が多い)
- フレームワークとGurobiの間でモデルをやり取りする際のオーバーヘッド(実行時間やメモリ)を回避できる。
- Gurobiの最新バージョンを常に利用できる
オープンソースのモデリングフレームワークで既存のモデルを使用する
この記事では、各モデリングフレームワークの詳細には触れませんが、各フレームワークでGurobiを使い始めるために必要なステップの概要を説明します。
Pyomo
- gurobipy パッケージのインストール。(Gurobiのフルインストールは必要なし。)
- Gurobiのライセンスを取得する。
- ソルバーインスタンスを
opt = SolverFactory("gurobi_direct")
で作成する。(必要に応じてSolverFactory
をpyomo.opt
からインポートしておく必要がある。)
また、Gurobi環境の作成をPyomoに管理させるか、デフォルトの環境を使用するかを 選択可能 であることに注意。最初のオプションは、ライセンスファイルに依存することなくプログラムで環境パラメータ(例えばWLSやInstant Cloudのキー)を提供したい場合に有用。 - 上記のソルバーインスタンスから
results = opt.solve(model, ...)
でGurobiを実行可能 - もし、モデルを複数回解く(制約に変更を加えるなど)場合は、
SolverFactory("gurobi_persistent")
かAPPSI interface のどちらかを使用することを推奨。後者を利用する場合には、各モデルを解いた後にopt.release_license()
でGurobiのライセンスを解放する必要がある。
PuLP
- gurobipy パッケージのインストール。(Gurobiのフルインストールは必要なし。)
- Gurobiのライセンスを取得する。
- PuLPが
import pulp as pl
のようにインポートされ、モデルがprob
という名前で作られているとき、prob.solve(pl.GUROBI())
でGurobiを実行可能。 - PuLP v2.8.0 から
env
ormanageEnv
を通してgurobipy 環境を利用可能。- Option 1 (環境をユーザー自身で管理する):
import gurobipy as gp
import pulp as pl
options = {
"WLSACCESSID": "access-id",
"WLSSECRET": "secret",
"LICENSEID": "license-id",
}
with gp.Env(params=options) as env: # Pass environment as a parameter solver = pl.GUROBI(env=env)
prob.solve(solver)
solver.close() # dispose the model
-
- Option 2 (PuLP に環境を管理させる):
import pulp as pl
options = {
"WLSACCESSID": "access-id",
"WLSSECRET": "secret",
"LICENSEID": "license-id",
}
solver = pl.GUROBI(manageEnv=True, envOptions=options)
prob.solve(solver)
solver.close()
Google OR-Tools
- Gurobiのフルインストールを行う。OR-Tools はgurobipy 単体では利用できないことに注意。
- Gurobiのライセンスを取得する。
- 実行時、OR-ToolsはGurobiの共有ライブラリを利用するために、Gurobiのデフォルトのインストール先を探索する。それ以外の場所を利用するためには環境変数
GUROBI_HOME
の設定が必要。 -
from ortools.linear_solver import pywraplp
から必要なパッケージをインポートする。 -
solver = pywraplp.Solver.CreateSolver("GUROBI")
からソルバーを設定する。 - 適切に設定がされていれば
status = solver.Solve()
でGurobiを実行可能 。
PythonMIP
- Gurobiのフルインストールを行う。PythonMIP はgurobipy 単体では利用できないことに注意。
- インストールの際に、環境変数
GUROBI_HOME
の設定が必要。 - Gurobiのライセンスを取得する。
- 適切に設定がされていれば、PythonMIPはGurobiを自動で利用する。
CVXPY
- gurobipy パッケージのインストール。(Gurobiのフルインストールは必要なし。)
- Gurobiのライセンスを取得する。
- CVXPYが
import cvxpy as cp
のようにインポートされ、モデルがprob
という名前で作られているとき、prob.solve(solver=cp.GUROBI())
でGurobiを実行可能。
コメント
0件のコメント
記事コメントは受け付けていません。