--- sd_hide_title: true hide-toc: true --- # Gurobi (clients-GurobiClient)= ## Gurobi Optimizer Gurobi が提供する MIP (混合整数計画問題) ソルバーです。Gurobi Optimizer は QUBO を含む整数変数、実数変数の二次の問題を扱うことができます。 ```{note} Gurobi の実行には Amplify SDK の実行マシンに [Gurobi Optimizer](https://www.gurobi.com/solutions/gurobi-optimizer/) およびライセンスが適切にインストールされている必要があります。 ``` :**ソルバー仕様**: ```{list-table} :width: 100% :widths: 2 3 * - クライアントクラス - {py:class}`amplify.GurobiClient` * - [実行パラメータ](amplify.GurobiClient.parameters) - {py:class}`amplify.GurobiClient.Parameters` * - [実行結果](amplify.Result.client_result) - {py:class}`amplify.GurobiClient.Result` * - [実行時間](amplify.Result.execution_time) - {py:attr}`amplify.GurobiClient.Result.runtime` * - 対応バージョン - 9.0.0 以上 * - API リファレンス - [{bdg-info}`📖 Reference Manual`](https://www.gurobi.com/documentation/current/refman/index.html) ``` ```{csv-table} :header-rows: 1 :stub-columns: 1 :width: 100% :widths: 1 1 1 1 1 ,バイナリ変数,イジング変数,整数変数,実数変数 目的関数,2次,\-,2次,2次 等式制約,2次,\-,2次,2次 不等式制約,2次,\-,2次,2次 ``` :**クライアントクラス**: [クライアントクラスの共通インターフェース](#client-common-interface) に加えて以下のメソッドを持ちます。 ```{list-table} :width: 100% :header-rows: 1 :widths: 1 1 3 * - メソッド - 返却型 - 詳細 * - {py:meth}`~amplify.GurobiClient.tune` - {py:obj}`None` - 実行パラメータのサーチを行います。 ``` ```{note} {py:class}`~amplify.GurobiClient` のファイル出力は次のように振る舞います。 - {py:attr}`~amplify.GurobiClient.write_request_data`: : 指定されたファイルパスの拡張子に従ってモデルをファイルに出力します。 指定可能な拡張子は `.mps`, `.rew`, `.lp`, `.rlp`, `.dua/.dlp` (LP の双対問題のモデルとして) です。 - {py:attr}`~amplify.GurobiClient.write_response_data`: : 指定されたファイルパスの拡張子に従って解をファイルに出力します。 指定可能な拡張子は `.sol` または `.json` です。 ``` ```{seealso} {py:attr}`~amplify.GurobiClient.parameters` に指定可能な {py:class}`~amplify.GurobiClient.Parameters` クラスのアトリビュートの詳細は [Gurobi Parameters](https://www.gurobi.com/documentation/current/refman/parameters.html#sec:Parameters) を参照してください。 ただし {py:class}`~amplify.GurobiClient.Parameters` クラスのアトリビュート名は *snake_case* に統一されていることに注意してください。 ``` ```{note} {py:class}`~amplify.GurobiClient.Parameters` クラスのアトリビュートはデフォルト値として全て {py:obj}`None` (未設定) に初期化されていますが、一部のアトリビュートは利便性のため {py:obj}`None` の場合に明示的に Gurobi に次のように渡されます。 - {py:attr}`~amplify.GurobiClient.Parameters.log_to_console`: : Gurobi のデフォルト (`1`{l=python}) とは異なり `0`{l=python} (出力しない) をデフォルトとして扱います。 - {py:attr}`~amplify.GurobiClient.Parameters.seed`: : Gurobi のデフォルト (`0`{l=python}) とは異なりハードウェア乱数を生成して初期化します。 ``` :**設定例**: ```{testcode} 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) ``` :**実行例**: ```python 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) ``` ソルバーのバージョンを取得: ```python >>> client.version '9.5.0' ```