富士通#

Fujitsu DA4 Sovler#

富士通 の提供する第四世代アニーリングコア (GPU) による QUBO ソルバーです。

ソルバー仕様:

バイナリ変数

イジング変数

整数変数

実数変数

目的関数

2次

-

-

-

等式制約

*/**

-

-

-

不等式制約

1次

-

-

-

*: one-way-one-hot 制約および two-way-one-hot 制約に対応しています。
**: ペナルティ関数として与えることが可能です。

クライアントクラス:

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

アトリビュート

データ型

詳細

type_id

str | None

Premium API を使用する場合のタイプIDを指定します

set_penalty_binary_polynomial

bool

True に設定すると制約条件のペナルティ関数の重みの設定を penalty_binary_polynomial パラメータに与えます (デフォルト: True)
False に設定するとペナルティ関数は目的関数に足されます。

set_inequalities

bool

True に設定すると一次の不等式制約を inequalities パラメータに与えます (デフォルト: True)
False に設定すると不等式制約のペナルティ関数を生成して set_penalty_binary_polynomial に従って処理します。

set_one_way_one_hot_groups

bool

True に設定すると、決定変数の先頭から並んでいる one-hot 制約を可能な限り検出して one_way_one_hot_groups パラメータに与えます (デフォルト: False)
False に設定した場合や、パラメータに与えることのできなかった one-hot 制約はペナルティ関数を生成して set_penalty_binary_polynomial に従って処理します。

set_two_way_one_hot_groups

bool

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 の検出を優先します。

メソッド

返却型

詳細

health_check()

CommonError | None

ヘルスチェック API への問合せを行い、ソルバーが正常動作しているかを確認します。正常時は None を返します。

async_solve()

str

/async/qubo/solve API を非同期で実行してジョブ ID を返します。

get_jobs()

list[JobStatusInfo]

ジョブのステータスの一覧を取得します。

cancel_job()

JobStatus

ジョブのIDを指定してジョブのキャンセルを試みます。

get_job_result()

Result

ジョブのIDを指定して完了済みの結果を取得します。

delete_job_result()

Result

ジョブの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 VariableGenerator, Model

# 決定変数と目的関数を定義
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'

Fujitsu DA3c Solver#

富士通 の提供する第三世代アニーリングコア (DAU: Digital Annealing Unit) による QUBO ソルバーです。

注釈

クライアントクラスの仕様は amplify.FujitsuDA4Client と同様です。

ソルバー仕様:

バイナリ変数

イジング変数

整数変数

実数変数

目的関数

2次

-

-

-

等式制約

*/**

-

-

-

不等式制約

1次

-

-

-

*: one-way-one-hot 制約および two-way-one-hot 制約に対応しています。
**: ペナルティ関数として与えることが可能です。