Client
======
.. role:: raw-html(raw)
:format: html
このセクションではイジングマシンのクライアントについて説明します。
.. seealso::
クライアントクラスの具体的な使用方法は :doc:`solver` を参照してください。
クライアントクラスの概要
------------------------
クライアントクラスは各イジングマシンを使用する際のパラメータ取得と設定、マシンの実行を行うインターフェースを提供します。通常は、クライアントクラスのオブジェクトをソルバークラス :class:`~amplify.Solver` のドライバとして与えることで、クライアントに対応したマシンを実行する「論理模型」のソルバーとして利用されます。詳細と実行例については、:doc:`solver` または下記の :ref:`各クライアントの実行例 ` を参照してください。
.. note::
クライアントクラス自体も「物理模型」に対するソルバーとして利用できますが(詳細については :ref:`物理模型ソルバー ` を参照)、ソルバークラスを経由した使用を推奨します。
クライアントクラスで設定できるパラメータには二種類あります。
* イジングマシンのアクセス情報や実行に対する設定
クライアントクラスのアトリビュートで提供されます。アクセス先の URL や API トークンを設定します。一部のクライアントでは通信データの圧縮設定や送信データの構築方法に関する設定を持ちます。
* イジングマシンの実行パラメータの設定
クライアントクラスの :attr:`~amplify.client.FixstarsClient.parameters` アトリビュートで提供されます。マシンの API 仕様に準じた実行パラメータ設定を行います。
.. seealso::
クライアントクラスとその周辺クラスの詳細についてはクライアントリファレンス :doc:`reference/client` を参照してください。
.. _client-fixstars:
Fixstars
--------
Amplify AE クライアントクラス
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
詳細については :ref:`Fixstars client reference ` の各項目を参照してください。
+-----------------------+-----------------------------------------------------+
| 名称 | Fixstars Amplify Annealing Engine |
+=======================+=====================================================+
| クライアントクラス | :class:`~amplify.client.FixstarsClient` |
+-----------------------+-----------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.FixstarsClientParameters` |
+-----------------------+-----------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.FixstarsClientResult` |
+-----------------------+-----------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.FixstarsClientResultTiming` |
+-----------------------+-----------------------------------------------------+
| 物理グラフ | 全結合 |
+-----------------------+-----------------------------------------------------+
| 物理ビット数 | 262144 |
+-----------------------+-----------------------------------------------------+
| 論理ビット数 (全結合) | 131072 |
+-----------------------+-----------------------------------------------------+
| API URL (デフォルト) | https://optigan.fixstars.com/ |
+-----------------------+-----------------------------------------------------+
Amplify AE クライアントアトリビュート
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. list-table::
:widths: 15 30
:header-rows: 1
* - Name
- Description
* - :attr:`~amplify.client.FixstarsClient.num_bits`
- 実行可能な変数の最大値を取得します
* - :attr:`~amplify.client.FixstarsClient.parameters`
- 実行パラメータ :class:`~amplify.client.FixstarsClientParameters` を取得します
* - :attr:`~amplify.client.FixstarsClient.version`
- 実行マシンのバージョン文字列を取得します
* - :attr:`~amplify.client.FixstarsClient.url`
- API URL を取得・設定します
* - :attr:`~amplify.client.FixstarsClient.proxy`
- プロキシサーバのアドレスを取得・設定します
* - :attr:`~amplify.client.FixstarsClient.token`
- APIトークンを取得・設定します
* - :attr:`~amplify.client.FixstarsClient.write_request_data`
- 送信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です
* - :attr:`~amplify.client.FixstarsClient.write_response_data`
- 受信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です
* - :attr:`~amplify.client.FixstarsClient.compression`
- 送信データを圧縮するかを指定します。デフォルトは ``True`` です
Amplify AE クライアントの実行例
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
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
------
.. note::
D-Wave Sampler 及び Leap Hybrid Solver を使用するには、`dwave-system `_ パッケージのインストールが必要です。次のように Amplify SDK をインストールすると依存パッケージも同時にインストールされます。
.. code-block:: bash
$ pip install amplify[extra]
D-Wave クライアントクラス
^^^^^^^^^^^^^^^^^^^^^^^^^
詳細については :ref:`D-Wave client reference ` の各項目を参照してください。
+-----------------------+-----------------------------------------------------------------------------------------------------------+
| 名称 | D-Wave Sampler (Ocean SDK) |
+=======================+===========================================================================================================+
| クライアントクラス | :class:`~amplify.client.ocean.DWaveSamplerClient` |
+-----------------------+-----------------------------------------------------------------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.ocean.DWaveSamplerClientQuantumSolverParametersOcean` |
+-----------------------+-----------------------------------------------------------------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.ocean.DWaveSamplerClientResult` |
+-----------------------+-----------------------------------------------------------------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.ocean.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 |
+-----------------------+-----------------------------------------------------------------------------------------------------------+
.. _ゼファーグラフ: https://docs.ocean.dwavesys.com/en/stable/concepts/topology.html#zephyr
.. _ペガサスグラフ: https://docs.ocean.dwavesys.com/en/stable/concepts/topology.html#pegasus
.. _キメラグラフ: https://docs.ocean.dwavesys.com/en/stable/concepts/topology.html#chimera
+-----------------------+----------------------------------------------------------------------------------+
| 名称 | Leap Hybrid Solver (Ocean SDK) |
+=======================+==================================================================================+
| クライアントクラス | :class:`~amplify.client.ocean.LeapHybridSamplerClient` |
+-----------------------+----------------------------------------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.ocean.LeapHybridSamplerClientLeapHybridSolverParameters` |
+-----------------------+----------------------------------------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.ocean.LeapHybridSamplerClientResult` |
+-----------------------+----------------------------------------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.ocean.LeapHybridSamplerClientResultTiming` |
+-----------------------+----------------------------------------------------------------------------------+
| 物理グラフ | 全結合 |
+-----------------------+----------------------------------------------------------------------------------+
| 物理ビット数 | 1000000 |
+-----------------------+----------------------------------------------------------------------------------+
| 論理ビット数 (全結合) | 1000000 |
+-----------------------+----------------------------------------------------------------------------------+
| API URL (デフォルト) | https://cloud.dwavesys.com/sapi |
+-----------------------+----------------------------------------------------------------------------------+
D-Wave クライアントアトリビュート
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. **D-Wave Sampler クライアント**
.. list-table::
:widths: 15 30
:header-rows: 1
* - Name
- Description
* - :attr:`num_bits`
- 実行可能な変数の最大値を取得します :raw-html:`
` :raw-html:`
`
:D-Wave Sampler: N/A
:Leap Hybrid Solver: 1000000
* - :attr:`parameters`
- 実行パラメータを取得します :raw-html:`
` :raw-html:`
`
:D-Wave Sampler: :class:`~amplify.client.ocean.DWaveSamplerClientQuantumSolverParametersOcean`
:Leap Hybrid Solver: :class:`~amplify.client.ocean.LeapHybridSamplerClientLeapHybridSolverParameters`
* - :attr:`proxy`
- プロキシサーバのアドレスを取得・設定します
* - :attr:`solver`
- 実行するソルバー名を取得・設定します :raw-html:`
` :raw-html:`
`
: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"``
* - :attr:`solver_names`
- 使用可能なソルバー名のリストを取得します
* - :attr:`token`
- APIトークンを取得・設定します
* - :attr:`url`
- API URL を取得・設定します
* - :attr:`version`
- 実行マシン名とそのバージョン文字列を取得します
D-Wave クライアントの実行例
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. _client-dwave_sampler:
**D-Wave Sampler クライアント**
.. code-block:: python
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 クライアント**
.. code-block:: python
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.]']
:obj:`~amplify.client.DwaveSamplerClient` と同様に、使用可能なソルバーのリストは以下のように取得できます。
>>> client.solver_names
['hybrid_binary_quadratic_model_version2']
.. _client-fujitsu:
Fujitsu
-------
Fujitsu クライアントクラス
^^^^^^^^^^^^^^^^^^^^^^^^^^
詳細については :ref:`Fujitsu client reference ` の各項目を参照してください。
+-----------------------+------------------------------------------------------------+
| 名称 | FujitsuDASolver |
+=======================+============================================================+
| クライアントクラス | :class:`~amplify.client.FujitsuDASolverClient` |
+-----------------------+------------------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.FujitsuDASolverClientParameters` |
+-----------------------+------------------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.FujitsuDASolverClientResult` |
+-----------------------+------------------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.FujitsuDASolverClientResultTiming` |
+-----------------------+------------------------------------------------------------+
| 物理グラフ | 全結合 |
+-----------------------+------------------------------------------------------------+
| 物理ビット数 | 1024 |
+-----------------------+------------------------------------------------------------+
| 論理ビット数 (全結合) | 1024 |
+-----------------------+------------------------------------------------------------+
| API URL (デフォルト) | https://api.aispf.global.fujitsu.com/da/ |
+-----------------------+------------------------------------------------------------+
+-----------------------+------------------------------------------------------------------+
| 名称 | FujitsuDASolver (Expert Mode) |
+=======================+==================================================================+
| クライアントクラス | :class:`~amplify.client.FujitsuDASolverExpertClient` |
+-----------------------+------------------------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.FujitsuDASolverExpertClientParameters` |
+-----------------------+------------------------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.FujitsuDASolverExpertClientResult` |
+-----------------------+------------------------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.FujitsuDASolverExpertClientResultTiming` |
+-----------------------+------------------------------------------------------------------+
| 物理グラフ | 全結合 |
+-----------------------+------------------------------------------------------------------+
| 物理ビット数 | 1024 |
+-----------------------+------------------------------------------------------------------+
| 論理ビット数 (全結合) | 1024 |
+-----------------------+------------------------------------------------------------------+
| API URL (デフォルト) | https://api.aispf.global.fujitsu.com/da/ |
+-----------------------+------------------------------------------------------------------+
+-----------------------+--------------------------------------------------------------+
| 名称 | FujitsuDAPTSolver |
+=======================+==============================================================+
| クライアントクラス | :class:`~amplify.client.FujitsuDAPTSolverClient` |
+-----------------------+--------------------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.FujitsuDAPTSolverClientParameters` |
+-----------------------+--------------------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.FujitsuDAPTSolverClientResult` |
+-----------------------+--------------------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.FujitsuDAPTSolverClientResultTiming` |
+-----------------------+--------------------------------------------------------------+
| 物理グラフ | 全結合 |
+-----------------------+--------------------------------------------------------------+
| 物理ビット数 | 1024 |
+-----------------------+--------------------------------------------------------------+
| 論理ビット数 (全結合) | 1024 |
+-----------------------+--------------------------------------------------------------+
| API URL (デフォルト) | https://api.aispf.global.fujitsu.com/da/ |
+-----------------------+--------------------------------------------------------------+
+-----------------------+---------------------------------------------------------------------+
| 名称 | FujitsuDAMixedModeSolver |
+=======================+=====================================================================+
| クライアントクラス | :class:`~amplify.client.FujitsuDAMixedModeSolverClient` |
+-----------------------+---------------------------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.FujitsuDAMixedModeSolverClientParameters` |
+-----------------------+---------------------------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.FujitsuDAMixedModeSolverClientResult` |
+-----------------------+---------------------------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.FujitsuDAMixedModeSolverClientResultTiming` |
+-----------------------+---------------------------------------------------------------------+
| 物理グラフ | 全結合 |
+-----------------------+---------------------------------------------------------------------+
| 物理ビット数 | 1024 |
+-----------------------+---------------------------------------------------------------------+
| 論理ビット数 (全結合) | 1024 |
+-----------------------+---------------------------------------------------------------------+
| API URL (デフォルト) | https://api.aispf.global.fujitsu.com/da/ |
+-----------------------+---------------------------------------------------------------------+
+-----------------------+-------------------------------------------------------------+
| 名称 | FujitsuDA2Solver |
+=======================+=============================================================+
| クライアントクラス | :class:`~amplify.client.FujitsuDA2SolverClient` |
+-----------------------+-------------------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.FujitsuDA2SolverClientParameters` |
+-----------------------+-------------------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.FujitsuDA2SolverClientResult` |
+-----------------------+-------------------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.FujitsuDA2SolverClientResultTiming` |
+-----------------------+-------------------------------------------------------------+
| 物理グラフ | 全結合 |
+-----------------------+-------------------------------------------------------------+
| 物理ビット数 | 8192 |
+-----------------------+-------------------------------------------------------------+
| 論理ビット数 (全結合) | 8192 |
+-----------------------+-------------------------------------------------------------+
| API URL (デフォルト) | https://api.aispf.global.fujitsu.com/da/ |
+-----------------------+-------------------------------------------------------------+
+-----------------------+-------------------------------------------------------------------+
| 名称 | FujitsuDA2Solver (Expert Mode) |
+=======================+===================================================================+
| クライアントクラス | :class:`~amplify.client.FujitsuDA2SolverExpertClient` |
+-----------------------+-------------------------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.FujitsuDA2SolverExpertClientParameters` |
+-----------------------+-------------------------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.FujitsuDA2SolverExpertClientResult` |
+-----------------------+-------------------------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.FujitsuDA2SolverExpertClientResultTiming` |
+-----------------------+-------------------------------------------------------------------+
| 物理グラフ | 全結合 |
+-----------------------+-------------------------------------------------------------------+
| 物理ビット数 | 8192 |
+-----------------------+-------------------------------------------------------------------+
| 論理ビット数 (全結合) | 8192 |
+-----------------------+-------------------------------------------------------------------+
| API URL (デフォルト) | https://api.aispf.global.fujitsu.com/da/ |
+-----------------------+-------------------------------------------------------------------+
+-----------------------+---------------------------------------------------------------+
| 名称 | FujitsuDA2PTSolver |
+=======================+===============================================================+
| クライアントクラス | :class:`~amplify.client.FujitsuDA2PTSolverClient` |
+-----------------------+---------------------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.FujitsuDA2PTSolverClientParameters` |
+-----------------------+---------------------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.FujitsuDA2PTSolverClientResult` |
+-----------------------+---------------------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.FujitsuDA2PTSolverClientResultTiming` |
+-----------------------+---------------------------------------------------------------+
| 物理グラフ | 全結合 |
+-----------------------+---------------------------------------------------------------+
| 物理ビット数 | 8192 |
+-----------------------+---------------------------------------------------------------+
| 論理ビット数 (全結合) | 8192 |
+-----------------------+---------------------------------------------------------------+
| API URL (デフォルト) | https://api.aispf.global.fujitsu.com/da/ |
+-----------------------+---------------------------------------------------------------+
+-----------------------+----------------------------------------------------------------------+
| 名称 | FujitsuDA2MixedModeSolver |
+=======================+======================================================================+
| クライアントクラス | :class:`~amplify.client.FujitsuDA2MixedModeSolverClient` |
+-----------------------+----------------------------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.FujitsuDA2MixedModeSolverClientParameters` |
+-----------------------+----------------------------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.FujitsuDA2MixedModeSolverClientResult` |
+-----------------------+----------------------------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.FujitsuDA2MixedModeSolverClientResultTiming` |
+-----------------------+----------------------------------------------------------------------+
| 物理グラフ | 全結合 |
+-----------------------+----------------------------------------------------------------------+
| 物理ビット数 | 8192 |
+-----------------------+----------------------------------------------------------------------+
| 論理ビット数 (全結合) | 8192 |
+-----------------------+----------------------------------------------------------------------+
| API URL (デフォルト) | https://api.aispf.global.fujitsu.com/da/ |
+-----------------------+----------------------------------------------------------------------+
+-----------------------+-------------------------------------------------------------+
| 名称 | FujitsuDA3Solver |
+=======================+=============================================================+
| クライアントクラス | :class:`~amplify.client.FujitsuDA3SolverClient` |
+-----------------------+-------------------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.FujitsuDA3SolverClientParameters` |
+-----------------------+-------------------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.FujitsuDA3SolverClientResult` |
+-----------------------+-------------------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.FujitsuDA3SolverClientResultTiming` |
+-----------------------+-------------------------------------------------------------+
| 物理グラフ | 全結合 |
+-----------------------+-------------------------------------------------------------+
| 物理ビット数 | 100000 |
+-----------------------+-------------------------------------------------------------+
| 論理ビット数 (全結合) | 100000 |
+-----------------------+-------------------------------------------------------------+
| API URL (デフォルト) | https://api.aispf.global.fujitsu.com/da/ |
+-----------------------+-------------------------------------------------------------+
+-----------------------+-------------------------------------------------------------+
| 名称 | FujitsuDA4Solver |
+=======================+=============================================================+
| クライアントクラス | :class:`~amplify.client.FujitsuDA4SolverClient` |
+-----------------------+-------------------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.FujitsuDA4SolverClientParameters` |
+-----------------------+-------------------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.FujitsuDA4SolverClientResult` |
+-----------------------+-------------------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.FujitsuDA4SolverClientResultTiming` |
+-----------------------+-------------------------------------------------------------+
| 物理グラフ | 全結合 |
+-----------------------+-------------------------------------------------------------+
| 物理ビット数 | 100000 |
+-----------------------+-------------------------------------------------------------+
| 論理ビット数 (全結合) | 100000 |
+-----------------------+-------------------------------------------------------------+
| API URL (デフォルト) | https://api.aispf.global.fujitsu.com/da/ |
+-----------------------+-------------------------------------------------------------+
Fujitsu クライアントアトリビュート
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. list-table::
:widths: 15 30
:header-rows: 1
* - Name
- Description
* - :attr:`num_bits`
- 実行可能な変数の最大値を取得します
* - :attr:`parameters`
- 実行パラメータ を取得します :raw-html:`
` :raw-html:`
`
:FujitsuDASolver: :class:`~amplify.client.FujitsuDASolverClientParameters`
:FujitsuDASolver (Expert Mode): :class:`~amplify.client.FujitsuDASolverExpertClientParameters`
:FujitsuDAPTSolver: :class:`~amplify.client.FujitsuDAPTSolverClientParameters`
:FujitsuDAMixedModeSolver: :class:`~amplify.client.FujitsuDAMixedModeSolverClientParameters`
:FujitsuDA2Solver: :class:`~amplify.client.FujitsuDA2SolverClientParameters`
:FujitsuDA2Solver (Expert Mode): :class:`~amplify.client.FujitsuDA2SolverExpertClientParameters`
:FujitsuDA2PTSolver: :class:`~amplify.client.FujitsuDA2PTSolverClientParameters`
:FujitsuDA2MixedModeSolver: :class:`~amplify.client.FujitsuDA2MixedModeSolverClientParameters`
:FujitsuDA3Solver: :class:`~amplify.client.FujitsuDA3SolverClientParameters`
:FujitsuDA4Solver: :class:`~amplify.client.FujitsuDA4SolverClientParameters`
* - :attr:`url`
- API URL を取得・設定します
* - :attr:`proxy`
- プロキシサーバのアドレスを取得・設定します
* - :attr:`token`
- APIトークンを取得・設定します
* - :attr:`~amplify.client.FujitsuDA3SolverClient.write_request_data`
- 送信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です
* - :attr:`~amplify.client.FujitsuDA3SolverClient.write_response_data`
- 受信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です
* - :attr:`version`
- 実行マシンのAPIバージョン文字列を取得します
* - :attr:`~amplify.client.FujitsuDA3SolverClient.set_penalty_binary_polynomial`
- :class:`~amplify.client.FujitsuDA3SolverClient` / :class:`~amplify.client.FujitsuDA4SolverClient` においてペナルティ二次多項式を使用するかを指定します。デフォルトは ``True`` です
* - :attr:`~amplify.client.FujitsuDA3SolverClient.set_one_way_one_hot_groups`
- :class:`~amplify.client.FujitsuDA3SolverClient` / :class:`~amplify.client.FujitsuDA4SolverClient` において 1 次元の One-Hot 制約の情報を使用するかを指定します。デフォルトは ``False`` です
* - :attr:`~amplify.client.FujitsuDA3SolverClient.set_two_way_one_hot_groups`
- :class:`~amplify.client.FujitsuDA3SolverClient` / :class:`~amplify.client.FujitsuDA4SolverClient` において縦横方向の One-Hot 制約の情報を使用するかを指定します。デフォルトは ``False`` です
* - :attr:`~amplify.client.FujitsuDA3SolverClient.set_inequalities`
- :class:`~amplify.client.FujitsuDA3SolverClient` / :class:`~amplify.client.FujitsuDA4SolverClient` において線形不等式制約を使用するかを指定します。デフォルトは ``True`` です
Fujitsu クライアントの実行例
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**FujitsuDA2PTSolverClient**
.. code-block:: python
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.]']
.. note::
FujitsuDA と FujitsuDA2 の各種クライアントのパラメータの詳細については、 `Digital Annealer API リファレンス (QUBO API V2) `_ の Schemas の該当箇所を参照してください。
.. _client-fujitsu-da3:
**FujitsuDA3SolverClient**
.. code-block:: python
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.]']
.. note::
:class:`~amplify.client.FujitsuDA3SolverClient` のパラメータの詳細については、 `Digital Annealer API リファレンス (QUBO API V3) `_ の FujitsuDA3Solver Schemas を参照してください。
.. _client-fujitsu-da4:
**FujitsuDA4SolverClient**
.. code-block:: python
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.]']
.. note::
:class:`~amplify.client.FujitsuDA4SolverClient` のパラメータの詳細については、 `Digital Annealer API リファレンス (QUBO API V4) `_ の FujitsuDA4Solver Schemas を参照してください。
.. _client-toshiba:
Toshiba
-------
Toshiba クライアントクラス
^^^^^^^^^^^^^^^^^^^^^^^^^^
詳細については :ref:`Toshiba client reference ` の各項目を参照してください。
+-----------------------+----------------------------------------------------+
| 名称 | Toshiba SQBM+ |
+=======================+====================================================+
| クライアントクラス | :class:`~amplify.client.ToshibaClient` |
+-----------------------+----------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.ToshibaClientParameters` |
+-----------------------+----------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.ToshibaClientResult` |
+-----------------------+----------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.ToshibaClientResultTiming` |
+-----------------------+----------------------------------------------------+
| 物理グラフ | 全結合 |
+-----------------------+----------------------------------------------------+
| 物理ビット数 | 100000 |
+-----------------------+----------------------------------------------------+
| 論理ビット数 (全結合) | 100000 |
+-----------------------+----------------------------------------------------+
| API URL (デフォルト) | N/A |
+-----------------------+----------------------------------------------------+
+-----------------------+---------------------------------------------------------+
| 名称 | Toshiba SQBM+ (version 2.0.0 ~) |
+=======================+=========================================================+
| クライアントクラス | :class:`~amplify.client.ToshibaSQBM2Client` |
+-----------------------+---------------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.ToshibaSQBM2ClientParameters` |
+-----------------------+---------------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.ToshibaSQBM2ClientResult` |
+-----------------------+---------------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.ToshibaSQBM2ClientResultTiming` |
+-----------------------+---------------------------------------------------------+
| 物理グラフ | 全結合 |
+-----------------------+---------------------------------------------------------+
| 物理ビット数 | 100000 |
+-----------------------+---------------------------------------------------------+
| 論理ビット数 (全結合) | 100000 |
+-----------------------+---------------------------------------------------------+
| API URL (デフォルト) | N/A |
+-----------------------+---------------------------------------------------------+
Toshiba クライアントアトリビュート
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. list-table::
:widths: 15 30
:header-rows: 1
* - Name
- Description
* - :attr:`~amplify.client.ToshibaClient.num_bits`
- 実行可能な変数の最大値を取得します
* - :attr:`~amplify.client.ToshibaClient.parameters`
- 実行パラメータ を取得します
* - :attr:`~amplify.client.ToshibaClient.url`
- API URL を取得・設定します
* - :attr:`~amplify.client.ToshibaClient.proxy`
- プロキシサーバのアドレスを取得・設定します
* - :attr:`~amplify.client.ToshibaClient.token`
- APIトークンを取得・設定します
* - :attr:`~amplify.client.ToshibaClient.write_request_data`
- 送信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です
* - :attr:`~amplify.client.ToshibaClient.write_response_data`
- 受信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です
* - :attr:`~amplify.client.ToshibaClient.version`
- 実行マシンのバージョン文字列を取得します
ToshibaSQBM2Client クライアントアトリビュート
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
ToshibaSQBM2Client でのみ使用可能なアトリビュートは以下の通りです。
.. list-table::
:widths: 15 30
:header-rows: 1
* - Name
- Description
* - :attr:`~amplify.client.ToshibaSQBM2Client.request_data_type`
- 送信データのファイルフォーマットを ``'HDF5'`` と ``'MatrixMarket'`` のどちらかで指定します。デフォルトは ``'HDF5'`` です。
Toshiba クライアントの実行例
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**ToshibaClient**
.. code-block:: python
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.]']
.. note::
Toshiba SBM の詳細については `Simulated Bifurcation Machine (SBM) User Manual `_ を参照ください。
.. _client-toshiba-sqbm2:
**ToshibaSQBM2Client**
.. code-block:: python
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.]']
.. _client-hitachi:
Hitachi
-------
Hitachi クライアントクラス
^^^^^^^^^^^^^^^^^^^^^^^^^^
詳細については :ref:`Hitachi client reference ` の各項目を参照してください。
+-----------------------+----------------------------------------------------+
| 名称 | Hitachi CMOS annealing machine (type 4: GPU) |
+=======================+====================================================+
| クライアントクラス | :class:`~amplify.client.HitachiClient` |
+-----------------------+----------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.HitachiClientParameters` |
+-----------------------+----------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.HitachiClientResult` |
+-----------------------+----------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.HitachiClientResultTiming` |
+-----------------------+----------------------------------------------------+
| 物理グラフ | キンググラフ |
+-----------------------+----------------------------------------------------+
| 物理ビット数 | 262144 (512x512) |
+-----------------------+----------------------------------------------------+
| 論理ビット数 (全結合) | 512 |
+-----------------------+----------------------------------------------------+
| API URL (デフォルト) | https://annealing-cloud.com/api/v2/ |
+-----------------------+----------------------------------------------------+
Hitachi クライアントアトリビュート
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. list-table::
:widths: 15 30
:header-rows: 1
* - Name
- Description
* - :attr:`~amplify.client.HitachiClient.num_bits`
- 実行可能な変数の最大値を取得します
* - :attr:`~amplify.client.HitachiClient.parameters`
- 実行パラメータ :class:`~amplify.client.HitachiClientParameters` を取得します
* - :attr:`~amplify.client.HitachiClient.url`
- API URL を取得・設定します
* - :attr:`~amplify.client.HitachiClient.proxy`
- プロキシサーバのアドレスを取得・設定します
* - :attr:`~amplify.client.HitachiClient.token`
- APIトークンを取得・設定します
* - :attr:`~amplify.client.FixstarsClient.write_request_data`
- 送信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です
* - :attr:`~amplify.client.FixstarsClient.write_response_data`
- 受信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です
* - :attr:`~amplify.client.HitachiClient.version`
- 実行マシンのAPIバージョン文字列を取得します
Hitachi クライアントの実行例
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**HitachiClient**
.. code-block:: python
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.]']
.. note::
Hitachi CMOS annealing machine の詳細については `APIリファレンス V2 `_ を参照ください。
.. _client-ntt-hiroshima:
Hiroshima Univ. / NTT DATA
--------------------------
ABS クライアントクラス
^^^^^^^^^^^^^^^^^^^^^^
詳細については :ref:`ABS client reference ` の各項目を参照してください。
+-----------------------+------------------------------------------------+
| 名称 | ABS QUBO Solver |
+=======================+================================================+
| クライアントクラス | :class:`~amplify.client.ABSClient` |
+-----------------------+------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.ABSClientParameters` |
+-----------------------+------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.ABSClientResult` |
+-----------------------+------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.ABSClientResultTiming` |
+-----------------------+------------------------------------------------+
| 物理グラフ | 全結合 |
+-----------------------+------------------------------------------------+
| 物理ビット数 | 32768 |
+-----------------------+------------------------------------------------+
| 論理ビット数 (全結合) | 32768 |
+-----------------------+------------------------------------------------+
| API URL (デフォルト) | https://qubosolver.cs.hiroshima-u.ac.jp |
+-----------------------+------------------------------------------------+
ABS クライアントアトリビュート
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. list-table::
:widths: 15 30
:header-rows: 1
* - Name
- Description
* - :attr:`~amplify.client.ABSClient.num_bits`
- 実行可能な変数の最大値を取得します
* - :attr:`~amplify.client.ABSClient.parameters`
- 実行パラメータ :class:`~amplify.client.ABSClientParameters` を取得します
* - :attr:`~amplify.client.ABSClient.url`
- API URL を取得・設定します
* - :attr:`~amplify.client.ABSClient.proxy`
- プロキシサーバのアドレスを取得・設定します
* - :attr:`~amplify.client.ABSClient.user_name`
- ユーザIDを取得・設定します
* - :attr:`~amplify.client.ABSClient.password`
- パスワードを取得・設定します
* - :attr:`~amplify.client.FixstarsClient.write_request_data`
- 送信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です
* - :attr:`~amplify.client.FixstarsClient.write_response_data`
- 受信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です
* - :attr:`~amplify.client.ABSClient.version`
- 実行マシンのAPIバージョン文字列を取得します
ABS クライアントの実行例
^^^^^^^^^^^^^^^^^^^^^^^^
**ABSClient**
.. code-block:: python
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.]']
.. note::
ABS QUBO Solver の詳細については ``_ を参照ください。
.. _client-gurobi:
Gurobi
------
.. note::
Gurobi Client を使用するには、お使いのコンピュータに Gurobi のソフトウェアおよびライセンスが適切にインストールされていることが必要です。
Gurobi クライアントクラス
^^^^^^^^^^^^^^^^^^^^^^^^^
詳細については :ref:`gurobi client reference ` の各項目を参照してください。
+-----------------------+---------------------------------------------------+
| 名称 | Gurobi Optimizer |
+=======================+===================================================+
| クライアントクラス | :class:`~amplify.client.GurobiClient` |
+-----------------------+---------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.GurobiClientParameters` |
+-----------------------+---------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.GurobiClientResult` |
+-----------------------+---------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.GurobiClientResultTiming` |
+-----------------------+---------------------------------------------------+
Gurobi クライアントアトリビュート
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. list-table::
:widths: 15 30
:header-rows: 1
* - Name
- Description
* - :attr:`~amplify.client.GurobiClient.num_bits`
- 実行可能な変数の最大値を取得します
* - :attr:`~amplify.client.GurobiClient.parameters`
- 実行パラメータ :class:`~amplify.client.GurobiClientParameters` を取得します
* - :attr:`~amplify.client.GurobiClient.gurobi_path`
- Gurobi の動的ライブラリへのパスを指定します
* - :attr:`~amplify.client.GurobiClient.write_model`
- Gurobi に入力したモデルデータを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です。保存形式 (拡張子) として ``.mps``, ``.rew``, ``.lp``, ``.rlp`` が有効です。また、LP では双対問題を出力に ``.dua``, ``.dlp`` が有効です
* - :attr:`~amplify.client.GurobiClient.write_solution`
- Gurobi の出力した解を保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です。保存形式 (拡張子) として ``.sol`` と ``.json`` が有効です
* - :attr:`~amplify.client.GurobiClient.version`
- Gurobi の動的ライブラリのバージョン文字列を取得します
Gurobi クライアントの実行例
^^^^^^^^^^^^^^^^^^^^^^^^^^^
**GurobiClient**
.. code-block:: python
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.]']
.. note::
Gurobi Optimizer の詳細については `ドキュメント `_ を参照してください。
.. _client-qiskit:
IBM Qiskit
----------
Qiskit を用いて IBM Quantum またはそのシミュレータによる `QAOA `_ を実行します。
.. note::
Qiskit Client で実機の量子コンピュータを使用するには、事前に `IBM Quantum `_ への登録とトークンの取得が必要になります。
.. note::
Qiskit クライアントを使用するには、`amplify.qaoa `_ パッケージのインストールが必要です。次のように Amplify SDK をインストールすると依存パッケージも同時にインストールされます。
.. code-block:: bash
$ pip install amplify[extra]
Qiskit クライアントクラス
^^^^^^^^^^^^^^^^^^^^^^^^^
詳細については :ref:`qiskit client reference ` の各項目を参照してください。
+----------------------+-------------------------------------------------------------+
| 名称 | Qiskit Classes |
+======================+=============================================================+
| クライアントクラス | :class:`~amplify.client.QiskitClient` |
+----------------------+-------------------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.QiskitClientParameters` |
+----------------------+-------------------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.QiskitClientResult` |
+----------------------+-------------------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.QiskitClientResultTiming` |
+----------------------+-------------------------------------------------------------+
Qiskit クライアントアトリビュート
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. list-table::
:widths: 15 30
:header-rows: 1
* - Name
- Description
* - :attr:`~amplify.client.QiskitClient.num_bits`
- 実行可能な変数の最大値を取得します
* - :attr:`~amplify.client.QiskitClient.device`
- QAOA を実行する環境 ("CPU", "GPU", "QPU") を取得・設定します
* - :attr:`~amplify.client.QiskitClient.token`
- IBM Quantum に接続するためのAPIトークンを取得・設定します
* - :attr:`~amplify.client.QiskitClient.backend`
- QAOA を実行する実機名 (もしくはシミュレーションのメソッド名) を取得・設定します
* - :attr:`~amplify.client.QiskitClient.parameters`
- 実行パラメータ :class:`~amplify.client.QiskitClientParameters` を取得します
* - :attr:`~amplify.client.QiskitClient.version`
- クライアントのバージョン情報を取得します
.. note::
GPU を使用したシミュレーションを実行するには、次のように ``qiskit-aer`` パッケージをアンインストールして ``qiskit-aer-gpu`` パッケージで置き換える必要があります。
.. code-block:: console
$ pip uninstall qiskit-aer
$ pip install qiskit-aer-gpu
QiskitClient クライアントの実行例
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
実機を用いた QAOA の実行
~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
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']
.. note::
QAOA パラメータの詳細については :class:`~amplify.client.QiskitClientParameters` を参照してください。
理想的な量子回路シミュレータによる実行
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
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']
.. note::
シミュレータのメソッド名については `Qiskit のドキュメント `_ を参照してください。
実機を模したシミュレータによる実行
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
.. code-block:: python
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']
.. _client-qulacs:
Qulacs
------
量子回路シミュレータ `Qulacs `_ を用いて `QAOA `_ を実行します。
.. note::
Qulacs クライアントを使用するには、`amplify.qaoa `_ パッケージのインストールが必要です。次のように Amplify SDK をインストールすると依存パッケージも同時にインストールされます。
.. code-block:: bash
$ pip install amplify[extra]
Qulacs クライアントクラス
^^^^^^^^^^^^^^^^^^^^^^^^^
詳細については :ref:`qulacs client reference ` の各項目を参照してください。
+----------------------+-------------------------------------------------------------+
| 名称 | Qulacs Classes |
+======================+=============================================================+
| クライアントクラス | :class:`~amplify.client.QulacsClient` |
+----------------------+-------------------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.QulacsClientParameters` |
+----------------------+-------------------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.QulacsClientResult` |
+----------------------+-------------------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.QulacsClientResultTiming` |
+----------------------+-------------------------------------------------------------+
Qulacs クライアントアトリビュート
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. list-table::
:widths: 15 30
:header-rows: 1
* - Name
- Description
* - :attr:`~amplify.client.QulacsClient.num_bits`
- 実行可能な変数の最大値を取得します
* - :attr:`~amplify.client.QulacsClient.parameters`
- 実行パラメータ :class:`~amplify.client.QulacsClientParameters` を取得します
* - :attr:`~amplify.client.QulacsClient.version`
- クライアントのバージョン情報を取得します
QulacsClient クライアントの実行例
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
**QulacsClient**
.. code-block:: python
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']
.. _client-nec:
NEC
---
NEC クライアントクラス
^^^^^^^^^^^^^^^^^^^^^^
詳細についてはユーザーズマニュアルの各項目を参照してください。
+-----------------------+------------------------------------------------+
| 名称 | NEC Vector Annealing Service |
+=======================+================================================+
| クライアントクラス | :class:`~amplify.client.NECClient` |
+-----------------------+------------------------------------------------+
| 実行パラメータクラス | :class:`~amplify.client.NECClientParameters` |
+-----------------------+------------------------------------------------+
| 実行結果クラス | :class:`~amplify.client.NECClientResult` |
+-----------------------+------------------------------------------------+
| 実行時間クラス | :class:`~amplify.client.NECClientResultTiming` |
+-----------------------+------------------------------------------------+
| 物理グラフ | 全結合 |
+-----------------------+------------------------------------------------+
| 物理ビット数 | 300000 |
+-----------------------+------------------------------------------------+
| 論理ビット数 (全結合) | 300000 |
+-----------------------+------------------------------------------------+
NEC クライアントアトリビュート
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
.. list-table::
:widths: 15 30
:header-rows: 1
* - Name
- Description
* - :attr:`~amplify.client.NECClient.num_bits`
- 実行可能な変数の最大値を取得します
* - :attr:`~amplify.client.NECClient.parameters`
- 実行パラメータ :class:`~amplify.client.NECClientParameters` を取得します
* - :attr:`~amplify.client.NECClient.version`
- 実行マシンのバージョン文字列を取得します
* - :attr:`~amplify.client.NECClient.proxy`
- プロキシサーバのアドレスを取得・設定します
* - :attr:`~amplify.client.NECClient.token`
- APIトークンを取得・設定します
* - :attr:`~amplify.client.NECClient.set_onehot`
- VA の onehot 制約条件のパラメータを設定するかどうかを指定します。デフォルトは ``False`` です
* - :attr:`~amplify.client.NECClient.set_andzero`
- VA の andzero 制約条件のパラメータを設定するかどうかを指定します。デフォルトは ``False`` です
* - :attr:`~amplify.client.NECClient.set_orone`
- VA の orone 制約条件のパラメータを設定するかどうかを指定します。デフォルトは ``False`` です
* - :attr:`~amplify.client.NECClient.set_maxone`
- VA の maxone 制約条件のパラメータを設定するかどうかを指定します。デフォルトは ``False`` です
* - :attr:`~amplify.client.NECClient.set_minmaxone`
- VA の minmaxone 制約条件のパラメータを設定するかどうかを指定します。デフォルトは ``False`` です
* - :attr:`~amplify.client.NECClient.write_request_data`
- 送信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です
* - :attr:`~amplify.client.NECClient.write_response_data`
- 受信データを保存するファイルパスを取得・設定します。デフォルトは空文字で保存は無効です
NEC クライアントの実行例
^^^^^^^^^^^^^^^^^^^^^^^^^
.. code-block:: python
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.]']
.. _physical_model_solver:
物理模型ソルバー
----------------
通常の使用方法ではソルバークラスを通じて実行する手順を推奨しますが、クライアントクラスは「物理模型」の直接的なソルバーとして利用することも可能です。
.. note::
この機能は各マシンを直接操作する場合やデバッグ用途を想定しています。
全てのクライアントは共通で :meth:`~amplify.client.FixstarsClient.solve` メソッドを持ちます。次の入力が可能です。行列オブジェクトの入力に対して第二引数は定数項を表します。
* solve(:class:`~amplify.BinaryPoly`)
* solve(:class:`~amplify.IsingPoly`)
* solve(:class:`~amplify.BinaryIntPoly`)
* solve(:class:`~amplify.IsingIntPoly`)
* solve(:class:`~amplify.BinaryMatrix`, :class:`float` = ``0.0``)
* solve(:class:`~amplify.IsingMatrix`, :class:`int` = ``0.0``)
* solve(:class:`~amplify.BinaryIntMatrix` :class:`float` = ``0``)
* solve(:class:`~amplify.IsingIntMatrix`, :class:`int` = ``0``)
入力できる多項式は二次に限られ、使用できる変数インデックスと相互作用は各マシンの仕様に準じます。これらは「物理模型」である必要があり、変数間の結合についてハードウェア仕様に基づいたグラフを持ち、そのグラフによっては変数間の結合に制限がある場合があります。
.. note::
D-Wave マシンの QPU トポロジについては `公式のドキュメント `_ を参照してください。
.. note::
Hitachi CMOS annealing machine は `二次元インデックスで指定する `_ 仕様ですが、Amplify SDK では一次元化したインデックスを用います。キンググラフ上の座標 :math:`x`, :math:`y` について、一次元化した変数インデックス :math:`i = L x + y` で与えることに注意してください。ここで :math:`L = 512` はキンググラフの一辺の長さを表します。
:meth:`~amplify.client.FixstarsClient.solve` メソッドはクライアント固有の ``ClientResult`` クラスのオブジェクトを返却します。
``ClientResult`` クラスは共通で次のアトリビュートを持ちます。``optional`` は一部のクライアントのみ提供されます。
* :attr:`~amplify.client.FixstarsClientResult.execution_parameters` (optional) : 実行時パラメータを取得します。
* :attr:`~amplify.client.FixstarsClientResult.timing` : 実行時間オブジェクトを取得します。
* :attr:`~amplify.client.FixstarsClientResult.solutions` : 実行結果のリストを取得します。各要素は以下のアトリビュートを持ちます。
* :attr:`~amplify.client.ClientSolution.energy` : エネルギー値 (物理模型の評価値) を取得します。
* :attr:`~amplify.client.ClientSolution.values` : 物理変数の値をリストで取得します。
* :attr:`~amplify.client.ClientSolution.frequency` : 同一の解の個数を取得します。