Gurobi#

Gurobi Optimizer#

Gurobi が提供する MIP (混合整数計画問題) ソルバーです。Gurobi Optimizer は QUBO を含む整数変数、実数変数の二次の問題を扱うことができます。

注釈

Gurobi の実行には Amplify SDK の実行マシンに Gurobi Optimizer およびライセンスが適切にインストールされている必要があります。

ソルバー仕様:

バイナリ変数

イジング変数

整数変数

実数変数

目的関数

2次

-

2次

2次

等式制約

2次

-

2次

2次

不等式制約

2次

-

2次

2次

クライアントクラス:

クライアントクラスの共通インターフェース に加えて以下のメソッドを持ちます。

メソッド

返却型

詳細

tune()

None

実行パラメータのサーチを行います。

注釈

GurobiClient のファイル出力は次のように振る舞います。

  • write_request_data:

    指定されたファイルパスの拡張子に従ってモデルをファイルに出力します。
    指定可能な拡張子は .mps, .rew, .lp, .rlp, .dua/.dlp (LP の双対問題のモデルとして) です。

  • write_response_data:

    指定されたファイルパスの拡張子に従って解をファイルに出力します。
    指定可能な拡張子は .sol または .json です。

参考

parameters に指定可能な Parameters クラスのアトリビュートの詳細は Gurobi Parameters を参照してください。
ただし Parameters クラスのアトリビュート名は snake_case に統一されていることに注意してください。

注釈

Parameters クラスのアトリビュートはデフォルト値として全て None (未設定) に初期化されていますが、一部のアトリビュートは利便性のため None の場合に明示的に Gurobi に次のように渡されます。

  • log_to_console:

    Gurobi のデフォルト (1) とは異なり 0 (出力しない) をデフォルトとして扱います。

  • seed:

    Gurobi のデフォルト (0) とは異なりハードウェア乱数を生成して初期化します。

設定例:
from amplify import GurobiClient
from datetime import timedelta

client = GurobiClient()

# インストールパスを設定 
# (インストールパスが自動的に検出されない場合に必要)
# client.library_path = "/opt/gurobi950/linux64/lib/libgurobi.so.9.5.0"

# 実行時間を 100 秒に設定
client.parameters.time_limit = timedelta(seconds=100)
実行例:
from amplify import Model, VariableGenerator, solve

# 決定変数と目的関数を定義
g = VariableGenerator()
q = g.array("Binary", 2)
f = q[0] * q[1] + q[0] - q[1] + 1

# モデルを作成
model = Model(f)

# ソルバーを実行
result = solve(model, client)

ソルバーのバージョンを取得:

>>> client.version
'9.5.0'