VF2PostLayout
class qiskit.transpiler.passes.VF2PostLayout(*args, **kwargs)
Basen: AnalysisPass
Ein Durchgang zur Verbesserung eines bestehenden Layouts nach der Transpilierung eines Schaltkreises auf einen Kopplungsgraphen, als ein Untergraphen-Isomorphismus-Problem, gelöst von VF2++.
Anders als der VF2Layout transpiler-Durchgang, der darauf ausgelegt ist, ein erstes Layout für eine Schaltung zu einem frühen Zeitpunkt in der Transpilierungspipeline zu finden, ist dieser Transpiler-Durchgang darauf ausgelegt, ein besseres Layout zu finden, nachdem die Transpilierung abgeschlossen ist. In der ersten Layout-Phase des Transpilers stehen nicht so viele Informationen zur Verfügung wie nach der Transpilierung. Dieser Durchgang ist so konzipiert, dass er in einer ähnlichen Pipeline wie die Layout-Durchgänge gepaart wird. In diesem Durchgang werden alle ungenutzten Drähte aus der Schaltung entfernt, VF2 wird verwendet, um einen Untergraphen im Kopplungsgraphen zu finden, auf dem die Schaltung mit besserer Wiedergabetreue laufen kann, und dann wird das Schaltungslayout aktualisiert, um die neuen Qubits zu verwenden. Der in diesem Durchgang verwendete Algorithmus ist beschrieben in arXiv:2209.15512.
Wenn eine Lösung gefunden wird, bedeutet dies, dass für die Schaltung ein niedrigeres Fehlerlayout verfügbar ist. Wenn eine Lösung gefunden wird, wird das Layout im Property Set als property_set['post_layout'] eingestellt. Wenn jedoch keine Lösung oder keine bessere Lösung gefunden wird, wird keine property_set['post_layout'] eingestellt. Der Grund für das Anhalten wird in allen Fällen in property_set['VF2PostLayout_stop_reason'] festgelegt und ist einer der Werte, die in VF2PostLayoutStopReason aufgezählt werden und die folgenden Werte haben:
"solution found": Wenn eine Lösung gefunden wurde."no better solution found": Wenn das ursprüngliche Layout der Schaltung die beste Lösung ist."nonexistent solution": Wenn keine Lösung gefunden wurde.">2q gates in basis": Wenn VF2PostLayout nicht mit der Basis der Schaltung arbeiten kann.
Standardmäßig wird in diesem Durchgang eine heuristische Wertungskarte auf der Grundlage der Fehlerquoten in der angegebenen target erstellt. Es können jedoch vor diesem Durchgang Analysedurchläufe durchgeführt und vf2_avg_error_map im Eigenschaftssatz mit einer ErrorMap -Instanz eingestellt werden. Wenn ein Wert NaN ist, der als ideale Kante behandelt wird, wird zum Beispiel eine Fehlerkarte wie folgt erstellt:
from qiskit.transpiler.passes.layout.vf2_utils import ErrorMap
error_map = ErrorMap(3)
error_map.add_error((0, 0), 0.0024)
error_map.add_error((0, 1), 0.01)
error_map.add_error((1, 1), 0.0032)die die Fehlerkarte für ein 2-Qubit-Ziel darstellt, bei dem die durchschnittliche 1q Fehlerrate 0.0024 auf Qubit 0 und 0.0032 auf Qubit 1 beträgt. Dann ist die durchschnittliche 2q Fehlerquote für Gatter, die auf (0, 1) arbeiten, 0.01 und (1, 0) wird vom Ziel nicht unterstützt. Dieser wird für die Punktevergabe verwendet, wenn er als Schlüssel vf2_avg_error_map in den Eigenschaften festgelegt ist, wenn VF2PostLayout ausgeführt wird.
Initialisieren einer VF2PostLayout Pass-Instanz
Parameter
- target (Target) – Ein Ziel, das das Backend-Gerät darstellt, auf dem
VF2PostLayoutausgeführt werden soll. - seed (int) – Setzt den Seed des PRNGs. -1 Bedeutet, dass keine Knotenmischung stattfindet.
- call_limit (int) – Die Anzahl der Zustandsbesuche, die bei jeder Ausführung von VF2 versucht werden sollen.
- time_limit (float) – Die Gesamtzeit in Sekunden für die Ausführung
VF2PostLayout - strict_direction (bool) – Ob der Durchlauf so konfiguriert ist, dass er der strengen Richtung im Kopplungsdiagramm folgt. Ist dieser Wert auf false gesetzt, behandelt der Pass jede Kante im Kopplungsgraphen als schwache Kante und der Interaktionsgraph ist ungerichtet. Für die Bewertung der Layouts wird die durchschnittliche Fehlerrate für jedes Qubit und die Verbindung 2q verwendet. Dadurch kann der Pass vor der Basisübersetzung ausgeführt werden und mit allen 1q und 2q Operationen arbeiten. Wenn
strict_direction=Truejedoch erwartet, dass der Pass das EingabeDAGCircuitobjekt zurun()in der Zielmenge der Anweisungen enthalten ist. - max_trials (int) – Die maximale Anzahl der Versuche, die VF2 durchführen muss, um ein Layout zu finden. Ein Wert von
0(Standardwert) bedeutet "unbegrenzt".
Erhöht
TypeError - Zur Laufzeit, wenn target nicht angegeben ist.
Attribute
is_analysis_pass
Prüfen Sie, ob der Pass ein Analysepass ist.
Wenn der Pass ein AnalysisPass, ist, bedeutet dies, dass der Pass die DAG analysieren und die Ergebnisse dieser Analyse in den Eigenschaftssatz schreiben kann. Änderungen an der DAG sind bei dieser Art von Pass nicht zulässig.
is_transformation_pass
Prüfen Sie, ob der Pass ein Transformationspass ist.
Wenn es sich bei dem Pass um TransformationPass, handelt, bedeutet dies, dass der Pass die DAG manipulieren kann, aber den Eigenschaftssatz nicht ändern kann (aber er kann gelesen werden).
Methoden
execute
execute(passmanager_ir, state, callback=None)
Ausführen der Optimierungsaufgabe für die Eingabe Qiskit IR.
Parameter
- passmanager_ir (IR) – Qiskit IR zur Optimierung.
- state (PassManagerState) – Status, der mit der Workflow-Ausführung durch den Passmanager selbst verbunden ist.
- callback (Callable[[Task, IR_OUT, PropertySet, float, int], None] | None) – Eine Callback-Funktion, die bei jeder Ausführung einer Optimierungsaufgabe aufgerufen wird.
Rückgabe
Optimierte Qiskit IR und Stand des Workflows.
Rückgabetyp
Tupel [ IR_OUT, PassManagerState ]
name
run
update_status
update_status(state, run_state)
Aktualisieren Sie den Workflow-Status.
Parameter
- state (PassManagerState) – Übergeben Sie den Status des Managers zur Aktualisierung.
- run_state (RunState) – Erledigungsstatus der aktuellen Aufgabe.
Rückgabe
Aktualisierter Status des Passmanagers.
Rückgabetyp