Skip to main content
IBM Quantum Platform

RealAmplitudes

class qiskit.circuit.library.RealAmplitudes(num_qubits=None, entanglement='reverse_linear', reps=3, skip_unentangled_qubits=False, skip_final_rotation_layer=False, parameter_prefix='θ', insert_barriers=False, initial_state=None, name='RealAmplitudes', flatten=None)

GitHub

Basen: TwoLocal

Der 2-Lokal-Schaltkreis mit reellen Amplituden.

Die RealAmplitudes -Schaltung ist eine heuristische Versuchswellenfunktion, die als Ansatz in der Chemie oder als Klassifizierungsschaltung beim maschinellen Lernen verwendet wird. Die Schaltung besteht aus abwechselnden Schichten von YY Rotationen und CXCX Verflechtungen. Das Verschränkungsmuster kann benutzerdefiniert sein oder aus einem vordefinierten Satz ausgewählt werden. Es heißt RealAmplitudes , da die präparierten Quantenzustände nur reelle Amplituden haben, der komplexe Teil ist immer 0.

Eine RealAmplitudes Schaltung mit 2 Wiederholungen auf 3 Qubits mit 'reverse_linear' Verschränkung ist zum Beispiel

┌──────────┐ ░            ░ ┌──────────┐ ░            ░ ┌──────────┐
┤ Ry(θ[0]) ├─░────────■───░─┤ Ry(θ[3]) ├─░────────■───░─┤ Ry(θ[6]) ├
├──────────┤ ░      ┌─┴─┐ ░ ├──────────┤ ░      ┌─┴─┐ ░ ├──────────┤
┤ Ry(θ[1]) ├─░───■──┤ X ├─░─┤ Ry(θ[4]) ├─░───■──┤ X ├─░─┤ Ry(θ[7]) ├
├──────────┤ ░ ┌─┴─┐└───┘ ░ ├──────────┤ ░ ┌─┴─┐└───┘ ░ ├──────────┤
┤ Ry(θ[2]) ├─░─┤ X ├──────░─┤ Ry(θ[5]) ├─░─┤ X ├──────░─┤ Ry(θ[8]) ├
└──────────┘ ░ └───┘      ░ └──────────┘ ░ └───┘      ░ └──────────┘

Die Verschränkung kann mit dem Schlüsselwort entanglement als String oder als Liste von Indexpaaren angegeben werden. Siehe die Dokumentation von TwoLocal und NLocal für weitere Einzelheiten. Zu den zusätzlichen Optionen, die eingestellt werden können, gehören die Anzahl der Wiederholungen, das Überspringen von Rotationsgates bei nicht verschränkten Qubits, das Weglassen der letzten Rotationsschicht und das Einfügen von Barrieren zwischen der Rotations- und der Verschränkungsschicht.

Wenn einige Qubits nicht mit anderen Qubits verschränkt sind, ist es sinnvoll, auf diese Qubits keine Rotationsgatter anzuwenden, da eine Folge von YY Rotationen auf eine einzige YY Rotation mit summierten Rotationswinkeln reduziert werden kann.

Beispiele

>>> ansatz = RealAmplitudes(3, reps=2)  # create the circuit on 3 qubits
>>> print(ansatz.decompose())
     ┌──────────┐                 ┌──────────┐                 ┌──────────┐
q_0: ┤ Ry(θ[0]) ├──────────■──────┤ Ry(θ[3]) ├──────────■──────┤ Ry(θ[6]) ├
     ├──────────┤        ┌─┴─┐    ├──────────┤        ┌─┴─┐    ├──────────┤
q_1: ┤ Ry(θ[1]) ├──■─────┤ X ├────┤ Ry(θ[4]) ├──■─────┤ X ├────┤ Ry(θ[7]) ├
     ├──────────┤┌─┴─┐┌──┴───┴───┐└──────────┘┌─┴─┐┌──┴───┴───┐└──────────┘
q_2: ┤ Ry(θ[2]) ├┤ X ├┤ Ry(θ[5]) ├────────────┤ X ├┤ Ry(θ[8]) ├────────────
     └──────────┘└───┘└──────────┘            └───┘└──────────┘
>>> ansatz = RealAmplitudes(3, entanglement='full', reps=2, flatten=True)
>>> print(ansatz)
     ┌──────────┐          ┌──────────┐                      ┌──────────┐
q_0: ┤ RY(θ[0]) ├──■────■──┤ RY(θ[3]) ├──────────────■────■──┤ RY(θ[6]) ├────────────
     ├──────────┤┌─┴─┐  │  └──────────┘┌──────────┐┌─┴─┐  │  └──────────┘┌──────────┐
q_1: ┤ RY(θ[1]) ├┤ X ├──┼───────■──────┤ RY(θ[4]) ├┤ X ├──┼───────■──────┤ RY(θ[7]) ├
     ├──────────┤└───┘┌─┴─┐   ┌─┴─┐    ├──────────┤└───┘┌─┴─┐   ┌─┴─┐    ├──────────┤
q_2: ┤ RY(θ[2]) ├─────┤ X ├───┤ X ├────┤ RY(θ[5]) ├─────┤ X ├───┤ X ├────┤ RY(θ[8]) ├
     └──────────┘     └───┘   └───┘    └──────────┘     └───┘   └───┘    └──────────┘
>>> ansatz = RealAmplitudes(3, entanglement='linear', reps=2, insert_barriers=True,
... flatten=True)
>>> qc = QuantumCircuit(3)  # create a circuit and append the RY variational form
>>> qc.compose(ansatz, inplace=True)
>>> qc.draw()
     ┌──────────┐ ░            ░ ┌──────────┐ ░            ░ ┌──────────┐
q_0: ┤ RY(θ[0]) ├─░───■────────░─┤ RY(θ[3]) ├─░───■────────░─┤ RY(θ[6]) ├
     ├──────────┤ ░ ┌─┴─┐      ░ ├──────────┤ ░ ┌─┴─┐      ░ ├──────────┤
q_1: ┤ RY(θ[1]) ├─░─┤ X ├──■───░─┤ RY(θ[4]) ├─░─┤ X ├──■───░─┤ RY(θ[7]) ├
     ├──────────┤ ░ └───┘┌─┴─┐ ░ ├──────────┤ ░ └───┘┌─┴─┐ ░ ├──────────┤
q_2: ┤ RY(θ[2]) ├─░──────┤ X ├─░─┤ RY(θ[5]) ├─░──────┤ X ├─░─┤ RY(θ[8]) ├
     └──────────┘ ░      └───┘ ░ └──────────┘ ░      └───┘ ░ └──────────┘
>>> ansatz = RealAmplitudes(4, reps=1, entanglement='circular', insert_barriers=True,
... flatten=True)
>>> print(ansatz)
     ┌──────────┐ ░ ┌───┐                ░ ┌──────────┐
q_0: ┤ RY(θ[0]) ├─░─┤ X ├──■─────────────░─┤ RY(θ[4]) ├
     ├──────────┤ ░ └─┬─┘┌─┴─┐           ░ ├──────────┤
q_1: ┤ RY(θ[1]) ├─░───┼──┤ X ├──■────────░─┤ RY(θ[5]) ├
     ├──────────┤ ░   │  └───┘┌─┴─┐      ░ ├──────────┤
q_2: ┤ RY(θ[2]) ├─░───┼───────┤ X ├──■───░─┤ RY(θ[6]) ├
     ├──────────┤ ░   │       └───┘┌─┴─┐ ░ ├──────────┤
q_3: ┤ RY(θ[3]) ├─░───■────────────┤ X ├─░─┤ RY(θ[7]) ├
     └──────────┘ ░                └───┘ ░ └──────────┘
>>> ansatz = RealAmplitudes(4, reps=2, entanglement=[[0,3], [0,2]],
... skip_unentangled_qubits=True, flatten=True)
>>> print(ansatz)
     ┌──────────┐                 ┌──────────┐                 ┌──────────┐
q_0: ┤ RY(θ[0]) ├──■───────■──────┤ RY(θ[3]) ├──■───────■──────┤ RY(θ[6]) ├
     └──────────┘  │       │      └──────────┘  │       │      └──────────┘
q_1: ──────────────┼───────┼────────────────────┼───────┼──────────────────
     ┌──────────┐  │     ┌─┴─┐    ┌──────────┐  │     ┌─┴─┐    ┌──────────┐
q_2: ┤ RY(θ[1]) ├──┼─────┤ X ├────┤ RY(θ[4]) ├──┼─────┤ X ├────┤ RY(θ[7]) ├
     ├──────────┤┌─┴─┐┌──┴───┴───┐└──────────┘┌─┴─┐┌──┴───┴───┐└──────────┘
q_3: ┤ RY(θ[2]) ├┤ X ├┤ RY(θ[5]) ├────────────┤ X ├┤ RY(θ[8]) ├────────────
     └──────────┘└───┘└──────────┘            └───┘└──────────┘
Siehe auch

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

Veraltet seit Version 2.1

Die Klasse qiskit.circuit.library.n_local.real_amplitudes.RealAmplitudes ist ab Qiskit 2.1 veraltet. Sie wird in Qiskit 3.0 entfernt. Verwenden Sie stattdessen die Funktion qiskit.circuit.library.real_amplitudes.

Parameter

  • num_qubits (int | None) – Die Anzahl der Qubits der Schaltung RealAmplitudes.
  • 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]]) – Legt die Verschränkungsstruktur fest. Dies kann eine Zeichenkette sein („full“, „linear“, „reverse_linear“, „circular“ oder „sca“), eine Liste von Ganzzahlpaaren, die die Indizes der miteinander verschränkten Qubits angeben, oder eine aufrufbare Funktion, die eine solche Liste zurückgibt, wenn ihr der Index der Verschränkungsschicht übergeben wird. Standardmäßig wird die Verschränkung „reverse_linear“ verwendet. Beachten Sie, dass die „reverse_linear“-Verschränkung denselben Unitar wie „full“ liefert, jedoch mit weniger Verschränkungsgattern. Weitere Informationen finden Sie im Abschnitt „Beispiele“ unter TwoLocal .
  • 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 der Inhalt des Ausgabeschaltkreises in verschachtelte Objekte eingewickelt, um eine bessere Darstellung zu ermöglichen. Wenn Sie diese Schaltung jedoch für etwas anderes als die 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.

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.