Skip to main content
IBM Quantum Platform

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)

GitHub

Basen: TwoLocal

Der heuristische anregungserhaltende Wellenfunktionsansatz.

Die Schaltung ExcitationPreserving bewahrt das Verhältnis der Zustände ∣00⟩|00\rangle, ∣01⟩+∣10⟩|01\rangle + |10\rangle und ∣11⟩|11\rangle. Zu diesem Zweck verwendet diese Schaltung Zwei-Qubit-Wechselwirkungen der Form

(10000cos⁡(θ/2)−isin⁡(θ/2)00−isin⁡(θ/2)cos⁡(θ/2)0000e−iϕ)\providecommand{\rotationangle}{\theta/2} \begin{pmatrix} 1 & 0 & 0 & 0 \\ 0 & \cos\left(\rotationangle\right) & -i\sin\left(\rotationangle\right) & 0 \\ 0 & -i\sin\left(\rotationangle\right) & \cos\left(\rotationangle\right) & 0 \\ 0 & 0 & 0 & e^{-i\phi} \end{pmatrix}

für den Modus 'fsim' oder mit e−iϕ=1e^{-i\phi} = 1 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 „ ZZ “ mit 2-Qubit-Verschränkungen. Die Verschränkung wird mithilfe von Rotationen vom Typ „ XX+YYXX+YY “ 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]) ├
     └──────────┘ ░ └────────────┘└────────────┘        ░ └──────────┘
Siehe auch

Die Funktion excitation_preserving() funktion konstruiert eine funktional äquivalente Schaltung, aber schneller.

Veraltet seit Version 2.1

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 TwoLocal fü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 auf True zu 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
War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.