6. ソルバークライアント¶
Amplify SDK からソルバーを実行するには、各ソルバーを抽象化したソルバークライアントを作成します。そして、接続先、API トークン、実行パラメータなどを指定します。また、ソルバークライアントは対応関係にあるソルバーの扱える変数の種類、制約条件の有無、次数などの機能の情報を持ちます。Amplify SDK はこれを利用して 変数変換、次数下げ、制約条件の実装、ハードウェアトポロジーへの埋め込み などの モデル変換 を自動で行います。
6.1. ソルバークライアントの構成¶
Amplify Annealing Engine (AE) を例として、クライアント AmplifyAEClient を次のように作成します。
from amplify import AmplifyAEClient
client = AmplifyAEClient()
Tip
Amplify AE はユーザ登録を行うと無償の API トークンを入手できます。
クライアントクラスのほとんどのパラメータは、構築後はソルバーのデフォルト値で初期化 (または未設定) されています。そのため、クライアントごとの必須パラメータを設定すればすぐに使えます。設定が必須のパラメータはクライアントによって異なりますが、多くのクラウド型ソルバーでは API トークンが必要です。token アトリビュートに設定します。
client.token = "YOUR_API_TOKEN"
全てのクライアントにおいて、ソルバーの実行パラメータの取得と設定は parameters プロパティ内のアトリビュートに設定します。設定項目は可能な限りソルバーの API に即しているため、詳細は下記の各ソルバーのリファレンスを参照してください。
たとえば Amplify AE では、実行時間を次のように設定します。
from datetime import timedelta
client.parameters.time_limit_ms = timedelta(milliseconds=1000) # 1000 ミリ秒
Tip
各クライアントのパラメータごとに時間の単位や時刻のフォーマットが異なるため、Amplify SDK では datetime モジュールを利用して入出力できるようになっています。
クライアントクラスに設定したパラメータは、str や print() 関数によって文字列として表示できます。
>>> print(client)
{"url":"https://optigan.fixstars.com","token":"***","compression":true,"objective_format":"Auto","solver":"Constraint","parameters":{"time_limit_ms":1000.0}}
注釈
トークンなどの認証情報は、意図せずに漏洩することを防ぐため *** として表示されます。表示だけが隠されるので、値自体は token で従来通り取得できます。
一部のパラメータでは None を設定すると、未設定つまりソルバーのデフォルト値が使用されます。
client.parameters.time_limit_ms = None # ソルバーのデフォルト値にリセット
6.2. ソルバークライアントの一覧¶
Amplify SDK は下記のソルバー・マシンに対応しています。
PCBO-4th PUBO-4th QUBO GPU ☁️ Cloud
QUBO Ising QPU Annealing-Superconducting ☁️ Cloud Pegasus Graph Zephyr Graph
QUBO Ising Hybrid Annealing-Superconducting ☁️ Cloud
MIP QUBO Ising Hybrid Annealing-Superconducting ☁️ Cloud
QUBO GPU ☁️ Cloud
QUBO GPU ☁️ Cloud
QUBO PUBO-4th GPU
Ising GPU ☁️ Cloud King Graph
MIP CPU 💻 Local
PUBO-Nth Ising CPU GPU Gate-Simulator 💻 Local
PUBO-Nth Ising Hybrid Gate-Trapped-ion ☁️ Cloud
PUBO-Nth Ising CPU GPU Gate-Simulator 💻 Local ☁️ Cloud
PUBO-Nth Ising Hybrid Gate-Superconducting ☁️ Cloud
PUBO-Nth Ising Hybrid Gate-Trapped-ion ☁️ Cloud
PUBO-Nth Ising Hybrid Gate-Superconducting ☁️ Cloud
PUBO-Nth Ising Hybrid Gate-Simulator 💻 Local
PUBO-Nth Ising Hybrid Gate-Superconducting ☁️ Cloud
PUBO-Nth Ising Hybrid Gate-Trapped-ion ☁️ Cloud
PUBO-Nth Ising Hybrid Gate-Superconducting Gate-Simulator ☁️ Cloud
- PCBO-Nth PUBO-Nth QUBO Ising MIP
ソルバーが直接扱える問題の種類を表します。
PCBO-Nth バイナリ変数の \(N\) 次多項式の目的関数と \(N\) 次多項式の制約条件を扱えるソルバーです。
PUBO-Nth バイナリ変数の \(N\) 次多項式の目的関数を求解できるソルバーです。制約条件は扱えません。
QUBO バイナリ変数の二次多項式の目的関数を求解できるソルバーです。基本的には制約条件は扱えませんが、ソルバーによっては等式制約、不等式制約の入力に対応しています。
Ising イジング変数の二次多項式の目的関数を求解できるソルバーです。基本的には制約条件は扱えませんが、ソルバーによっては等式制約、不等式制約の入力に対応しています。
MIP 混合整数計画問題を求解できるソルバーです。バイナリ変数、整数変数と実数変数を扱うことができます。 一般的には1 次の問題 (線形計画問題) を対象としていますが、QUBO を含む2 次の問題を扱うことができるソルバーもあります。
注釈
Amplify SDK は、ソルバーが直接扱えない問題に対して、自動で変数変換や次数下げ、制約条件のペナルティ関数の生成といった変換を行います。そのため、ユーザが自身でソルバーが直接扱える形式の問題を作成する必要は必ずしもありません。ただし、ソルバーの種類や入力するモデルの種類によっては、未対応であったり、厳密な定式化にならないことがあります。詳細は モデルの変換 を参照してください。
- Graph
ソルバーに入力できる 2 次の項を表します。これらのタグがついていないソルバーには、2 次の項に関する制限はありません。そうでないソルバーは、与えられる 2 次の項に制限があり、任意の二次多項式を解くためにはグラフ埋め込みと呼ばれる操作が必要です。扱える問題のサイズは、ソルバーに入力可能な変数の数 \(N\) に対して最悪ケースで \(O\left( \sqrt N \right)\) 程度になります。詳細は「グラフ埋め込み」を参照してください。
- CPU GPU QPU Hybrid
マシンの動作する演算装置の種類を表します。Hybrid は QPU とその他の技術のハイブリッドソルバーであることを表します。
- Annealing-XXX Gate-XXX
QPU または Hybrid ソルバーについてその方式を表します。
Annealing-Superconducting 量子アニーリング方式・超伝導量子ビットのソルバーです。
Gate-Superconducting ゲート型・超伝導量子ビットのソルバーです。
Gate-Trapped-ion ゲート型・イオントラップ方式のソルバーです。
Gate-Neutral-atom ゲート型・中性原子方式のソルバーです。
Gate-Simulator ゲート型・量子コンピュータシミュレータのソルバーです。
- ☁️ Cloud 💻 Local
クラウドサービスとして提供されるソルバーなのか、ユーザのマシンにインストールする必要があるソルバーなのかを表します。