DraperQFTAdder
class qiskit.circuit.library.DraperQFTAdder(num_state_qubits, kind='fixed', name='DraperQFTAdder')
Basen: Adder
Eine Schaltung, die QFT verwendet, um die Addition von zwei Qubit-Registern an Ort und Stelle durchzuführen.
Bei Registern mit -Qubits kann der QFT-Addierer eine Addition modulo (mit kind="fixed") oder eine gewöhnliche Addition durch Hinzufügen eines Übertrag-Qubits (mit kind="half") durchführen.
Ein Beispiel für eine QFT-Additionsschaltung, die eine gewöhnliche Addition an zwei Registern mit jeweils zwei Quantenbits durchführt, sieht wie folgt aus:
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 ├
└──────┘ └───────┘Die QFT- und inverse-QFT-Blöcke in dieser Implementierung verzichten auf ihre Swap-Netzwerke, die die Reihenfolge der Qubits umkehren, um eine effizientere Implementierung zu ermöglichen. Dies hat Einfluss darauf, auf welche Qubits die Phasen-Gatter wirken. Diese Zeichnung veranschaulicht, wie der Addierer in Qiskit implementiert ist; sie sollte nicht als Anleitung zum manuellen Aufbau der Schaltung verwendet werden.
Die folgenden generischen Gatterobjekte führen wie diese Schaltkreisklasse Additionen durch, ermöglichen es dem Compiler jedoch, die optimale Zerlegung auf der Grundlage des Kontexts auszuwählen. Spezifische Implementierungen können über die HLSConfigeingestellt werden, z.B. kann diese Schaltung über Adder=["qft_d00"] gewählt werden.
ModularAdderGate: Ein generischer Inplace-Addierer, modulo . Diese
ist funktional äquivalent zu kind="fixed".
AdderGate: Ein allgemeiner Inplace-Addierer. Diese
ist funktional äquivalent zu kind="half".
Quellenangaben:
[1] T. G. Draper, Addition auf einem Quantencomputer, 2000. arXiv:quant-ph/0008033
[2] Ruiz-Perez et al, Quantenarithmetik mit der Quanten-Fourier-Transformation, 2017. arXiv:1411.5949
[3] Vedral et al., Quantennetzwerke für elementare arithmetische Operationen, 1995. arXiv:quant-ph/9511018
Parameter
- num_state_qubits (int) – Die Anzahl der Qubits in einem der beiden Eingangsregister für den Zustand oder . Die beiden Eingangsregister müssen die gleiche Anzahl von Qubits haben.
- kind (str) – Die Art des Addierers kann
'half'für einen Halbaddierer oder'fixed'für einen Addierer fester Größe sein. Ein halber Addierer enthält einen Übertrag, um das höchstwertige Bit darzustellen, aber der Addierer mit fester Größe hat keinen Übertrag und führt daher die Addition modulo2 ** num_state_qubitsdurch. - name (str) – Der Name des Schaltkreisobjekts.
Erhöht
ValueError - Wenn num_state_qubits kleiner als 1 ist.
Attribute
name
Typ: str
Ein von Menschen lesbarer Name für den Stromkreis.
Beispiel
from qiskit import QuantumCircuit
qc = QuantumCircuit(2, 2, name="my_circuit")
print(qc.name)my_circuit