ExcitationPreserving
class qiskit.circuit.library.ExcitationPreserving(num_qubits=None, mode='iswap', entanglement='full', reps=3, skip_unentangled_qubits=False, skip_final_rotation_layer=False, parameter_prefix='θ', insert_barriers=False, initial_state=None, name='ExcitationPreserving', flatten=None)
Basen: TwoLocal
Der heuristische anregungserhaltende Wellenfunktionsansatz.
Die Schaltung ExcitationPreserving bewahrt das Verhältnis der Zustände , und . Zu diesem Zweck verwendet diese Schaltung Zwei-Qubit-Wechselwirkungen der Form
für den Modus 'fsim' oder mit für den Modus 'iswap'.
Man beachte, dass auch andere Wellenfunktionen, wie z. B. UCC-Ansätze, anregungserhaltend sind. Diese können jedoch schnell komplex werden, während diese heuristisch motivierte Schaltung einem einfacheren Muster folgt.
Diese Testwellenfunktion besteht aus Schichten von Rotationen nach dem Prinzip „ “ mit 2-Qubit-Verschränkungen. Die Verschränkung wird mithilfe von Rotationen vom Typ „ “ und optional einem Phasen-Gatter für den Modus erzeugt 'fsim'.
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 [...].
Die Rotationen des ExcitationPreserving Ansatzes können wie folgt geschrieben werden
Beispiele
>>> ansatz = ExcitationPreserving(3, reps=1, insert_barriers=True, entanglement='linear')
>>> print(ansatz.decompose()) # show the circuit
┌──────────┐ ░ ┌────────────┐┌────────────┐ ░ ┌──────────┐
q_0: ┤ RZ(θ[0]) ├─░─┤0 ├┤0 ├─────────────────────────────░─┤ RZ(θ[5]) ├
├──────────┤ ░ │ RXX(θ[3]) ││ RYY(θ[3]) │┌────────────┐┌────────────┐ ░ ├──────────┤
q_1: ┤ RZ(θ[1]) ├─░─┤1 ├┤1 ├┤0 ├┤0 ├─░─┤ RZ(θ[6]) ├
├──────────┤ ░ └────────────┘└────────────┘│ RXX(θ[4]) ││ RYY(θ[4]) │ ░ ├──────────┤
q_2: ┤ RZ(θ[2]) ├─░─────────────────────────────┤1 ├┤1 ├─░─┤ RZ(θ[7]) ├
└──────────┘ ░ └────────────┘└────────────┘ ░ └──────────┘>>> ansatz = ExcitationPreserving(2, reps=1, flatten=True)
>>> qc = QuantumCircuit(2) # create a circuit and append the RY variational form
>>> qc.cry(0.2, 0, 1) # do some previous operation
>>> qc.compose(ansatz, inplace=True) # add the excitation-preserving
>>> qc.draw()
┌──────────┐┌────────────┐┌────────────┐┌──────────┐
q_0: ─────■─────┤ RZ(θ[0]) ├┤0 ├┤0 ├┤ RZ(θ[3]) ├
┌────┴────┐├──────────┤│ RXX(θ[2]) ││ RYY(θ[2]) │├──────────┤
q_1: ┤ RY(0.2) ├┤ RZ(θ[1]) ├┤1 ├┤1 ├┤ RZ(θ[4]) ├
└─────────┘└──────────┘└────────────┘└────────────┘└──────────┘>>> ansatz = ExcitationPreserving(3, reps=1, mode='fsim', entanglement=[[0,2]],
... insert_barriers=True, flatten=True)
>>> print(ansatz.decompose())
┌──────────┐ ░ ┌────────────┐┌────────────┐ ░ ┌──────────┐
q_0: ┤ RZ(θ[0]) ├─░─┤0 ├┤0 ├─■──────░─┤ RZ(θ[5]) ├
├──────────┤ ░ │ ││ │ │ ░ ├──────────┤
q_1: ┤ RZ(θ[1]) ├─░─┤ RXX(θ[3]) ├┤ RYY(θ[3]) ├─┼──────░─┤ RZ(θ[6]) ├
├──────────┤ ░ │ ││ │ │θ[4] ░ ├──────────┤
q_2: ┤ RZ(θ[2]) ├─░─┤1 ├┤1 ├─■──────░─┤ RZ(θ[7]) ├
└──────────┘ ░ └────────────┘└────────────┘ ░ └──────────┘Die Funktion excitation_preserving() funktion konstruiert eine funktional äquivalente Schaltung, aber schneller.
Die Klasse qiskit.circuit.library.n_local.excitation_preserving.ExcitationPreserving ist ab Qiskit 2.1 veraltet. Sie wird in Qiskit 3.0 entfernt. Verwenden Sie stattdessen die Funktion qiskit.circuit.library.excitation_preserving.
Parameter
- num_qubits (int | None) – Die Anzahl der Qubits der Schaltung ExcitationPreserving.
- mode (str) – Wählen Sie den Verschränkungsmodus, der 'iswap' oder 'fsim' sein kann.
- reps (int) – Gibt an, wie oft die Struktur einer Rotationsschicht gefolgt von einer Verschränkungsschicht wiederholt wird.
- entanglement (str |list[list[int]] | Callable[[int], list[int]]) – Gibt die Verflechtungsstruktur an. Kann eine Zeichenkette ("full", "linear" oder "sca"), eine Liste von Integer-Paaren, die die Indizes der miteinander verschränkten Qubits angeben, oder eine aufrufbare Datei sein, die eine solche Liste mit dem Index der Verschränkungsschicht zurückgibt. 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) – Bei True wird am Ende des Ansatzes eine Rotationsebene hinzugefügt. Bei False wird keine Rotationsebene hinzugefügt. Der Standardwert ist 'true'.
- 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.
Erhöht
ValueError - Wenn der ausgewählte Modus nicht unterstützt wird.
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