EfficientSU2
class qiskit.circuit.library.EfficientSU2(num_qubits=None, su2_gates=None, entanglement='reverse_linear', reps=3, skip_unentangled_qubits=False, skip_final_rotation_layer=False, parameter_prefix='θ', insert_barriers=False, initial_state=None, name='EfficientSU2', flatten=None)
Basen: TwoLocal
Die hardware-effiziente SU(2)-2-local-Schaltung.
Die Schaltung EfficientSU2 besteht aus Schichten von Einzel-Qubit-Operationen, die von SU(2)- und -Verschränkungen überspannt werden. Dies ist ein heuristisches Muster, das zur Vorbereitung von Versuchswellenfunktionen für variierende Quantenalgorithmen oder Klassifizierungsschaltungen für maschinelles Lernen verwendet werden kann.
SU(2) steht für eine spezielle unitäre Gruppe vom Grad 2, ihre Elemente sind unitäre Matrizen mit der Determinante 1, wie z. B. die Pauli-Rotationsgatter.
Bei 3 Qubits und unter Verwendung der Pauli und su2_gates als Gatter für ein einzelnes Qubit lässt sich die hardwareeffiziente SU(2)-Schaltung wie folgt darstellen:
┌──────────┐┌──────────┐ ░ ░ ░ ┌───────────┐┌───────────┐
┤ RY(θ[0]) ├┤ RZ(θ[3]) ├─░────────■───░─ ... ─░─┤ RY(θ[12]) ├┤ RZ(θ[15]) ├
├──────────┤├──────────┤ ░ ┌─┴─┐ ░ ░ ├───────────┤├───────────┤
┤ RY(θ[1]) ├┤ RZ(θ[4]) ├─░───■──┤ X ├─░─ ... ─░─┤ RY(θ[13]) ├┤ RZ(θ[16]) ├
├──────────┤├──────────┤ ░ ┌─┴─┐└───┘ ░ ░ ├───────────┤├───────────┤
┤ RY(θ[2]) ├┤ RZ(θ[5]) ├─░─┤ X ├──────░─ ... ─░─┤ RY(θ[14]) ├┤ RZ(θ[17]) ├
└──────────┘└──────────┘ ░ └───┘ ░ ░ └───────────┘└───────────┘Weitere Informationen zu den möglichen Argumenten und Optionen, wie beispielsweise das Überspringen von nicht-verschränkten Qubits, die auch hier gelten, finden RealAmplitudes Sie unter [...].
Beispiele
>>> circuit = EfficientSU2(3, reps=1)
>>> print(circuit.decompose())
┌──────────┐┌──────────┐ ┌──────────┐┌──────────┐
q_0: ┤ RY(θ[0]) ├┤ RZ(θ[3]) ├──■────■──┤ RY(θ[6]) ├┤ RZ(θ[9]) ├─────────────
├──────────┤├──────────┤┌─┴─┐ │ └──────────┘├──────────┤┌───────────┐
q_1: ┤ RY(θ[1]) ├┤ RZ(θ[4]) ├┤ X ├──┼───────■──────┤ RY(θ[7]) ├┤ RZ(θ[10]) ├
├──────────┤├──────────┤└───┘┌─┴─┐ ┌─┴─┐ ├──────────┤├───────────┤
q_2: ┤ RY(θ[2]) ├┤ RZ(θ[5]) ├─────┤ X ├───┤ X ├────┤ RY(θ[8]) ├┤ RZ(θ[11]) ├
└──────────┘└──────────┘ └───┘ └───┘ └──────────┘└───────────┘>>> ansatz = EfficientSU2(4, su2_gates=['rx', 'y'], entanglement='circular', reps=1,
... flatten=True)
>>> qc = QuantumCircuit(4) # create a circuit and append the RY variational form
>>> qc.compose(ansatz, inplace=True)
>>> qc.draw()
┌──────────┐┌───┐┌───┐ ┌──────────┐ ┌───┐
q_0: ┤ RX(θ[0]) ├┤ Y ├┤ X ├──■──┤ RX(θ[4]) ├───┤ Y ├─────────────────────
├──────────┤├───┤└─┬─┘┌─┴─┐└──────────┘┌──┴───┴───┐ ┌───┐
q_1: ┤ RX(θ[1]) ├┤ Y ├──┼──┤ X ├─────■──────┤ RX(θ[5]) ├───┤ Y ├─────────
├──────────┤├───┤ │ └───┘ ┌─┴─┐ └──────────┘┌──┴───┴───┐┌───┐
q_2: ┤ RX(θ[2]) ├┤ Y ├──┼──────────┤ X ├─────────■──────┤ RX(θ[6]) ├┤ Y ├
├──────────┤├───┤ │ └───┘ ┌─┴─┐ ├──────────┤├───┤
q_3: ┤ RX(θ[3]) ├┤ Y ├──■──────────────────────┤ X ├────┤ RX(θ[7]) ├┤ Y ├
└──────────┘└───┘ └───┘ └──────────┘└───┘Die Funktion efficient_su2() funktion konstruiert eine funktional äquivalente Schaltung, aber schneller.
Die Klasse qiskit.circuit.library.n_local.efficient_su2.EfficientSU2 ist ab Qiskit 2.1 veraltet. Sie wird in Qiskit 3.0 entfernt. Verwenden Sie stattdessen die Funktion qiskit.circuit.library.efficient_su2.
Parameter
- num_qubits (int | None) – Die Anzahl der Qubits der Schaltung EfficientSU2.
- reps (int) – Gibt an, wie oft die Struktur einer Rotationsschicht gefolgt von einer Verschränkungsschicht wiederholt wird.
- su2_gates (str |type |qiskit.circuit.Instruction |QuantumCircuit |list[str |type |qiskit.circuit.Instruction |QuantumCircuit] | None) – Die SU(2)-Einzelqubit-Gatter, die in Einzelqubit-Gatter-Schichten zum Einsatz kommen sollen. Ist nur ein Gatter vorhanden, wird dasselbe Gatter auf jedes Qubit angewendet. Wird eine Liste von Toren angegeben, werden alle Tore in der angegebenen Reihenfolge auf jedes Qubit angewendet.
- entanglement (str |list[list[int]] | Callable[[int], list[int]]) – Gibt die Verflechtungsstruktur an. Kann eine Zeichenkette sein ("full", "linear", "reverse_linear", "pairwise", "circular" oder "sca"), eine Liste von Integer-Paaren, die die Indizes der miteinander verschränkten Qubits angeben, oder eine Callable, die eine solche Liste mit dem Index der Verschränkungsebene zurückgibt. Standardmäßig ist die Verschränkung 'reverse_linear'. Man beachte, dass die "umgekehrte lineare" Verschränkung die gleiche Einheit wie die "vollständige" Verschränkung mit weniger Verschränkungsgattern ergibt. Siehe den Abschnitt Beispiele in
TwoLocalfür weitere Einzelheiten. - initial_state (QuantumCircuit | None) – Ein „ QuantumCircuit “-Objekt, das dem Schaltkreis vorangestellt werden soll.
- skip_unentangled_qubits (bool) – Wenn True, werden die Single-Qubit-Gates nur auf Qubits angewendet, die mit einem anderen Qubit verschränkt sind. Wenn False, werden die Single-Qubit-Gates auf jedes Qubit im Ansatz angewendet. Standardmäßig wird 'Falsch' angenommen.
- skip_final_rotation_layer (bool) – Wenn False, wird am Ende des Ansatzes eine Rotationsschicht hinzugefügt. Bei True wird keine Rotationsebene hinzugefügt.
- parameter_prefix (str) – Für die parametrisierten Gatter muss ein Parameter definiert werden, für den wir Folgendes verwenden
ParameterVector. - insert_barriers (bool) – Bei True werden zwischen den einzelnen Ebenen Barrieren eingefügt. Wenn False, werden keine Barrieren eingefügt.
- flatten (bool | None) – Setzen Sie dies auf
True, um eine flache Schaltung auszugeben, anstatt sie in mehrere Schichten von Gatterobjekten zu verschachteln. Standardmäßig wird derzeit der Inhalt des Ausgabeschaltkreises in verschachtelte Objekte eingepackt, um eine übersichtlichere Darstellung zu erreichen. Wenn Sie diese Schaltung jedoch für etwas anderes als Visualisierung verwenden, wird dringend empfohlen, dieses Flag aufTruezu setzen, um einen großen Performance-Overhead für die Parameterbindung zu vermeiden. - name (str) – Name der Rennstrecke.
Attribute
parameter_bounds
Rückgabe der Parametergrenzen.
Rückgabe
Die Parametergrenzen.
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