Aqarios Constrained Quantum Optimizer API リファレンス
Qiskit Functions — パートナー組織によって開発された既製のツール — は、ソフトウェア開発ワークフローの一部を抽象化することで、ユーティリティ規模でのアルゴリズムの発見およびアプリケーション開発を簡素化し、加速させます。 このQiskit関数のガイドを表示するには、ここをクリックしてください。
Aqarios 制約付き量子オプティマイザー ガイド
Aqarios Constrained Quantum Optimizerは、 IBM Quantum® ハードウェア上で、制約付き二値最適化問題を解きます。 このツールは、LP、MPS、またはLuna Model形式の問題を受け付け、内部ではXYミキサーを用いた固定角度QAOAを用いて、すべての再定式化、回路合成、トランスパイル、および反復的なウォームスタートを処理します。
この関数は、次のように読み込まれ、呼び出されます
optimizer = catalog.load("aqarios/constrained-quantum-optimizer")
job = optimizer.run(problem=lp_str, backend_name="ibm_phoenix")
result = job.result()Aqarios Constrained Quantum Optimizerは、「 IBM Quantum® Premium Plan 」、「Flex Plan」、および「 On-Prem Plan 」のユーザーのみが利用可能です。 現在、プレビュー版として提供されており、変更される可能性があります。
入力
このAPIが受け付けるすべての入力パラメータについては、以下のリストを参照してください。 必須のパラメータは、呼び出しのたびに指定する必要があります。それ以外のパラメータはすべて任意です。
problem
タイプ: str
解決すべき連成最適化問題。 以下の3つの形式がサポートされています:
- LP (
*.lp): 文字列としてエクスポートされた標準のLPファイル形式。例えば、DOcplexのexport_as_lp_string() - MPS (
*.mps): 標準のMPSファイル形式を文字列としてエクスポートしたもの。例えば、DOcplexのexport_as_mps_string() - Luna モデル : Base64-encoded 経由で取得した Aqarios Luna モデル オブジェクトのシリアライズ結果
model.encode_b64()
モデルは、最大化または最小化のいずれかとして、二値最適化問題を表現していなければならない。 制約条件は、二値変数に関する不等式または等式とすることができます。 整数変数は、明確な上限と下限が指定されている場合にのみサポートされます。 連続(実数値)変数はサポートされておらず、それらを含むモデルではエラーコード が発生し、処理が失敗します 4710。 目的関数や制約条件は高次のものであってもよく、必ずしも線形である必要はありません。
- 必須:はい
- LPの例:
\Problem name: MIS
Minimize
obj: ...
Subject To
c1: ...
...
Binaries
x_0 x_1
End
backend_name
タイプ: str or None
デフォルト値: None
IBM Quantum のバックエンドとして実行する対象の名前(例: "ibm_phoenix")。 に設定すると None、この機能は利用可能なデバイスの中から最も負荷の低いものを自動的に選択します。
- 必須:いいえ
- 例:
"ibm_phoenix"
options
タイプ: dict or None
デフォルト値: None
反復型ウォームスタートQAOAの挙動を制御するアルゴリズムの設定オプション。 オプションは辞書として指定されます。 利用可能なすべてのキーとそのデフォルト値については、以下のオプション一覧をご覧ください。
- 必須:いいえ
- 例:
{"reps": 2, "num_parallel": 10, "postprocessing_level": 1}
オプション・リスト
reps
タイプ: int
デフォルト値: 1
QAOA層の反復回数(回路深度パラメータ )。この値を大きくすると、回路が深くなり実行時間が長くなるという代償を伴うものの、解の品質が向上します。ただし、これによりノイズが増える可能性があります。
- 選択肢:範囲内の整数
[1, 10]
num_parallel
タイプ: int
デフォルト値: 5
並列で実行される独立したウォームスタートチェーンの数。 この値を大きくすると、質の高い解が見つかる確率は高まりますが、消費されるショットの総予算も増加します。
- 選択肢:範囲内の整数
[1, 100]
shots
タイプ: int
デフォルト値: 500
チェーンごとの反復あたりの測定ショット数。
- 選択肢:範囲内の整数
[1, 10000]
total_shots
タイプ: int
デフォルト値: 5000
1つのウォームスタートチェーンについて、すべての反復におけるショットの総予算。 この予算が使い果たされると、そのチェーンに対する反復ループは終了します。
- 選択肢:範囲内の整数
[1, 1000000]
epsilon
タイプ: float
デフォルト値: 0.1
ウォームスタート確率の正則化パラメータ。 確率分布が決定論的な状態に収束するのを防ぎ、反復処理を通じて探索性を維持します。
- 選択肢:範囲内で浮遊する
(0.01, 1)
beta
タイプ: float
デフォルト値: 10
測定サンプルから新しいウォームスタート状態を導出するために用いられるボルツマン重み付けの逆温度。 値が大きいほど、確率質量は低エネルギーのサンプルに集中する。
- 選択肢:フロートが条件を満たす
beta > 0
approximation_degree
タイプ: float
デフォルト値: 1.0
コスト関数およびトランスパイラ処理中に適用される近似レベルを制御します。 値が小さいほど、近似が導入されることで回路の深さが浅くなりますが、これにより解の品質に影響が出る可能性があります。
- 選択肢:範囲内で浮遊する
[0.0, 1.0]
postprocessing_level
タイプ: int
デフォルト値: 3
各サンプリングステップの後に適用され、解の精度を向上させる従来の後処理の強み。 レベルが高いほど、従来の計算時間を追加で要する代わりに、より強力な局所探索が行われます。
- 選択肢:範囲内の整数
[0, 3]0: 後処理を無効にする。1: シングルパス局所探索。 すべてのビットをランダムな順序で一度ずつ反転させ、エネルギーを減少させる反転は維持するようにしてください。2: 3パス局所探索。 レベルを、ランダムな順序で31回適用してください。3: 貪欲な局所探索。 エネルギーを最も削減できるビット反転を、これ以上改善の余地がなくなるまで繰り返し適用する。
penalty_override
タイプ: float or None
デフォルト値: None
制約条件を目的関数に追加されるペナルティ項に変換する際に使用されるペナルティ値を手動で上書きします。 デフォルトでは、ペナルティは問題の構造から自動的に算出されます。 このオプションは、自動設定された値によって実行不可能な結果が生じる場合にのみ使用してください。
- 選択肢:「満足」を選択するか
penalty_override > 0、自動設定値を使用Noneするか
use_session
タイプ: bool
デフォルト値: False
ジョブの実行に「 IBM Quantum Compute 」サービスのセッションモードを使用するかどうか。 セッションを有効にすると、反復処理を通じてQPUへの専用接続を維持することで、回路実行のオーバーヘッドが軽減され、結果として全体のウォールクロック時間が短縮される可能性があります。
- 選択肢:
True/False
seed_transpiler
タイプ: int or None
デフォルト値: None
選択されたバックエンドに回路をマッピングするトランスパイラーに渡されるシード。 実行ごとに回路合成と配線が再現性を持つように、固定値を設定します。 に設定すると None、トランスパイラーは非決定論的に初期化を行うため、同じ問題を繰り返し実行しても、異なる回路レイアウトが生成されることがあります。
- 選択肢:任意の整数、または非決定論的なシード
Noneの場合は
job_tags
タイプ: list[str]
デフォルト値: []
この関数がQPUに送信するすべてのQuantum Computeジョブに、追加のタグが付けられます。 この関数は、常にジョブに「」 "aqarios/constrained-quantum-optimizer"、関数のジョブID、および問題名をタグとして付与します。ここで指定されたエントリは、そのリストの末尾に追加されます。 これを使用して、ワークロード一覧に含まれる基となるプリミティブジョブをグループ化またはフィルタリングします。
- 選択肢:文字列のリスト
- 例:
["my-experiment", "mis-benchmark"]
出力
このAPIの出力は、が見つけた最適な解と関連するメタデータを含む辞書であり job.result()、によって返されます。
タイプ: dict[str, Any]
解の割り当て、目的関数値、実行可能性の状態、および実行時間メタデータを含む結果辞書。
例:
{
'solutions': [{'x_1': 0, 'x_2': 1, 'x_3': 0, 'x_4': 1, 'x_5': 1}],
'solution_bitstrings': ['01011'],
'raw_energy': -6.0,
'objective_value': -6.0,
'feasible': True,
'metadata': {
'resource_usage': {
'RUNNING: MAPPING': {'CPU': 5.405},
'RUNNING: OPTIMIZING_FOR_HARDWARE': {'CPU': 9.902},
'RUNNING: WAITING_FOR_QPU': {'CPU': 25.456},
'RUNNING: EXECUTING_QPU': {'QPU': 25.202},
'RUNNING: POST_PROCESSING': {'CPU': 6.481}
},
'circuit_metrics': {
'before_transpilation': {
'num_qubits': 6,
'gate_count': 42,
'depth': 15,
'two_qubit_gate_count': 12,
'two_qubit_gate_depth': 7,
'operations': {'rz': 12, 'p': 8, 'ry': 7, 'rzz': 4, 'cx': 3,
'xx_plus_yy': 3, 'global_phase': 2, 'cry': 2, 'x': 1}
},
'after_transpilation': {
'num_qubits': 6,
'gate_count': 254,
'depth': 100,
'two_qubit_gate_count': 48,
'two_qubit_gate_depth': 33,
'operations': {'rz': 78, 'sx': 122, 'cz': 48, 'measure': 6, 'x': 0}
}
},
'solver_info': {
'variable_mapping': {'x_1': 0, 'x_2': 1, 'x_3': 2, 'x_4': 3, 'x_5': 4}
}
}
}出力構造
solutions
タイプ: list[dict[str, int]]
見つかった最良の解決策の一覧。 各エントリは、変数名(例えば、 "x_0")とそのバイナリ代入値(0 または 1)を対応付ける辞書です。 このリストに複数の項目が含まれるのは、複数の縮退最適解が特定された場合のみです。
- 例:
[{"x_0": 1, "x_1": 0, "x_2": 1}]
solution_bitstrings
タイプ: list[str]
と同じ解を solutions、ビット文字列としてエンコードしたものです。 このリストの というエントリは、の というエントリに対応しています solutions。 を使用して、ビット列のどの位置にどの変数が格納されているかを確認 metadata.solver_info.variable_mapping します。変数 の値は です v``bitstring[variable_mapping[v]] 。
- 例:
["101"]
objective_value
タイプ: float
見つかった最良の解の目的関数値。元の問題の用語を用いて表される。 最大化問題では、この値が大きいほど解の質が高くなり、最小化問題では小さいほど解の質が高くなります。
- 例:
42.0
raw_energy
タイプ: float
最良解のQAOAエネルギー(生値)は、常に最小化値として表される。 これには、問題の再定式化の過程で追加されたペナルティ項も含まれており、制約違反の診断に役立ちます。
- 例:
-38.5
feasible
タイプ: bool
返された解が、元の入力モデルのすべての制約を満たしているかどうか。 ペナルティ値が、ハードウェア上のすべての制約を確実に満たすのに不十分な場合、その結果は実行不可能となる可能性があります。
- 例:
True
metadata
resource_usage
タイプ: dict
アルゴリズムの各フェーズ(マッピング、ハードウェア最適化、QPU実行、後処理)ごとに分類した、量子および古典リソースの消費量。
- 例:
{'RUNNING: MAPPING': {'CPU': 4.57},
'RUNNING: OPTIMIZING_FOR_HARDWARE': {'CPU': 0.177},
'RUNNING: WAITING_FOR_QPU': {'CPU': 9.238},
'RUNNING: EXECUTING_QPU': {'QPU': 30},
'RUNNING: POST_PROCESSING': {'CPU': 0.093}}circuit_metrics
タイプ: dict or None
QAOA回路のゲート数および回路の深さ。これらは、合成時およびデバイス上で実行された時の両方の数値として報告されている。 この値は、前処理中に問題が解決され、回路の実行が行われなかった None 場合(エラーコード 4712)に設定されます。
before_transpilation
タイプ: dict
問題から合成された抽象的なQAOA回路の指標。これは、バックエンドにマッピングされる前の状態である。
after_transpilation
タイプ: dict
実際にデバイスに送信された回路の測定値。 最適化中に実行されたすべての回路について平均を算出し、次の整数に切り上げた値。
どちらのエントリにも、以下のフィールドが含まれています: num_qubits (回路内の量子ビット数)、 gate_count (演算の総数)、 depth (回路の深さ)、 two_qubit_gate_count (2量子ビットゲートの数)、 two_qubit_gate_depth (2量子ビットゲートのみをカウントした深さ)、および operations (ゲート名とその出現回数との対応関係)。
solver_info
タイプ: dict or None
ソルバーが問題をどのように表現したかに関する追加情報。
variable_mapping
タイプ: dict[str, int]
各変数名を、. のエントリ内におけるその文字位置に対応付けます solution_bitstrings。
- 例:
{"x_0": 0, "x_1": 1, "x_2": 2}
エラー処理
コード | 説明 |
|---|---|
4710 | この入力モデルはサポートされていません。 モデルには、関数では解くことができない連続(実数値)変数、または明示的な境界値が指定されていない整数変数が含まれています。 |
4711 | 入力文字列をモデルとして解析できません。 が有効なLP、MPS、またはLuna Modelの文字列 problem であることを確認してください。 |
4712 | このモデルは前処理の段階で最適解が得られており、量子計算は行われなかった。 結果は依然として返されますが、は に設定 metadata.circuit_metrics されています None。 |
4719 | 予期せぬ内部関数エラーが発生しました。 ジョブIDを明記の上、 [email protected] までご連絡ください。 |
- サポートされていない変数型 :この関数は離散問題のみを解きます。 連続(実数値)変数はサポートされておらず、整数変数には明示的な下限と上限を指定する必要があります。 これに違反するモデルは、エラーコード で失敗します
4710。 - 無効な問題形式 :文字
problem列を有効なLP、MPS、またはLuna Modelとして解析できない場合、ジョブはエラーコード で失敗します4711。 - オプションの検証エラー :オプションのキーまたは値が、ドキュメントに記載された範囲外の場合、ジョブはエラーコード とともに直ちに失敗します
1221。