Skip to main content
IBM Quantum Platform

DraperQFTAdder

class qiskit.circuit.library.DraperQFTAdder(num_state_qubits, kind='fixed', name='DraperQFTAdder')

GitHub

ベース: Adder

QFTを用いて2つの量子ビットレジスタのインプレース加算を行う回路。

nn 個の量子ビットを持つレジスタの場合、QFT加算器は、 2n2^nkind="fixed")による剰余演算、あるいはキャリー量子ビット() kind="half"を追加することで通常の加算を行うことができます。

例えば、2つの2量子ビットレジスタに対して通常の加算を行うQFT加算回路は、以下の通りです:

 a_0: ─────────■──────■────────────────────────■────────────────
               │      │                        │
 a_1: ─────────┼──────┼────────■──────■────────┼────────────────
      ┌──────┐ │P(π)  │        │      │        │       ┌───────┐
 b_0: ┤0     ├─■──────┼────────┼──────┼────────┼───────┤0      ├
      │      │        │P(π/2)  │P(π)  │        │       │       │
 b_1: ┤1 QFT ├────────■────────■──────┼────────┼───────┤1 IQFT ├
      │      │                        │P(π/2)  │P(π/4) │       │
cout: ┤2     ├────────────────────────■────────■───────┤2      ├
      └──────┘                                         └───────┘

この実装におけるQFTおよび逆QFTブロックでは、スワップネットワークが省略されています。スワップネットワークは量子ビットの順序を反転させ、実装の効率化を図るものです。 これは、位相制御ゲートがどの量子ビットに作用するかに影響します。 この図は、Qiskitにおける加算器の実装方法を示したものです。回路を手作業で組み立てるための手順書として使用しないでください。

関連資料

以下の汎用ゲート・オブジェクトは、この回路クラスと同様に加算を行うが、コンパイラがコンテキストに基づいて最適な分解を選択できるようになっている。 具体的な実装は HLSConfig例えば、この回路は Adder=["qft_d00"]

ModularAdderGate:一般的なインプレース加算器、モジュロ 2n2^n。この

kind="fixed" と機能的に等価である。

AdderGate:汎用のインプレース加算器。 この

kind="half" と機能的に等価である。

参照資料:

[1] T. G. Draper, Addition on a Quantum Computer, 2000. arXiv:quant-ph/0008033

[2] Ruiz-Perezら、 量子フーリエ変換による量子算術、2017年。 arXiv:1411.5949

[3] ヴェドラル他 初等算術演算のための量子ネットワーク, 1995. arXiv:quant-ph/9511018

パラメーター

  • num_state_qubits (int) – 状態 a|a\rangle または b|b\rangle のどちらかの入力レジスタの量子ビット数。 2つの入力レジスタは同じ量子ビット数でなければならない。
  • kind (str) – 加算器の種類は、半加算器の場合は 'half' 、固定サイズ加算器の場合は 'fixed' 。 半加算器には、最上位ビットを表すキャリーアウトが含まれているが、固定サイズ加算器には含まれていないため、加算モジュロは 2 ** num_state_qubits
  • name (str) – 回路オブジェクトの名前。

レイズ

ValueError - num_state_qubits が1より小さい場合。


属性

name

タイプ: str

人間が読める回路名。

from qiskit import QuantumCircuit

qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)
my_circuit
このページは役に立ちましたか?
バグや誤字の報告、またはコンテンツの要求はGitHubで行ってください。