富士通¶
Fujitsu DA4 Solver¶
富士通 の提供する第四世代アニーリングコア (GPU) による QUBO ソルバーです。
- ソルバー仕様:
クライアントクラス
API 方式
REST API (JSON)
API リファレンス
バイナリ変数
イジング変数
整数変数
実数変数
目的関数
2次
-
-
-
等式制約
*/**
-
-
-
不等式制約
1次
-
-
-
*: one-way-one-hot 制約および two-way-one-hot 制約に対応しています。
**: ペナルティ関数として与えることが可能です。- クライアントクラス:
クライアントクラスの共通インターフェース に加えて以下のアトリビュートとメソッドを持ちます。
アトリビュート
データ型
詳細
Premium API を使用する場合のタイプIDを指定します
True
に設定すると制約条件のペナルティ関数の重みの設定をpenalty_binary_polynomial
パラメータに与えます (デフォルト:True
)
False
に設定するとペナルティ関数は目的関数に足されます。True
に設定すると一次の不等式制約をinequalities
パラメータに与えます (デフォルト:True
)
False
に設定すると不等式制約のペナルティ関数を生成してset_penalty_binary_polynomial
に従って処理します。True
に設定すると、決定変数の先頭から並んでいる one-hot 制約を可能な限り検出してone_way_one_hot_groups
パラメータに与えます (デフォルト:False
)
False
に設定した場合や、パラメータに与えることのできなかった one-hot 制約はペナルティ関数を生成してset_penalty_binary_polynomial
に従って処理します。True
に設定すると、等間隔に並ぶone_way_one_hot_groups
の検出を行い、さらにtwo_way_one_hot_groups
の条件を満たす one-hot 制約を追加できる場合にはそれらを検出してtwo_way_one_hot_groups
パラメータに与えます (デフォルト:False
)
False
に設定した場合や、パラメータに与えることのできなかった one-hot 制約はペナルティ関数を生成してset_penalty_binary_polynomial
に従って処理します。
set_one_way_one_hot_groups
と同時にTrue
に設定した場合はtwo_way_one_hot_groups
の検出を優先します。メソッド
返却型
詳細
ヘルスチェック API への問合せを行い、ソルバーが正常動作しているかを確認します。正常時は
None
を返します。/async/qubo/solve
API を非同期で実行してジョブ ID を返します。ジョブのステータスの一覧を取得します。
ジョブのIDを指定してジョブのキャンセルを試みます。
ジョブのIDを指定して完了済みの結果を取得します。
ジョブのIDを指定して完了済みの結果を取得し結果を削除します。
注釈
クライアントクラスの共通インターフェースの
solve()
はasync_solve()
の同期版です。ジョブの実行が完了するまで待機して実行結果の返却を行います。- 設定例:
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)
- 実行例:
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の実行:
>>> client.health_check()
ジョブ一覧の取得:
>>> client.get_jobs() [FujitsuDA4ClientJobStatusInfo({"job_id":"...","job_status":"Done","start_time":"..."}), FujitsuDA4ClientJobStatusInfo({"job_id":"...","job_status":"Done","start_time":"..."}) ...]
ジョブの結果の取得と削除:
>>> client.delete_job_result("...") {"qubo_solution":{"progress":[{"energy":417.0,"penalty_energy":366429644.0,"time":1.179},...
ソルバーのバージョンを取得:
>>> client.version 'v4'
詳細な実行時間を取得:
>>> result.client_result.qubo_solution.timing FujitsuDA4Client.SolverTiming({ "solve_time": 101963.0, "total_elapsed_time": 101963.0 })
Fujitsu DA3c Solver¶
富士通 の提供する第三世代アニーリングコア (DAU: Digital Annealing Unit) による QUBO ソルバーです。
注釈
クライアントクラスの仕様は amplify.FujitsuDA4Client
と同様です。
- ソルバー仕様:
クライアントクラス
API 方式
REST API (JSON)
API リファレンス
バイナリ変数
イジング変数
整数変数
実数変数
目的関数
2次
-
-
-
等式制約
*/**
-
-
-
不等式制約
1次
-
-
-
*: one-way-one-hot 制約および two-way-one-hot 制約に対応しています。
**: ペナルティ関数として与えることが可能です。