HRSCumulativeMultiplier
class qiskit.circuit.library.HRSCumulativeMultiplier(num_state_qubits, num_result_qubits=None, adder=None, name='HRSCumulativeMultiplier')
Basen: Multiplier
Eine Multiplikationsschaltung zur Speicherung des Produkts zweier Eingangsregister an einer anderen Stelle.
Die Schaltung verwendet den Ansatz aus [1.] Ein Beispiel für eine Multiplikatorschaltung, die eine nicht-modulare Multiplikation mit zwei 3-Qubit-Registern mit dem Standard-Addierer durchführt, sieht wie folgt aus (wobei Adder die CDKMRippleCarryAdder bezeichnet):
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 ├
└────────┘└────────┘└────────┘Die Multiplikation in dieser Schaltung wird in einem klassischen Ansatz durch eine Reihe von verschobenen Additionen unter Verwendung eines der Eingangsregister durchgeführt, während die Qubits aus dem anderen Eingangsregister als Steuer-Qubits für die Addierer dienen.
Das MultiplierGate Objekt stellt eine Multiplikation dar, genau wie diese Schaltungsklasse, ermöglicht es dem Compiler jedoch, je nach Kontext die optimale Zerlegung auszuwählen. Konkrete Implementierungen können über die Option festgelegt HLSConfig werden, z. B. kann diese Schaltung über die Option ausgewählt Multiplier=["cumulative_h18"] werden.
Quellenangaben:
[1] Häner et al., Optimierung von Quantenschaltungen für die Arithmetik, 2018. arXiv:1805.12445
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.
- num_result_qubits (int | None) – Die Anzahl der Ergebnis-Qubits, auf die die Ausgabe beschränkt werden soll. Wenn die Anzahl der Ergebnis-Qubits ist, wird die Multiplikation modulo durchgeführt, um die Ausgabe auf die angegebene Anzahl von Qubits zu begrenzen. Der Standardwert ist
2 * num_state_qubits, um jedes mögliche Ergebnis der Multiplikation der beiden Eingänge darzustellen. - adder (QuantumCircuit | None) – Halbaddierer-Schaltung zur Durchführung von Multiplikationen. Wird kein Addierer angegeben, wird standardmäßig der „ CDKMRippleCarryAdder “ verwendet.
- name (str) – Der Name des Schaltkreisobjekts.
Erhöht
NotImplementedError - Wenn num_result_qubits nicht Standard ist und ein benutzerdefinierter Addierer bereitgestellt wird.
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