HRSCumulativeMultiplier
class qiskit.circuit.library.HRSCumulativeMultiplier(num_state_qubits, num_result_qubits=None, adder=None, name='HRSCumulativeMultiplier')
ベース: Multiplier
2つの入力レジスタの積を場外に保存する乗算回路。
サーキットは [1].のアプローチを採用している。 例として、デフォルトの加算器で3qubitの大きさの2つのレジスタに対して非変調乗算を行う乗算回路は以下のようになる(ここで Adder は CDKMRippleCarryAdder を表す):
a_0: ────■─────────────────────────
│
a_1: ────┼─────────■───────────────
│ │
a_2: ────┼─────────┼─────────■─────
┌───┴────┐┌───┴────┐┌───┴────┐
b_0: ┤0 ├┤0 ├┤0 ├
│ ││ ││ │
b_1: ┤1 ├┤1 ├┤1 ├
│ ││ ││ │
b_2: ┤2 ├┤2 ├┤2 ├
│ ││ ││ │
out_0: ┤3 ├┤ ├┤ ├
│ ││ ││ │
out_1: ┤4 ├┤3 ├┤ ├
│ Adder ││ Adder ││ Adder │
out_2: ┤5 ├┤4 ├┤3 ├
│ ││ ││ │
out_3: ┤6 ├┤5 ├┤4 ├
│ ││ ││ │
out_4: ┤ ├┤6 ├┤5 ├
│ ││ ││ │
out_5: ┤ ├┤ ├┤6 ├
│ ││ ││ │
aux_0: ┤7 ├┤7 ├┤7 ├
└────────┘└────────┘└────────┘この回路における乗算は、入力レジスタの1つを使用して一連のシフト加算を実行する古典的なアプローチで実装され、もう1つの入力レジスタからの量子ビットは加算器の制御量子ビットとして機能する。
関連資料
この MultiplierGate オブジェクトは、この回路クラスと同様に乗算を表しますが、コンパイラが文脈に基づいて最適な分解を選択できるようにします。 具体的な実装は を通じて設定できます HLSConfig。例えば、この回路は を通じて選択できます Multiplier=["cumulative_h18"]。
参照資料:
[1] Häner et al、 算術演算のための量子回路の最適化, 2018. arXiv:1805.12445
パラメーター
- num_state_qubits (int) – 状態 または のどちらかの入力レジスタの量子ビット数。 2つの入力レジスタは同じ数の量子ビットを持たなければならない。
- num_result_qubits (int | None) – 出力を制限する結果量子ビットの数。 結果量子ビット数が の場合、乗算モジュロ が実行され、出力が指定された量子ビット数に制限される。 デフォルト値は
2 * num_state_qubits、2つの入力の乗算から得られる可能性のある結果を表す。 - adder (QuantumCircuit | None) – 乗算に使用する半加算回路。 加算器が提供されていない場合、 CDKMRippleCarryAdder がデフォルトで使用される。
- name (str) – 回路オブジェクトの名前。
レイズ
NotImplementedError - num_result_qubits がデフォルトでなく、カスタム加算器が提供されている場合。
属性
name
タイプ: str
人間が読める回路名。
例
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuitこのページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。