Client

このセクションではイジングマシンのクライアントについて説明します。

参考

クライアントクラスの具体的な使用方法は Solver を参照してください。

クライアントクラスの概要

クライアントクラスは各イジングマシンを使用する際のパラメータ取得と設定、マシンの実行を行うインターフェースを提供します。通常は、クライアントクラスのオブジェクトをソルバークラス Solver のドライバとして与えることで、クライアントに対応したマシンを実行する「論理模型」のソルバーとして利用されます。詳細と実行例については、Solver または下記の 各クライアントの実行例 を参照してください。

注釈

クライアントクラス自体も「物理模型」に対するソルバーとして利用できますが(詳細については 物理模型ソルバー を参照)、ソルバークラスを経由した使用を推奨します。

クライアントクラスで設定できるパラメータには二種類あります。

  • イジングマシンのアクセス情報や実行に対する設定

    クライアントクラスのアトリビュートで提供されます。アクセス先の URL や API トークンを設定します。一部のクライアントでは通信データの圧縮設定や送信データの構築方法に関する設定を持ちます。

  • イジングマシンの実行パラメータの設定

    クライアントクラスの parameters アトリビュートで提供されます。マシンの API 仕様に準じた実行パラメータ設定を行います。

参考

クライアントクラスとその周辺クラスの詳細についてはクライアントリファレンス Client を参照してください。

Fixstars

詳細については Fixstars client reference の各項目を参照してください。

Amplify AE クライアントクラス

名称

Fixstars Amplify Annealing Engine

クライアントクラス

FixstarsClient

実行パラメータクラス

FixstarsClientParameters

実行結果クラス

FixstarsClientResult

実行時間クラス

FixstarsClientResultTiming

物理グラフ

全結合

物理ビット数

65536~

論理ビット数 (全結合)

65536~

API URL (デフォルト)

https://optigan.fixstars.com/

Amplify AE クライアントアトリビュート

Name

Description

num_bits

実行可能な変数の最大値を取得します

parameters

実行パラメータ FixstarsClientParameters を取得します

version

クライアントのバージョン情報を取得します

url

API URL を取得・設定します

proxy

プロキシサーバのアドレスを取得・設定します

token

APIトークンを取得・設定します

compression

送信データを圧縮するかを指定します。デフォルトは True です

Amplify AE クライアントの実行例

from amplify import BinarySymbolGenerator, Solver
from amplify.client import FixstarsClient

gen = BinarySymbolGenerator()
q = gen.array(3)
f = 2 * q[0] * q[1] - q[0] - q[2] + 1

client = FixstarsClient()
client.token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
client.parameters.timeout = 1000  # タイムアウト1秒

solver = Solver(client)
result = solver.solve(f)
>>> f
2 q_0 q_1 - q_0 - q_2 + 1
>>> [f"energy = {s.energy}, q = {q.decode(s.values)}" for s in result]
['energy = -1.0, q = [1. 0. 1.]']

D-Wave

詳細については D-Wave client reference の各項目を参照してください。

D-Wave クライアントクラス

注釈

D-Wave Sampler 及び Leap Hybrid Solver を使用するには、dwave-system モジュールのインストールが必要です。次のように Amplify SDK をインストールすると依存パッケージも同時にインストールされます。

$ pip install amplify[extra]

名称

D-Wave Sampler (Ocean SDK)

クライアントクラス

DWaveSamplerClient

実行パラメータクラス

DWaveSamplerClientQuantumSolverParametersOcean

実行結果クラス

DWaveSamplerClientResult

実行時間クラス

DWaveSamplerClientResultTiming

物理グラフ

ペガサスグラフ (Advantage_system1.1)、キメラグラフ (DW_2000Q_6, DW_2000Q_VFYC_6)

物理ビット数

5436 (Advantage_system1.1), 2041 (DW_2000Q_6), 2048 (DW_2000Q_VFYC_6)

論理ビット数 (全結合)

123 (Advantage_system1.1), 64 (DW_2000Q_6, DW_2000Q_VFYC_6)

API URL (デフォルト)

https://cloud.dwavesys.com/sapi

名称

Leap Hybrid Solver (Ocean SDK)

クライアントクラス

LeapHybridSamplerClient

実行パラメータクラス

LeapHybridSamplerClientLeapHybridSolverParameters

実行結果クラス

LeapHybridSamplerClientResult

実行時間クラス

LeapHybridSamplerClientResultTiming

物理グラフ

全結合

物理ビット数

1000000

論理ビット数 (全結合)

1000000

API URL (デフォルト)

https://cloud.dwavesys.com/sapi

D-Wave クライアントアトリビュート

Name

Description

num_bits

実行可能な変数の最大値を取得します

D-Wave Sampler

N/A

Leap Hybrid Solver

1000000

parameters

実行パラメータを取得します

D-Wave Sampler

DWaveSamplerClientQuantumSolverParametersOcean

Leap Hybrid Solver

LeapHybridSamplerClientLeapHybridSolverParameters

proxy

プロキシサーバのアドレスを取得・設定します

solver

実行するソルバ名を取得・設定します

D-Wave Sampler

"Advantage_system1.1", "DW_2000Q_6", "DW_2000Q_VFYC_6"

Leap Hybrid Solver

"hybrid_binary_quadratic_model_version2"

solver_names

使用可能なソルバ名のリストを取得します

token

APIトークンを取得・設定します

url

API URL を取得・設定します

version

クライアントのバージョン情報を取得します

D-Wave クライアントの実行例

D-Wave Sampler クライアント

from amplify import BinarySymbolGenerator, Solver
from amplify.client.ocean import DWaveSamplerClient

client = DWaveSamplerClient()
client.token = "XXXX-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
client.solver = "Advantage_system1.1"
client.parameters.num_reads = 100  # 実行回数

gen = BinarySymbolGenerator()
q = gen.array(3)
f = 2 * q[0] * q[1] - q[0] - q[2] + 1

solver = Solver(client)

result = solver.solve(f)
>>> f
2 q_0 q_1 - q_0 - q_2 + 1
>>> [f"energy = {s.energy}, q = {q.decode(s.values)}" for s in result]
['energy = -1.0, q = [1. 0. 1.]']

token を設定することで、トークンに紐付いた使用可能なソルバ名のリストを以下のように取得できます。

>>> client.solver_names
['DW_2000Q_6', 'DW_2000Q_VFYC_6', 'Advantage_system1.1']

D-Wave Leap Hybrid Solver クライアント

from amplify import BinarySymbolGenerator, Solver
from amplify.client.ocean import LeapHybridSamplerClient

client = LeapHybridSamplerClient()
client.token = "XXXX-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
client.solver = "hybrid_binary_quadratic_model_version2"
client.parameters.time_limit = 3  # タイムリミット3秒

gen = BinarySymbolGenerator()
q = gen.array(3)
f = 2 * q[0] * q[1] - q[0] - q[2] + 1

solver = Solver(client)

result = solver.solve(f)
>>> f
2 q_0 q_1 - q_0 - q_2 + 1
>>> [f"energy = {s.energy}, q = {q.decode(s.values)}" for s in result]
['energy = -1.0, q = [1. 0. 1.]']

DwaveSamplerClient と同様に、使用可能なソルバのリストは以下のように取得できます。

>>> client.solver_names
['hybrid_binary_quadratic_model_version2']

Fujitsu

詳細については Fujitsu client reference の各項目を参照してください。

Fujitsu クライアントクラス

名称

FujitsuDASolver

クライアントクラス

FujitsuDASolverClient

実行パラメータクラス

FujitsuDASolverClientParameters

実行結果クラス

FujitsuDASolverClientResult

実行時間クラス

FujitsuDASolverClientResultTiming

物理グラフ

全結合

物理ビット数

1024

論理ビット数 (全結合)

1024

API URL (デフォルト)

https://api.aispf.global.fujitsu.com/da/

名称

FujitsuDASolver (Expert Mode)

クライアントクラス

FujitsuDASolverExpertClient

実行パラメータクラス

FujitsuDASolverExpertClientParameters

実行結果クラス

FujitsuDASolverExpertClientResult

実行時間クラス

FujitsuDASolverExpertClientResultTiming

物理グラフ

全結合

物理ビット数

1024

論理ビット数 (全結合)

1024

API URL (デフォルト)

https://api.aispf.global.fujitsu.com/da/

名称

FujitsuDAPTSolver

クライアントクラス

FujitsuDAPTSolverClient

実行パラメータクラス

FujitsuDAPTSolverClientParameters

実行結果クラス

FujitsuDAPTSolverClientResult

実行時間クラス

FujitsuDAPTSolverClientResultTiming

物理グラフ

全結合

物理ビット数

1024

論理ビット数 (全結合)

1024

API URL (デフォルト)

https://api.aispf.global.fujitsu.com/da/

名称

FujitsuDAMixedModeSolver

クライアントクラス

FujitsuDAMixedModeSolverClient

実行パラメータクラス

FujitsuDAMixedModeSolverClientParameters

実行結果クラス

FujitsuDAMixedModeSolverClientResult

実行時間クラス

FujitsuDAMixedModeSolverClientResultTiming

物理グラフ

全結合

物理ビット数

1024

論理ビット数 (全結合)

1024

API URL (デフォルト)

https://api.aispf.global.fujitsu.com/da/

名称

FujitsuDA2Solver

クライアントクラス

FujitsuDA2SolverClient

実行パラメータクラス

FujitsuDA2SolverClientParameters

実行結果クラス

FujitsuDA2SolverClientResult

実行時間クラス

FujitsuDA2SolverClientResultTiming

物理グラフ

全結合

物理ビット数

8192

論理ビット数 (全結合)

8192

API URL (デフォルト)

https://api.aispf.global.fujitsu.com/da/

名称

FujitsuDA2Solver (Expert Mode)

クライアントクラス

FujitsuDA2SolverExpertClient

実行パラメータクラス

FujitsuDA2SolverExpertClientParameters

実行結果クラス

FujitsuDA2SolverExpertClientResult

実行時間クラス

FujitsuDA2SolverExpertClientResultTiming

物理グラフ

全結合

物理ビット数

8192

論理ビット数 (全結合)

8192

API URL (デフォルト)

https://api.aispf.global.fujitsu.com/da/

名称

FujitsuDA2PTSolver

クライアントクラス

FujitsuDA2PTSolverClient

実行パラメータクラス

FujitsuDA2PTSolverClientParameters

実行結果クラス

FujitsuDA2PTSolverClientResult

実行時間クラス

FujitsuDA2PTSolverClientResultTiming

物理グラフ

全結合

物理ビット数

8192

論理ビット数 (全結合)

8192

API URL (デフォルト)

https://api.aispf.global.fujitsu.com/da/

名称

FujitsuDA2MixedModeSolver

クライアントクラス

FujitsuDA2MixedModeSolverClient

実行パラメータクラス

FujitsuDA2MixedModeSolverClientParameters

実行結果クラス

FujitsuDA2MixedModeSolverClientResult

実行時間クラス

FujitsuDA2MixedModeSolverClientResultTiming

物理グラフ

全結合

物理ビット数

8192

論理ビット数 (全結合)

8192

API URL (デフォルト)

https://api.aispf.global.fujitsu.com/da/

名称

FujitsuDA3Solver

クライアントクラス

FujitsuDA3SolverClient

実行パラメータクラス

FujitsuDA3SolverClientParameters

実行結果クラス

FujitsuDA3SolverClientResult

実行時間クラス

FujitsuDA3SolverClientResultTiming

物理グラフ

全結合

物理ビット数

100000

論理ビット数 (全結合)

100000

API URL (デフォルト)

https://api.aispf.global.fujitsu.com/da/

Fujitsu クライアントアトリビュート

Name

Description

num_bits

実行可能な変数の最大値を取得します

parameters

実行パラメータ を取得します

FujitsuDASolver

FujitsuDASolverClientParameters

FujitsuDASolver (Expert Mode)

FujitsuDASolverExpertClientParameters

FujitsuDAPTSolver

FujitsuDAPTSolverClientParameters

FujitsuDAMixedModeSolver

FujitsuDAMixedModeSolverClientParameters

FujitsuDA2Solver

FujitsuDA2SolverClientParameters

FujitsuDA2Solver (Expert Mode)

FujitsuDA2SolverExpertClientParameters

FujitsuDA2PTSolver

FujitsuDA2PTSolverClientParameters

FujitsuDA2MixedModeSolver

FujitsuDA2MixedModeSolverClientParameters

FujitsuDA3Solver

FujitsuDA3SolverClientParameters

proxy

プロキシサーバのアドレスを取得・設定します

token

APIトークンを取得・設定します

url

API URL を取得・設定します

version

クライアントのバージョン情報を取得します

set_penalty_binary_polynomial

FujitsuDA3SolverClient においてペナルティ二次多項式を使用するかを指定します。デフォルトは False です

Fujitsu クライアントの実行例

FujitsuDA2PTSolverClient

from amplify import BinarySymbolGenerator, Solver
from amplify.client import FujitsuDA2PTSolverClient

gen = BinarySymbolGenerator()
q = gen.array(3)
f = 2 * q[0] * q[1] - q[0] - q[2] + 1

client = FujitsuDA2PTSolverClient()
client.token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
client.parameters.number_iterations = 1000

solver = Solver(client)

result = solver.solve(f)
>>> f
2 q_0 q_1 - q_0 - q_2 + 1
>>> [f"energy = {s.energy}, q = {q.decode(s.values)}" for s in result]
['energy = -1.0, q = [1. 0. 1.]']

注釈

FujitsuDA と FujitsuDA2 の各種クライアントのパラメータの詳細については、 Digital Annealer API リファレンス (QUBO API V2) の Schemas の該当箇所を参照してください。

FujitsuDA3SolverClient

from amplify import BinarySymbolGenerator, Solver
from amplify.client import FujitsuDA3SolverClient

gen = BinarySymbolGenerator()
q = gen.array(3)
f = 2 * q[0] * q[1] - q[0] - q[2] + 1

client = FujitsuDA3SolverClient()
client.token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
client.parameters.time_limit_sec = 1  # タイムリミット1秒

solver = Solver(client)

result = solver.solve(f)
>>> f
2 q_0 q_1 - q_0 - q_2 + 1
>>> [f"energy = {s.energy}, q = {q.decode(s.values)}" for s in result]
['energy = -1.0, q = [1. 0. 1.]',
 'energy = 0.0, q = [1. 0. 0.]',
 'energy = 0.0, q = [0. 1. 1.]',
 'energy = 1.0, q = [0. 0. 0.]']

注釈

FujitsuDA3SolverClient のパラメータの詳細については、 Digital Annealer API リファレンス (QUBO API V3) の FujitsuDA3Solver Schemas を参照してください。

Toshiba

詳細については Toshiba client reference の各項目を参照してください。

Toshiba クライアントクラス

名称

Toshiba SBM

クライアントクラス

ToshibaClient

実行パラメータクラス

ToshibaClientParameters

実行結果クラス

ToshibaClientResult

実行時間クラス

ToshibaClientResultTiming

物理グラフ

全結合

物理ビット数

10000

論理ビット数 (全結合)

10000

API URL (デフォルト)

N/A

Toshiba クライアントアトリビュート

Name

Description

num_bits

実行可能な変数の最大値を取得します

parameters

実行パラメータ ToshibaClientParameters を取得します

proxy

プロキシサーバのアドレスを取得・設定します

token

APIトークンを取得・設定します

url

API URL を取得・設定します

version

クライアントのバージョン情報を取得します

Toshiba クライアントの実行例

ToshibaClient

from amplify import BinarySymbolGenerator, Solver
from amplify.client import ToshibaClient

gen = BinarySymbolGenerator()
q = gen.array(3)
f = 2 * q[0] * q[1] - q[0] - q[2] + 1

client = ToshibaClient()
client.url = "http://xxx.xxx.xxx.xxx:xxxx/"
client.parameters.timeout = 1  # timeout 1 second

solver = Solver(client)
result = solver.solve(f)
>>> f
2 q_0 q_1 - q_0 - q_2 + 1
>>> [f"energy = {s.energy}, q = {q.decode(s.values)}" for s in result]
['energy = -1.0, q = [1. 0. 1.]']

注釈

Toshiba SBM の詳細については Simulated Bifurcation Machine (SBM) User Manual を参照ください。

Hitachi

詳細については Hitachi client reference の各項目を参照してください。

Hitachi クライアントクラス

名称

Hitachi CMOS annealing machine (type 4: GPU)

クライアントクラス

HitachiClient

実行パラメータクラス

HitachiClientParameters

実行結果クラス

HitachiClientResult

実行時間クラス

HitachiClientResultTiming

物理グラフ

キンググラフ

物理ビット数

262144 (512x512)

論理ビット数 (全結合)

512

API URL (デフォルト)

https://annealing-cloud.com/api/v2/

Hitachi クライアントアトリビュート

Name

Description

num_bits

実行可能な変数の最大値を取得します

parameters

実行パラメータ HitachiClientParameters を取得します

proxy

プロキシサーバのアドレスを取得・設定します

token

APIトークンを取得・設定します

url

API URL を取得・設定します

version

クライアントのバージョン情報を取得します

Hitachi クライアントの実行例

from amplify import BinaryPoly, gen_symbols, Solver
from amplify.client import HitachiClient

gen = BinarySymbolGenerator()
q = gen.array(3)
f = 2 * q[0] * q[1] - q[0] - q[2] + 1

client = HitachiClient()
client.token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
client.parameters.temperature_num_steps = 10
client.parameters.temperature_step_length = 100
client.parameters.temperature_initial = 100.0
client.parameters.temperature_target = 0.02

solver = Solver(client)

result = solver.solve(f)
>>> f
2 q_0 q_1 - q_0 - q_2 + 1
>>> [f"energy = {s.energy}, q = {q.decode(s.values)}" for s in result]
['energy = -1.0, q = [1. 0. 1.]']

注釈

Hitachi CMOS annealing machine の詳細については APIリファレンス V2 を参照ください。

物理模型ソルバー

通常の使用方法ではソルバークラスを通じて実行する手順を推奨しますが、クライアントクラスは「物理模型」の直接的なソルバーとして利用することも可能です。

注釈

この機能は各マシンを直接操作する場合やデバッグ用途を想定しています。

全てのクライアントは共通で solve() メソッドを持ちます。次の入力が可能です。行列オブジェクトの入力に対して第二引数は定数項を表します。

入力できる多項式は二次に限られ、使用できる変数インデックスと相互作用は各マシンの仕様に準じます。これらは「物理模型」である必要があり、変数間の結合についてハードウェア仕様に基づいたグラフを持ち、そのグラフによっては変数間の結合に制限がある場合があります。

注釈

D-Wave マシンの QPU トポロジについては 公式のドキュメント を参照してください。

注釈

Hitachi CMOS annealing machine は 二次元インデックスで指定する 仕様ですが、Amplify SDK では一次元化したインデックスを用います。キンググラフ上の座標 \(x\), \(y\) について、一次元化した変数インデックス \(i = L x + y\) で与えることに注意してください。ここで \(L = 512\) はキンググラフの一辺の長さを表します。

solve() メソッドはクライアント固有の ClientResult クラスのオブジェクトを返却します。

ClientResult クラスは共通で次のアトリビュートを持ちます。optional は一部のクライアントのみ提供されます。

  • annealing_time_ms : (代表的な) 実行時間をミリ秒単位で取得します。

  • execution_parameters (optional) : 実行時パラメータを取得します。

  • timing : 実行時間オブジェクトを取得します。

  • solutions : 実行結果のリストを取得します。各要素は以下のアトリビュートを持ちます。

    • energy : エネルギー値 (物理模型の評価値) を取得します。

    • values : 物理変数の値をリストで取得します。

    • frequency : 同一の解の個数を取得します。