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)
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 Rotationen und 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 Rotationen auf eine einzige 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]) ├────────────
└──────────┘└───┘└──────────┘ └───┘└──────────┘Die Funktion real_amplitudes() funktion konstruiert eine funktional äquivalente Schaltung, aber schneller.
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 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