--- hide-toc: true --- # クライアントの詳細 Amplify SDK には Amplify SDK から実行できるソルバーに対応したクライアントクラスが用意されています。クライアントクラスは各ソルバーの API をラップしたものであり、ソルバーの設定や実行パラメータの設定を行うインターフェースや、API のリクエストを行うメソッドを提供します。 ソルバーの提供形態は、WEB API、実行ファイル、ライブラリ API など様々ですが、ソルバーのクライアントクラスを通じて統一的に扱うことができます。また、Amplify SDK はクライアントクラスの共通インターフェースを用いる事で、モデル変換やグラフ埋め込み処理に加えて、ソルバーの実行や結果の解析の抽象化を可能にしています。 このページではソルバークライアントの提供する共通のインターフェースについて説明し、各ソルバークライアント固有の機能や特徴についてはそれぞれのサブページで解説します。 (client-common-interface)= ## クライアントクラス クライアントクラスは、大別すると以下の 3 種類のインターフェースを提供します。 * ソルバーの実行パラメータの設定 * クライアントの設定やソルバー情報の取得 * ソルバーの提供する API の呼び出し ソルバークライアントの共通インターフェースは次の通りです。一部のソルバーでのみ有効なインターフェースについては、[ソルバークライアントの一覧](#solver-clients)にて各ソルバーに付与されている {bdg-primary}`tag` で分類しています。また、ソルバー固有のインターフェースについては、各ソルバーのサブページを参照してください。 :**実行パラメータの取得と設定**: `parameters`: {py:class}`object` : ソルバーの実行パラメータを取得・指定するパラメータクラスを返します。 パラメータクラスの型はソルバーによって異なりますが、可能な限り全ての実行パラメータを取得・設定できるように設計されています。 パラメータの詳細は各ソルバーのサブページとソルバーのAPIリファレンスを参照してください。 ```{note} 全てのソルバーのアトリビュートにおいて、 {py:obj}`None` の設定が可能な場合は未設定状態を表します。 {py:obj}`None` が設定されたアトリビュートは設定そのものが行われず、リクエストデータへの追加も行われません。 これはソルバーにデフォルト値を使用させるための仕様です。 ``` :**ソルバー情報の取得**: `acceptable_degrees`: {py:class}`amplify.AcceptableDegrees` : ソルバーの扱える問題の次数を取得します。詳細は [](intermediate.md) を参照してください。 `version`: {py:class}`str` : ソルバーのバージョン情報を取得します。 リモートソルバーの場合は `token` の設定が必要になることがあります。これは API への問い合わせが行われることがあるためです。 ローカルソルバーの場合は実行ファイルやライブラリのバージョン情報を取得します。 :**二次多項式のグラフ構造** {bdg-warning}`Graph`: `graph`: {py:class}`~amplify.Graph` : ソルバー固有のグラフ構造を取得します。詳細は [](graph.md) を参照してください。 :**WEB API の接続設定** {bdg-secondary}`☁️ Cloud`: `url`: {py:class}`str` : ソルバーのエンドポイント URL を取得・指定します。 `token`: {py:class}`str` : API トークン等の認証情報を取得・指定します。 `proxy`: {py:class}`str` : 接続に用いるプロキシサーバを取得・指定します。詳細は [](proxy.md) を参照してください。 :**実行ファイル・ライブラリパスの設定** {bdg-secondary}`💻 Local`: `library_path`: {py:class}`os.PathLike` : ソルバーのライブラリのファイルパスを指定します。 (client-write-data)= :**送受信データの保存** {bdg-secondary}`☁️ Cloud` {bdg-secondary}`💻 Local`: `write_request_data`: {py:class}`os.PathLike` : ソルバーに送信されたリクエストデータを指定されたファイルパスに保存します。データ形式はソルバーごとに異なります。 `write_response_data`: {py:class}`os.PathLike` : ソルバーから受信したレスポンスデータを指定されたファイルパスに保存します。データ形式はソルバーごとに異なります。 (client-solve)= :**ソルバーの実行**: `solve(...)`: : ソルバーを実行する関数として 各ソルバークライアントには、`solve(...)` メソッドが実装されています。これはソルバーの API のラッパー関数です。 ```{note} 通常はユーザが直接このメソッドを呼び出す必要はありません。代わりに {py:func}`~amplify.solve` 関数を使用してください。 ``` 引数には、ソルバーの API へ入力可能な形式に応じて、多項式 ({py:class}`~amplify.Poly`)、行列形式 ({py:class}`~amplify.Matrix`) または制約条件 ({py:class}`~amplify.Constraint` あるいは {py:class}`~amplify.ConstraintList`)、そしてその両方のいずれかを与えて API を呼び出すことができます。しかし、グローバルの {py:func}`~amplify.solve` 関数とは異なり、モデル変換やグラフ埋め込み等が行われることはありません。そのため、ソルバーの扱えない変数の種類や次数、制約条件を与えた場合には例外を送出します。 `solve(...)` メソッドの返り値型はソルバーごとに異なり、たとえば Amplify AE ({py:class}`~amplify.FixstarsClient`) の場合は {py:class}`amplify.FixstarsClient.Result` クラスのインスタンスとなります。このクラスは、ソルバーが返すレスポンスデータのデータ構造を極力変えないようにしてクラス化したものです。 ### {py:func}`~amplify.solve` 関数との連携 {py:func}`~amplify.solve` 関数はモデルの変換やグラフ埋め込み処理を行った後、ソルバークライアントの `solve(...)` メソッドを呼び出してソルバーを実行し、返却されたデータを解析することで解や実行時間の情報を得ます。 {py:func}`~amplify.solve` 関数の返却する {py:class}`~amplify.Result` クラスのインスタンスには、ソルバーの返却したデータや応答時間、実行時間が次のアトリビュートに格納されます。 ```{list-table} :width: 100% :header-rows: 1 :widths: 2 1 2 * - アトリビュート - データ型 - 詳細 * - {py:attr}`amplify.Result.client_result` - `Client.Result` - ソルバークライアントの実行結果 (レスポンスデータ) * - {py:attr}`amplify.Result.execution_time` - {py:class}`datetime.timedelta` - ソルバー内部の実行時間 * - {py:attr}`amplify.Result.response_time` - {py:class}`datetime.timedelta` - ソルバーの応答時間 ``` ```{toctree} :hidden: clients/fixstars.md clients/dwave.md clients/toshiba.md clients/fujitsu.md clients/nec.md clients/gurobi.md ```