NLocal
class qiskit.circuit.library.NLocal(num_qubits=None, rotation_blocks=None, entanglement_blocks=None, entanglement=None, reps=1, insert_barriers=False, parameter_prefix='θ', overwrite_block_parameters=True, skip_final_rotation_layer=False, skip_unentangled_qubits=False, initial_state=None, name='nlocal', flatten=None)
Basen: BlueprintCircuit
Die n-örtliche Schaltkreisklasse.
Die Struktur der n-lokalen Schaltung besteht aus abwechselnden Rotations- und Verschränkungsschichten. In beiden Schichten wirken parametrisierte Schaltungsblöcke in definierter Weise auf die Schaltung ein. In der Rotationsschicht werden die Blöcke übereinander gestapelt, in der Verflechtungsschicht nach der Strategie entanglement . Die Schaltungsblöcke können beliebige Größen haben (kleiner gleich der Anzahl der Qubits in der Schaltung). Jede Ebene wird reps Mal wiederholt, und standardmäßig wird eine abschließende Rotationsebene angefügt.
Ein Rotationsblock auf 2 Qubits und ein Verschränkungsblock auf 4 Qubits unter Verwendung von 'linear' Verschränkung ergibt zum Beispiel die folgende Schaltung.
┌──────┐ ░ ┌──────┐ ░ ┌──────┐
┤0 ├─░─┤0 ├──────────────── ... ─░─┤0 ├
│ Rot │ ░ │ │┌──────┐ ░ │ Rot │
┤1 ├─░─┤1 ├┤0 ├──────── ... ─░─┤1 ├
├──────┤ ░ │ Ent ││ │┌──────┐ ░ ├──────┤
┤0 ├─░─┤2 ├┤1 ├┤0 ├ ... ─░─┤0 ├
│ Rot │ ░ │ ││ Ent ││ │ ░ │ Rot │
┤1 ├─░─┤3 ├┤2 ├┤1 ├ ... ─░─┤1 ├
├──────┤ ░ └──────┘│ ││ Ent │ ░ ├──────┤
┤0 ├─░─────────┤3 ├┤2 ├ ... ─░─┤0 ├
│ Rot │ ░ └──────┘│ │ ░ │ Rot │
┤1 ├─░─────────────────┤3 ├ ... ─░─┤1 ├
└──────┘ ░ └──────┘ ░ └──────┘
| |
+---------------------------------+
repeated reps timesFalls angegeben, können zwischen den einzelnen Blöcken Barrieren eingefügt werden. Wenn ein Ausgangszustandsobjekt bereitgestellt wird, wird es vor dem NLocal hinzugefügt.
Die Funktion n_local() funktion konstruiert eine funktional äquivalente Schaltung, aber schneller.
Die Klasse qiskit.circuit.library.n_local.n_local.NLocal ist ab Qiskit 2.1 veraltet. Sie wird in Qiskit 3.0 entfernt. Dies gilt auch für NLocal-Unterklassen. Verwenden Sie stattdessen die entsprechende Funktion aus dem Modul qiskit.circuit.library.n_local.
Parameter
- num_qubits (int | None) – Die Anzahl der Qubits der Schaltung.
- rotation_blocks (QuantumCircuit |list[QuantumCircuit] | qiskit.circuit.Instruction |list[qiskit.circuit.Instruction] | None) – Die in den Rotationsschichten verwendeten Blöcke. Werden mehrere übergeben, werden diese nacheinander angewendet (wie neue Unterebenen).
- entanglement_blocks (QuantumCircuit |list[QuantumCircuit] | qiskit.circuit.Instruction |list[qiskit.circuit.Instruction] | None) – Die in den Verschränkungsschichten verwendeten Blöcke. Werden mehrere übergeben, werden diese nacheinander angewendet. Informationen zur Verwendung unterschiedlicher Verschränkungen für die Unterebenen finden Sie unter
get_entangler_map(). - entanglement (list[int] | list[list[int]] | None) – Die Indizes, die angeben, auf welche Qubits die Eingabeblöcke wirken. Wenn
None, werden die Verschränkungsblöcke am oberen Ende der Schaltung angebracht. - reps (int) – Gibt an, wie oft die Rotations- und Verschränkungsblöcke wiederholt werden.
- insert_barriers (bool) – Wenn
True, werden zwischen den einzelnen Schichten Barrieren eingefügt. WennFalse, werden keine Barrieren eingefügt. - parameter_prefix (str) – Das Präfix, das verwendet wird, wenn Standardparameter generiert werden.
- overwrite_block_parameters (bool |list[list[Parameter]]) – Wenn die Parameter in den hinzugefügten Blöcken überschrieben werden sollen. Wenn
False, werden die Parameter in den Blöcken nicht geändert. - skip_final_rotation_layer (bool) – Ob dem Stromkreis eine abschließende Rotationsschicht hinzugefügt wird.
- skip_unentangled_qubits (bool) – Wenn
True, wirken die Rotationsgatter nur auf verschränkte Qubits. WennFalse, wirken die Rotationsgatter auf alle Qubits. - initial_state (QuantumCircuit | None) – Ein
QuantumCircuitObjekt, mit dem ein Anfangszustand beschrieben werden kann, der dem NLocal-Schaltkreis vorangestellt wird. - name (str) – Der Name der Rennstrecke.
- 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 ü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.
Erhöht
- ValueError - Wenn der Parameter
repskleiner als oder gleich 0 ist. - TypeError - Wenn der Parameter
repskein int-Wert ist.
Attribute
entanglement
Holen Sie sich die Verflechtungsstrategie.
Rückgabe
Die Verflechtungsstrategie, siehe get_entangler_map() für weitere Einzelheiten zur Interpretation des Formats.
entanglement_blocks
Die Blöcke in den Verflechtungsschichten.
Rückgabe
Die Blöcke in den Verflechtungsschichten.
flatten
Gibt zurück, ob die Schaltung in verschachtelte Gatter/Anweisungen eingeschlossen oder abgeflacht ist.
initial_state
Rückgabe des Ausgangszustands, der vor dem n-örtlichen Schaltkreis hinzugefügt wird.
Rückgabe
Der Ausgangszustand.
insert_barriers
Ob Barrieren zwischen den Schichten eingefügt werden oder nicht.
Rückgabe
True, wenn zwischen den Schichten Barrieren eingefügt sind, False , wenn nicht.
num_layers
Rückgabe der Anzahl der Schichten in der n-örtlichen Schaltung.
Rückgabe
Die Anzahl der Schichten in der Schaltung.
num_parameters_settable
Die Anzahl der Parameter, die insgesamt auf unterschiedliche Werte eingestellt werden können.
Dies ändert sich nicht, wenn die Parameter gebunden oder gegen gleiche Parameter ausgetauscht werden, und unterscheidet sich daher von num_parameters , das die Anzahl der eindeutigen Parameter objekte zählt, die sich derzeit in der Schaltung befinden.
Rückgabe
Die Anzahl der ursprünglich in der Schaltung verfügbaren Parameter.
Für diese Menge muss die Schaltung noch nicht gebaut werden.
num_qubits
Gibt die Anzahl der Qubits in dieser Schaltung zurück.
Rückgabe
Die Anzahl der Qubits.
ordered_parameters
Die in der zugrunde liegenden Schaltung verwendeten Parameter.
Dazu gehören auch Float-Werte und Duplikate.
Beispiele
>>> # prepare circuit ...
>>> print(nlocal)
┌───────┐┌──────────┐┌──────────┐┌──────────┐
q_0: ┤ Ry(1) ├┤ Ry(θ[1]) ├┤ Ry(θ[1]) ├┤ Ry(θ[3]) ├
└───────┘└──────────┘└──────────┘└──────────┘
>>> nlocal.parameters
{Parameter(θ[1]), Parameter(θ[3])}
>>> nlocal.ordered_parameters
[1, Parameter(θ[1]), Parameter(θ[1]), Parameter(θ[3])]Rückgabe
Die in der Schaltung verwendeten Parameterobjekte.
parameter_bounds
Die Parametergrenzen für die ungebundenen Parameter in der Schaltung.
Rückgabe
Eine Liste von Paaren, die die Grenzen angeben, als (untere, obere). None bedeutet, dass der Parameter in der entsprechenden Richtung nicht begrenzt ist. Wenn None zurückgegeben wird, ist das Problem völlig unbegrenzt.
preferred_init_points
Die Ausgangspunkte für die Parameter. Kann bei der Optimierung als erste Vermutung gespeichert werden.
Rückgabe
Die Anfangswerte für die Parameter oder Keine, wenn keine festgelegt wurden.
reps
Die Anzahl der Wiederholungen von Rotations- und Verschränkungsblock.
Rückgabe
Die Anzahl der Wiederholungen.
rotation_blocks
Die Blöcke in den Rotationsebenen.
Rückgabe
Die Blöcke in den Rotationsebenen.
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_circuitMethoden
add_layer
add_layer(other, entanglement=None, front=False)
Anhängen einer weiteren Ebene an das NLocal.
Parameter
- other (QuantumCircuit |qiskit.circuit.Instruction) – Die zu kombinierende Ebene kann ein weiteres „NLocal“, eine „Instruction“ oder ein „Gate“ oder ein „ QuantumCircuit “ sein.
- entanglement (list[int] | str |list[list[int]] | None) – Die Verschränkungs- oder Qubit-Indizes.
- front (bool) – Wenn True, wird
othervorne angehängt, sonst hinten.
Rückgabe
selbst, so dass verkettete Kompositionen möglich sind.
Erhöht
TypeError - Wenn der andere nicht kompatibel ist, d.h. keine Anweisung ist und keine Methode to_instruction hat.
Rückgabetyp
assign_parameters
assign_parameters(parameters, inplace=False, **kwargs)
Weisen Sie dem n-local-Kreis Parameter zu.
Diese Methode unterstützt auch die Übergabe einer Liste anstelle eines Wörterbuchs. Wird eine Liste übergeben, so muss diese die gleiche Länge haben wie die Anzahl der ungebundenen Parameter in der Schaltung. Die Zuweisung der Parameter erfolgt in der Reihenfolge der Parameter in ordered_parameters().
Rückgabe
Eine Kopie der NLocal-Schaltung mit den angegebenen Parametern.
Erhöht
AttributeError - Wenn die Parameter als Liste angegeben werden und nicht mit der Anzahl der Parameter übereinstimmen.
Parameter
- parameters (Mapping[Parameter, ParameterExpression |float] | Sequence[ParameterExpression |float])
- inplace (bool)
Rückgabetyp
QuantumCircuit | Keine
get_entangler_map
get_entangler_map(rep_num, block_num, num_block_qubits)
Holen Sie sich die Entangler-Karte für in der Wiederholung rep_num und den Block block_num.
Die Entanglerkarte für den aktuellen Block wird aus dem Wert von self.entanglement abgeleitet. Nachfolgend sind die verschiedenen Fälle aufgeführt, wobei i und j die Wiederholungszahl bzw. die Blocknummer und n die Anzahl der Qubits im Block bezeichnen.
verschränkungsart | verwicklungskarte |
|---|---|
None | [[0, ..., n - 1]] |
str (z. B. 'full') | die angegebene Konnektivität auf n den Qubits |
List[int] | [entanglement] |
List[List[int]] | entanglement |
List[List[List[int]]] | entanglement[i] |
List[List[List[List[int]]]] | entanglement[i][j] |
List[str] | die in entanglement[i] |
List[List[str]] | die in entanglement[i][j] |
Callable[int, str] | Entspricht List[str] |
Callable[int, List[List[int]]] | Entspricht List[List[List[int]]] |
Beachten Sie, dass alle Indizes modulo der Länge des Arrays, auf das sie wirken, genommen werden müssen, d.h. es wird kein Out-of-Bounds-Index-Fehler ausgelöst, sondern wir wiederholen vom Anfang der Liste.
Parameter
- rep_num (int) – Die aktuelle Wiederholung, in der wir uns befinden.
- block_num (int) – Die Blocknummer innerhalb der Verschränkungsschichten.
- num_block_qubits (int) – Die Anzahl der Qubits im Block.
Rückgabe
Die Entangler-Karte für den aktuellen Block in der aktuellen Wiederholung.
Erhöht
ValueError - Wenn der Wert von entanglement nicht auf eine entsprechende Entangler-Karte übertragen werden konnte.
Rückgabetyp
get_unentangled_qubits
get_unentangled_qubits()
Ermittelt die Indizes der nicht verschränkten Qubits in einer Menge.
Rückgabe
Die unverwirrten Qubits.
Rückgabetyp