--- sd_hide_title: true --- # 富士通 (clients-FujitsuDA4Client)= ## Fujitsu DA4 Solver [富士通](https://www.fujitsu.com/jp/digitalannealer/) の提供する第四世代アニーリングコア (GPU) による QUBO ソルバーです。 :**ソルバー仕様**: ```{list-table} :width: 100% :widths: 2 3 * - クライアントクラス - {py:class}`amplify.FujitsuDA4Client` * - [実行パラメータ](amplify.FujitsuDA4Client.parameters) - {py:class}`amplify.FujitsuDA4Client.Parameters` * - [実行結果](amplify.Result.client_result) - {py:class}`amplify.FujitsuDA4Client.Result` * - [実行時間](amplify.Result.execution_time) - {py:attr}`amplify.FujitsuDA4Client.SolverTiming.solve_time` * - API 方式 - REST API (JSON) * - API リファレンス - [{bdg-info}`📖 API Reference`](https://portal.aispf.global.fujitsu.com/apidoc/da/jp/api-ref/da-qubo-v4-ja.html) ``` ```{csv-table} :header-rows: 1 :stub-columns: 1 :width: 100% :widths: 1 1 1 1 1 ,バイナリ変数,イジング変数,整数変数,実数変数 目的関数,2次,\-,\-,\- 等式制約,\*\/\**,\-,\-,\- 不等式制約,1次,\-,\-,\- ``` \*: one-way-one-hot 制約および two-way-one-hot 制約に対応しています。 \**: ペナルティ関数として与えることが可能です。 :**クライアントクラス**: [クライアントクラスの共通インターフェース](#client-common-interface) に加えて以下のアトリビュートとメソッドを持ちます。 ```{list-table} :width: 100% :header-rows: 1 :widths: 1 1 3 * - アトリビュート - データ型 - 詳細 * - {py:attr}`~amplify.FujitsuDA4Client.type_id` - {py:class}`str` | {py:obj}`None` - [Premium API](https://portal.aispf.global.fujitsu.com/apidoc/da/jp/api-ref/da-qubo-v3c-v4-premium-ja.html) を使用する場合のタイプIDを指定します * - {py:attr}`~amplify.FujitsuDA4Client.set_penalty_binary_polynomial` - {py:class}`bool` - {py:obj}`True` に設定すると制約条件のペナルティ関数の重みの設定を `penalty_binary_polynomial` パラメータに与えます (デフォルト: {py:obj}`True`) {py:obj}`False` に設定するとペナルティ関数は目的関数に足されます。 * - {py:attr}`~amplify.FujitsuDA4Client.set_inequalities` - {py:class}`bool` - {py:obj}`True` に設定すると一次の不等式制約を `inequalities` パラメータに与えます (デフォルト: {py:obj}`True`) {py:obj}`False` に設定すると不等式制約のペナルティ関数を生成して {py:attr}`~amplify.FujitsuDA4Client.set_penalty_binary_polynomial` に従って処理します。 * - {py:attr}`~amplify.FujitsuDA4Client.set_one_way_one_hot_groups` - {py:class}`bool` - {py:obj}`True` に設定すると、決定変数の先頭から並んでいる one-hot 制約を可能な限り検出して `one_way_one_hot_groups` パラメータに与えます (デフォルト: {py:obj}`False`) {py:obj}`False` に設定した場合や、パラメータに与えることのできなかった one-hot 制約はペナルティ関数を生成して {py:attr}`~amplify.FujitsuDA4Client.set_penalty_binary_polynomial` に従って処理します。 * - {py:attr}`~amplify.FujitsuDA4Client.set_two_way_one_hot_groups` - {py:class}`bool` - {py:obj}`True` に設定すると、等間隔に並ぶ `one_way_one_hot_groups` の検出を行い、さらに `two_way_one_hot_groups` の条件を満たす one-hot 制約を追加できる場合にはそれらを検出して `two_way_one_hot_groups` パラメータに与えます (デフォルト: {py:obj}`False`) {py:obj}`False` に設定した場合や、パラメータに与えることのできなかった one-hot 制約はペナルティ関数を生成して {py:attr}`~amplify.FujitsuDA4Client.set_penalty_binary_polynomial` に従って処理します。 {py:attr}`~amplify.FujitsuDA4Client.set_one_way_one_hot_groups` と同時に {py:obj}`True` に設定した場合は `two_way_one_hot_groups` の検出を優先します。 ``` ```{list-table} :width: 100% :header-rows: 1 :widths: 1 1 3 * - メソッド - 返却型 - 詳細 * - {py:meth}`~amplify.FujitsuDA4Client.health_check` - {py:class}`~amplify.FujitsuDA4Client.CommonError` | {py:obj}`None` - ヘルスチェック API への問合せを行い、ソルバーが正常動作しているかを確認します。正常時は {py:obj}`None` を返します。 * - {py:meth}`~amplify.FujitsuDA4Client.async_solve` - {py:class}`str` - `/async/qubo/solve` API を非同期で実行してジョブ ID を返します。 * - {py:meth}`~amplify.FujitsuDA4Client.get_jobs` - {py:class}`list`[{py:class}`~amplify.FujitsuDA4Client.JobStatusInfo`] - ジョブのステータスの一覧を取得します。 * - {py:meth}`~amplify.FujitsuDA4Client.cancel_job` - {py:class}`~amplify.FujitsuDA4Client.JobStatus` - ジョブのIDを指定してジョブのキャンセルを試みます。 * - {py:meth}`~amplify.FujitsuDA4Client.get_job_result` - {py:class}`~amplify.FujitsuDA4Client.Result` - ジョブのIDを指定して完了済みの結果を取得します。 * - {py:meth}`~amplify.FujitsuDA4Client.delete_job_result` - {py:class}`~amplify.FujitsuDA4Client.Result` - ジョブのIDを指定して完了済みの結果を取得し結果を削除します。 ``` ```{note} クライアントクラスの共通インターフェースの {py:meth}`~amplify.FujitsuDA4Client.solve` は {py:meth}`~amplify.FujitsuDA4Client.async_solve` の同期版です。ジョブの実行が完了するまで待機して実行結果の返却を行います。 ``` :**設定例**: ```{testcode} from amplify import FujitsuDA4Client from datetime import timedelta client = FujitsuDA4Client() # API トークンを設定 client.token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" # one-way one-hot groups の検出を有効化 client.set_one_way_one_hot_groups = True # 実行時間を 100 秒に設定 client.parameters.time_limit_sec = 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) ``` ヘルスチェックAPIの実行: ```python >>> client.health_check() ``` ジョブ一覧の取得: ```python >>> client.get_jobs() [FujitsuDA4ClientJobStatusInfo({"job_id":"...","job_status":"Done","start_time":"..."}), FujitsuDA4ClientJobStatusInfo({"job_id":"...","job_status":"Done","start_time":"..."}) ...] ``` ジョブの結果の取得と削除: ```python >>> client.delete_job_result("...") {"qubo_solution":{"progress":[{"energy":417.0,"penalty_energy":366429644.0,"time":1.179},... ``` ソルバーのバージョンを取得: ```python >>> client.version 'v4' ``` 詳細な実行時間を取得: ```python >>> result.client_result.qubo_solution.timing FujitsuDA4Client.SolverTiming({ "solve_time": 101963.0, "total_elapsed_time": 101963.0 }) ``` (clients-FujitsuDA3cClient)= ## Fujitsu DA3c Solver [富士通](https://www.fujitsu.com/jp/digitalannealer/) の提供する第三世代アニーリングコア (DAU: Digital Annealing Unit) による QUBO ソルバーです。 ```{note} クライアントクラスの仕様は {py:class}`amplify.FujitsuDA4Client` と同様です。 ``` :**ソルバー仕様**: ```{list-table} :width: 100% :widths: 2 3 * - クライアントクラス - {py:class}`amplify.FujitsuDA3cClient` * - [実行パラメータ](amplify.FujitsuDA3cClient.parameters) - {py:class}`amplify.FujitsuDA3cClient.Parameters` * - [実行結果](amplify.Result.client_result) - {py:class}`amplify.FujitsuDA3cClient.Result` * - [実行時間](amplify.Result.execution_time) - {py:attr}`amplify.FujitsuDA3cClient.SolverTiming.solve_time` * - API 方式 - REST API (JSON) * - API リファレンス - [{bdg-info}`📖 API Reference`](https://portal.aispf.global.fujitsu.com/apidoc/da/jp/api-ref/da-qubo-v3c-ja.html) ``` ```{csv-table} :header-rows: 1 :stub-columns: 1 :width: 100% :widths: 1 1 1 1 1 ,バイナリ変数,イジング変数,整数変数,実数変数 目的関数,2次,\-,\-,\- 等式制約,\*\/\**,\-,\-,\- 不等式制約,1次,\-,\-,\- ``` \*: one-way-one-hot 制約および two-way-one-hot 制約に対応しています。 \**: ペナルティ関数として与えることが可能です。