Client

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

参考

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

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

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

注釈

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

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

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

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

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

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

参考

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

Fixstars

Amplify AE クライアントクラス

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

名称

Fixstars Amplify Annealing Engine

クライアントクラス

FixstarsClient

実行パラメータクラス

FixstarsClientParameters

実行結果クラス

FixstarsClientResult

実行時間クラス

FixstarsClientResultTiming

物理グラフ

全結合

物理ビット数

262144

論理ビット数 (全結合)

131072

API URL (デフォルト)

https://optigan.fixstars.com/

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

Name

Description

num_bits

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

parameters

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

version

実行マシンのバージョン文字列を取得します

url

API URL を取得・設定します

proxy

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

token

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

write_request_data

送信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です

write_response_data

受信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です

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

$ pip install amplify[extra]

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

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

名称

D-Wave Sampler (Ocean SDK)

クライアントクラス

DWaveSamplerClient

実行パラメータクラス

DWaveSamplerClientQuantumSolverParametersOcean

実行結果クラス

DWaveSamplerClientResult

実行時間クラス

DWaveSamplerClientResultTiming

物理グラフ

ゼファーグラフ (Advantage2_prototype1.1), ペガサスグラフ (Advantage_system4.1, Advantage_system6.3)

物理ビット数

563 (Advantage2_prototype1.1), 5627 (Advantage_system4.1), 5614 (Advantage_system6.3)

論理ビット数 (全結合)

52 (Advantage2_prototype1.1), 177 (Advantage_system4.1), 175 (Advantage_system6.3)

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:

Advantage2_prototype1.1, "Advantage_system4.1", "Advantage_system6.3"

Leap Hybrid Solver:

"hybrid_binary_quadratic_model_version2", "hybrid_binary_quadratic_model_version2p"

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"
# 実行するソルバーを指定 (使用可能ソルバーは solver_names で取得)
client.solver = "Advantage_system4.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
['Advantage_system4.1', 'Advantage_system6.3', 'Advantage2_prototype1.1']

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

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

client = LeapHybridSamplerClient()
client.token = "XXXX-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
# 実行するソルバーを指定 (使用可能ソルバーは solver_names で取得)
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 クライアントクラス

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

名称

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/

名称

FujitsuDA4Solver

クライアントクラス

FujitsuDA4SolverClient

実行パラメータクラス

FujitsuDA4SolverClientParameters

実行結果クラス

FujitsuDA4SolverClientResult

実行時間クラス

FujitsuDA4SolverClientResultTiming

物理グラフ

全結合

物理ビット数

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

FujitsuDA4Solver:

FujitsuDA4SolverClientParameters

url

API URL を取得・設定します

proxy

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

token

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

write_request_data

送信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です

write_response_data

受信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です

version

実行マシンのAPIバージョン文字列を取得します

set_penalty_binary_polynomial

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

set_one_way_one_hot_groups

FujitsuDA3SolverClient / FujitsuDA4SolverClient において 1 次元の One-Hot 制約の情報を使用するかを指定します。デフォルトは False です

set_two_way_one_hot_groups

FujitsuDA3SolverClient / FujitsuDA4SolverClient において縦横方向の One-Hot 制約の情報を使用するかを指定します。デフォルトは False です

set_inequalities

FujitsuDA3SolverClient / FujitsuDA4SolverClient において線形不等式制約を使用するかを指定します。デフォルトは True です

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 を参照してください。

FujitsuDA4SolverClient

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

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

client = FujitsuDA4SolverClient()
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.]']

注釈

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

Toshiba

Toshiba クライアントクラス

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

名称

Toshiba SQBM+

クライアントクラス

ToshibaClient

実行パラメータクラス

ToshibaClientParameters

実行結果クラス

ToshibaClientResult

実行時間クラス

ToshibaClientResultTiming

物理グラフ

全結合

物理ビット数

100000

論理ビット数 (全結合)

100000

API URL (デフォルト)

N/A

名称

Toshiba SQBM+ (version 2.0.0 ~)

クライアントクラス

ToshibaSQBM2Client

実行パラメータクラス

ToshibaSQBM2ClientParameters

実行結果クラス

ToshibaSQBM2ClientResult

実行時間クラス

ToshibaSQBM2ClientResultTiming

物理グラフ

全結合

物理ビット数

100000

論理ビット数 (全結合)

100000

API URL (デフォルト)

N/A

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

Name

Description

num_bits

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

parameters

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

url

API URL を取得・設定します

proxy

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

token

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

write_request_data

送信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です

write_response_data

受信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です

version

実行マシンのバージョン文字列を取得します

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

ToshibaSQBM2Client でのみ使用可能なアトリビュートは以下の通りです。

Name

Description

request_data_type

送信データのファイルフォーマットを 'HDF5''MatrixMarket' のどちらかで指定します。デフォルトは 'HDF5' です。

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.loops = 0 # not specify the number of loops (only timeout will be used)
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 を参照ください。

ToshibaSQBM2Client

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

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

client = ToshibaSQBM2Client()
client.url = "http://xxx.xxx.xxx.xxx:xxxx/"
client.parameters.loops = 0 # not specify the number of loops (only timeout will be used)
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.]']

Hitachi

Hitachi クライアントクラス

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

名称

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 を取得します

url

API URL を取得・設定します

proxy

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

token

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

write_request_data

送信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です

write_response_data

受信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です

version

実行マシンのAPIバージョン文字列を取得します

Hitachi クライアントの実行例

HitachiClient

from amplify import BinarySymbolGenerator, 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 を参照ください。

Hiroshima Univ. / NTT DATA

ABS クライアントクラス

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

名称

ABS QUBO Solver

クライアントクラス

ABSClient

実行パラメータクラス

ABSClientParameters

実行結果クラス

ABSClientResult

実行時間クラス

ABSClientResultTiming

物理グラフ

全結合

物理ビット数

32768

論理ビット数 (全結合)

32768

API URL (デフォルト)

https://qubosolver.cs.hiroshima-u.ac.jp

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

Name

Description

num_bits

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

parameters

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

url

API URL を取得・設定します

proxy

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

user_name

ユーザIDを取得・設定します

password

パスワードを取得・設定します

write_request_data

送信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です

write_response_data

受信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です

version

実行マシンのAPIバージョン文字列を取得します

ABS クライアントの実行例

ABSClient

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

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

client = ABSClient()
client.user_name = "xxxx"
client.password = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
client.parameters.timeout = 10
client.parameters.word_size = 16
client.parameters.arithmetic_precision = 32

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.]']

注釈

ABS QUBO Solver の詳細については https://qubo.cs.hiroshima-u.ac.jp/solver-trial を参照ください。

Gurobi

注釈

Gurobi Client を使用するには、お使いのコンピュータに Gurobi のソフトウェアおよびライセンスが適切にインストールされていることが必要です。

Gurobi クライアントクラス

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

名称

Gurobi Optimizer

クライアントクラス

GurobiClient

実行パラメータクラス

GurobiClientParameters

実行結果クラス

GurobiClientResult

実行時間クラス

GurobiClientResultTiming

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

Name

Description

num_bits

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

parameters

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

gurobi_path

Gurobi の動的ライブラリへのパスを指定します

write_model

Gurobi に入力したモデルデータを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です。保存形式 (拡張子) として .mps, .rew, .lp, .rlp が有効です。また、LP では双対問題を出力に .dua, .dlp が有効です

write_solution

Gurobi の出力した解を保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です。保存形式 (拡張子) として .sol.json が有効です

version

Gurobi の動的ライブラリのバージョン文字列を取得します

Gurobi クライアントの実行例

GurobiClient

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

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

client = GurobiClient()
client.parameters.time_limit = 10

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.]']

注釈

Gurobi Optimizer の詳細については ドキュメント を参照してください。

IBM Qiskit

Qiskit を用いて IBM Quantum またはそのシミュレータによる QAOA を実行します。

注釈

Qiskit Client で実機の量子コンピュータを使用するには、事前に IBM Quantum への登録とトークンの取得が必要になります。

注釈

Qiskit クライアントを使用するには、amplify.qaoa パッケージのインストールが必要です。次のように Amplify SDK をインストールすると依存パッケージも同時にインストールされます。

$ pip install amplify[extra]

Qiskit クライアントクラス

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

名称

Qiskit Classes

クライアントクラス

QiskitClient

実行パラメータクラス

QiskitClientParameters

実行結果クラス

QiskitClientResult

実行時間クラス

QiskitClientResultTiming

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

Name

Description

num_bits

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

device

QAOA を実行する環境 ("CPU", "GPU", "QPU") を取得・設定します

token

IBM Quantum に接続するためのAPIトークンを取得・設定します

backend

QAOA を実行する実機名 (もしくはシミュレーションのメソッド名) を取得・設定します

parameters

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

version

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

注釈

GPU を使用したシミュレーションを実行するには、次のように qiskit-aer パッケージをアンインストールして qiskit-aer-gpu パッケージで置き換える必要があります。

$ pip uninstall qiskit-aer
$ pip install qiskit-aer-gpu

QiskitClient クライアントの実行例

実機を用いた QAOA の実行

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

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

client = QiskitClient()
client.device = "QPU"  # 実機を用いる場合は "QPU" を指定
client.token = "xxxxxxxx"  # 実機を用いる場合は API トークンの設定が必要
# 実行するマシン名を指定
# 指定しない場合は実行に必要ビット数を満たす "least busy" なマシンが自動選択される
client.backend = "ibmq_bogota"

# QAOA のパラメータの設定
client.parameters.reps = 10     # 回路の深さ
client.parameters.shots = 1024  # 実行サンプル数
client.parameters.optimizer = "COBYLA" # チューニングに使用する古典最適化アルゴリズム

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)}, frequency = {s.frequency}" for s in result]
['energy = -1.0, q = [1. 0. 1.], frequency = 216', 'energy = 0.0, q = [0. 0. 1.], frequency = 56', 'energy = 0.0, q = [0. 1. 1.], frequency = 188', 'energy = 0.0, q = [1. 0. 0.], frequency = 235', 'energy = 1.0, q = [0. 1. 0.], frequency = 199', 'energy = 1.0, q = [1. 1. 1.], frequency = 41', 'energy = 1.0, q = [0. 0. 0.], frequency = 62', 'energy = 2.0, q = [1. 1. 0.], frequency = 27']

注釈

QAOA パラメータの詳細については QiskitClientParameters を参照してください。

理想的な量子回路シミュレータによる実行

from amplify import BinaryPoly, BinarySymbolGenerator, Solver
from amplify.client import QiskitClient

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

client = QiskitClient()
client.device = "CPU" # シミュレーションに使用するデバイスとして "CPU" または "GPU" を指定
client.backend = "statevector" # シミュレータのメソッドを指定

# QAOA のパラメータの設定
client.parameters.reps = 10     # 回路の深さ
client.parameters.shots = 1024  # 実行サンプル数
client.parameters.optimizer = "COBYLA" # チューニングに使用する古典最適化アルゴリズム

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)}, frequency = {s.frequency}" for s in result]
['energy = -1.0, q = [1. 0. 1.], frequency = 250', 'energy = 0.0, q = [0. 1. 1.], frequency = 246', 'energy = 0.0, q = [1. 0. 0.], frequency = 250', 'energy = 1.0, q = [0. 1. 0.], frequency = 278']

注釈

シミュレータのメソッド名については Qiskit のドキュメント を参照してください。

実機を模したシミュレータによる実行

from amplify import BinaryPoly, BinarySymbolGenerator, Solver
from amplify.client import QiskitClient

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

client = QiskitClient()
client.device = "CPU" # シミュレーションに使用するデバイスとして "CPU" または "GPU" を指定
client.token = "xxxxxxxx"  # 実機を模す場合は API トークンの設定が必要
# シミュレーション対象のマシン名を指定
# 指定しない場合は実行に必要ビット数を満たす "least busy" なマシンが自動選択される
client.backend = "ibmq_bogota"

# QAOA のパラメータの設定
client.parameters.reps = 10     # 回路の深さ
client.parameters.shots = 1024  # 実行サンプル数
client.parameters.optimizer = "COBYLA" # チューニングに使用する古典最適化アルゴリズム

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)}, frequency = {s.frequency}" for s in result]
['energy = -1.0, q = [1. 0. 1.], frequency = 250', 'energy = 0.0, q = [0. 1. 1.], frequency = 246', 'energy = 0.0, q = [1. 0. 0.], frequency = 250', 'energy = 1.0, q = [0. 1. 0.], frequency = 278']

Qulacs

量子回路シミュレータ Qulacs を用いて QAOA を実行します。

注釈

Qulacs クライアントを使用するには、amplify.qaoa パッケージのインストールが必要です。次のように Amplify SDK をインストールすると依存パッケージも同時にインストールされます。

$ pip install amplify[extra]

Qulacs クライアントクラス

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

名称

Qulacs Classes

クライアントクラス

QulacsClient

実行パラメータクラス

QulacsClientParameters

実行結果クラス

QulacsClientResult

実行時間クラス

QulacsClientResultTiming

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

Name

Description

num_bits

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

parameters

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

version

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

QulacsClient クライアントの実行例

QulacsClient

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

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

client = QulacsClient()

# QAOA のパラメータの設定
client.parameters.reps = 10     # 回路の深さ
client.parameters.shots = 1024  # 実行サンプル数
client.parameters.optimizer = "COBYLA" # チューニングに使用する古典最適化アルゴリズム

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)}, frequency = {s.frequency}" for s in result]
['energy = -1.0, q = [1. 0. 1.], frequency = 0', 'energy = 0.0, q = [0. 0. 1.], frequency = 0', 'energy = 0.0, q = [0. 1. 1.], frequency = 30', 'energy = 0.0, q = [1. 0. 0.], frequency = 0', 'energy = 1.0, q = [0. 0. 0.], frequency = 2', 'energy = 1.0, q = [0. 1. 0.], frequency = 988', 'energy = 1.0, q = [1. 1. 1.], frequency = 0', 'energy = 2.0, q = [1. 1. 0.], frequency = 2']

NEC

NEC クライアントクラス

詳細についてはユーザーズマニュアルの各項目を参照してください。

名称

NEC Vector Annealing Service

クライアントクラス

NECClient

実行パラメータクラス

NECClientParameters

実行結果クラス

NECClientResult

実行時間クラス

NECClientResultTiming

物理グラフ

全結合

物理ビット数

300000

論理ビット数 (全結合)

300000

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

Name

Description

num_bits

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

parameters

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

version

実行マシンのバージョン文字列を取得します

proxy

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

token

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

set_onehot

VA の onehot 制約条件のパラメータを設定するかどうかを指定します。デフォルトは False です

set_andzero

VA の andzero 制約条件のパラメータを設定するかどうかを指定します。デフォルトは False です

set_orone

VA の orone 制約条件のパラメータを設定するかどうかを指定します。デフォルトは False です

set_maxone

VA の maxone 制約条件のパラメータを設定するかどうかを指定します。デフォルトは False です

set_minmaxone

VA の minmaxone 制約条件のパラメータを設定するかどうかを指定します。デフォルトは False です

write_request_data

送信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です

write_response_data

受信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です

NEC クライアントの実行例

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

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

client = NECClient()
client.token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
client.parameters.num_sweeps = 500

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.]']

物理模型ソルバー

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

注釈

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

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

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

注釈

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

注釈

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

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

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

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

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

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

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

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

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