Visualisieren von Quantenschaltungsdiagrammen mit Q#
Quantenschaltungsdiagramme sind eine visuelle Darstellung von Quantenvorgängen. Sie zeigen den Fluss von Qubits durch das Quantenprogramm, einschließlich der Tore und Messungen, die auf sie angewendet werden.
In diesem Artikel erfahren Sie, wie Sie Quantenalgorithmen mit Quantenschaltungsdiagrammen mithilfe von Visual Studio Code und Jupyter Notebooks visuell darstellen.
Weitere Informationen zu Quantenschaltungsdiagrammkonventionen finden Sie unter Konventionen für Quantenschaltungen.
Voraussetzungen
Wenn Sie Visual Studio Code zum Visualisieren von Quantenschaltungen verwenden möchten, benötigen Sie Folgendes:
- Die neueste Version von Visual Studio Code , oder öffnen Sie VS Code im Web.
- Die neueste Version der Azure Quantum Development Kit-Erweiterung .
Quantenschaltungen mit Visual Studio Code
Führen Sie die folgenden Schritte aus, um Quantenschaltungen von Q# Programmen in Visual Studio Code zu visualisieren. Weitere Informationen zu Quantenschaltungsdiagrammkonventionen finden Sie unter Konventionen für Quantenschaltungen.
Anzeigen von Schaltkreisdiagrammen für ein Q# Programm
Öffnen Sie eine Q# Datei in Visual Studio Code, oder laden Sie eines der Quantenbeispiele.
Um die Quantenschaltung des Q# Programms zu visualisieren, wählen Sie Ansicht –> Befehlspalette aus, und geben Sie "circuit" ein, wodurch die Q#Option : Verbindung anzeigen angezeigt werden soll. Sie können auch in der Liste der Befehle unter
@EntryPoint()
auf Circuit klicken.Die Verbindung wird im Q# Verbindungsfenster angezeigt. Die folgende Schaltung entspricht beispielsweise einem Vorgang, der ein Qubit in eine Superposition versetzt und dann misst. Das Schaltkreisdiagramm zeigt ein Qubitregister, das mit dem Zustand |0⟩ initialisiert wird. Anschließend wird das Hadamard-Gate H auf das Qubit angewendet, gefolgt von einem Messvorgang, der durch ein Metersymbol dargestellt wird.
Anzeigen von Schaltkreisdiagrammen für Vorgänge
Sie können die Quantenschaltung für einen einzelnen Q# Vorgang visualisieren. Klicken Sie hierzu in der Codelinse, die oberhalb der Vorgangsdeklaration angezeigt wird, auf die Schaltfläche Leitung .
Anzeigen von Schaltkreisdiagrammen beim Debuggen
Beim Debuggen eines Q# Programms können Sie die Quantenschaltung basierend auf dem aktuellen Status des Programms visualisieren.
Klicken Sie in der Liste der Codeobjektivbefehle unter
@EntryPoint()
auf die Schaltfläche Debuggen.Erweitern Sie in der Ansicht Ausführen und Debuggen auf der linken Seite den Abschnitt Quantenschaltung im Bereich Variablen , um die Verbindung beim Durchlaufen des Programms anzuzeigen.
Sie können den Code schrittweise durchlaufen und Haltepunkte in verschiedenen Punkten festlegen, um die Leitungsaktualisierung während der Programmausführung anzuzeigen.
Die aktuelle Quantenschaltung wird im Q# Schaltkreisbereich angezeigt. Dieses Schaltkreisdiagramm stellt den aktuellen Zustand des Simulators dar, d. h. die Gates, die bis zum aktuellen Ausführungspunkt angewendet wurden.
Quantenschaltungen mit Jupyter Notebooks
In Jupyter Notebooks können Sie Quantenschaltungen mithilfe des qsharp-widgets
Pakets visualisieren. Dieses Paket stellt ein Widget bereit, das ein Quantenschaltungsdiagramm als SVG-Bild rendert.
Wählen Sie in Visual Studio Code die Option Befehlspalette anzeigen > und dann Create: Neue Jupyter Notebook aus.
Führen Sie in der ersten Zelle des Notebooks den folgenden Code aus, um das Q# Modul zu importieren.
import qsharp
Fügen Sie eine neue Zelle hinzu , und geben Sie den Code ein Q# . Der folgende Code bereitet beispielsweise einen Glockenzustand vor.
%%qsharp // Prepare a Bell State. use register = Qubit[2]; H(register[0]); CNOT(register[0], register[1]);
Sie können die
dump_circuit()
-Funktion verwenden, um eine Quantenschaltung basierend auf dem aktuellen Zustand des Programms anzuzeigen. Das Schaltkreisdiagramm zeigt beispielsweise zwei Qubitregister, die mit dem Zustand |0⟩ initialisiert werden. Anschließend wird das Hadamard-Gate H auf das erste Qubit angewendet. Danach wird ein CNOT-Gate mithilfe des ersten Qubits als Steuerelement angewendet, das als Punkt dargestellt wird, und das zweite Qubit als target, das als X dargestellt wird.qsharp.dump_circuit()
q_0 ── H ──── ● ── q_1 ───────── X ──
Sie können Quantenschaltungen mithilfe des
qsharp-widgets
Pakets als SVG-Image visualisieren. In diesem Fall wird das CNOT-Gate als eine Linie dargestellt, die die beiden Qubits verbindet, mit einem Punkt auf dem Steuerqubit und einem umschriebenen Kreuz auf dem target Qubit. Weitere Informationen finden Sie unter Quantenschaltungskonventionen.from qsharp_widgets import Circuit Circuit(qsharp.dump_circuit())
Anzeigen von Schaltkreisdiagrammen für einen Eintragsausdruck
Sie können ein Schaltkreisdiagramm für jedes Programm mit einem Eintragsausdruck generieren, indem Sie den Eintragsausdruck aufrufen qsharp.circuit()
und als Argument übergeben.
Fügen Sie beispielsweise eine neue Zelle hinzu, und kopieren Sie den folgenden Code, der einen GHZ-Zustand vorbereitet.
%%qsharp open Microsoft.Quantum.Diagnostics; open Microsoft.Quantum.Measurement; operation GHZSample(n: Int) : Result[] { use qs = Qubit[n]; H(qs[0]); ApplyToEach(CNOT(qs[0], _), qs[1...]); let results = MeasureEachZ(qs); ResetAll(qs); return results; }
Fügen Sie eine neue Zelle hinzu, und führen Sie den folgenden Code aus, um die Verbindung zu visualisieren. Bereiten Sie beispielsweise einen GHZ-Zustand mit 3 Qubits vor.
Circuit(qsharp.circuit("GHZSample(3)"))
Anzeigen von Schaltkreisdiagrammen für Vorgänge mit Qubits
Sie können Schaltkreisdiagramme für jeden Vorgang generieren, der Qubits oder Arrays von Qubits verwendet. Das Diagramm zeigt so viele Drähte, wie eingabebasiertes Qubit vorhanden ist, sowie alle zusätzlichen Qubits, die innerhalb des Vorgangs zugeordnet werden. Wenn der Vorgang ein Array von Qubits (Qubit[])
akzeptiert, zeigt die Leitung das Array als Register von 2 Qubits an.
Fügen Sie eine neue Zelle hinzu, und kopieren Sie das folgende Beispiel. Dieser Code bereitet einen Cat-Zustand vor.
%%qsharp operation PrepareCatState(register : Qubit[]) : Unit { H(register[0]); ApplyToEach(CNOT(register[0], _), register[1...]); }
Fügen Sie eine neue Zelle hinzu, und führen Sie den folgenden Code aus, um die Verbindung des
PrepareCatState
Vorgangs zu visualisieren.Circuit(qsharp.circuit(operation="PrepareCatState"))
Bedingungen, die sich auf Schaltkreisdiagramme auswirken
Beim Visualisieren von Quantenschaltungen können sich die folgenden Bedingungen auf die Visualisierung des Schaltkreisdiagramms auswirken.
Dynamische Leitungen
Schaltkreisdiagramme werden generiert, indem die gesamte klassische Logik innerhalb eines Q# Programms ausgeführt wird und alle zugeordneten Qubits oder angewendeten Gates nachverfolgt werden. Schleifen und Bedingungen werden unterstützt, solange sie sich nur mit klassischen Werten befassen.
Programme, die Schleifen und bedingte Ausdrücke enthalten, die Qubitmessungsergebnisse verwenden, sind jedoch schwieriger mit einem Schaltkreisdiagramm darzustellen. Beispiel: Ein Ausdruck wie der folgende
if (M(q) == One) {
X(q)
}
kann nicht mit einem einfachen Schaltkreisdiagramm dargestellt werden, da die Gates von einem Messergebnis abhängig sind. Eine solche Leitung wird als dynamische Leitung bezeichnet.
Schaltdiagramme können für dynamische Schaltungen generiert werden, indem das Programm im Quantensimulator ausgeführt wird und die Gates während der Anwendung nachverfolgt werden. Dies wird als Ablaufverfolgungsmodus bezeichnet, da die Qubits und Gates während der Simulation nachverfolgt werden.
Der Nachteil von nachverfolgten Schaltkreisen besteht darin, dass sie nur das Messergebnis und die daraus resultierenden Gate-Anwendungen für eine einzelne Simulation erfassen. Wenn das Messergebnis im obigen Beispiel lautet, wird Zero
das X
Gate im Diagramm nicht angezeigt. Eine andere Ausführung der Simulation zeigt möglicherweise eine etwas andere Schaltung an.
Zielprofil
Das aktuell ausgewählte target Profil beeinflusst, wie Schaltkreisdiagramme generiert werden. Zielprofile werden verwendet, um die Funktionen der target Hardware und die Einschränkungen anzugeben, die für das Quantenprogramm gelten.
Wenn das target Profil auf Uneingeschränkt festgelegt ist, zeigen die Schaltkreisdiagramme die Quantenvorgänge, die Q# im Programm aufgerufen werden. Wenn das target Profil auf QIR-Basis festgelegt ist, zeigen die Schaltkreisdiagramme die Quantenvorgänge, die auf Hardware ausgeführt werden, wenn das Programm mit diesem target Profil an Azure Quantum übermittelt wird.
Hinweis
Wechseln Sie zum Auswählen des target Profils in VS Code zu Ansicht –> Befehlspalette, und schreiben Q#Sie: Festlegen des Azure Quantum QIR-Profilstarget. Sie können oder
QIR Base Profile
aus der Dropdownliste auswählenUnrestricted
.Um ein Profil in Python auszuwählen target , schreiben
qsharp.init(target_profile=qsharp.TargetProfile.Unrestricted)
Sie oderqsharp.init(target_profile=qsharp.TargetProfile.Base)
.
Insbesondere werden Gatezerlegungen angewendet, die die resultierende Leitung mit den Funktionen der target Hardware kompatibel machen. Dabei handelt es sich um die gleichen Analysevorgänge, die während der Codegenerierung und -übermittlung an Azure Quantum angewendet werden.
Betrachten Sie beispielsweise das folgende Q# Programm, das ein Qubit und ein Array von Qubits misst.
namespace Sample { open Microsoft.Quantum.Measurement; @EntryPoint() operation Main() : (Result, Result[]) { // The `M` operation performs a measurement of a single qubit in the // computational basis, also known as the Pauli Z basis. use q = Qubit(); let result = M(q); Reset(q); // The `MeasureEachZ` operation measures each qubit in an array in the // computational basis and returns an array of `Result` values. use qs = Qubit[2]; let results = MeasureEachZ(qs); return (result, results); } }
Wenn target profile auf Unrestricted festgelegt ist, entsprechen die auf der Leitung angezeigten Gates genau den Quantenvorgängen, die Q# im Programm aufgerufen werden.
Wenn das target Profil QIR-Basis ist, sieht die Schaltung anders aus. Da das Basisprofil targets die Wiederverwendung von Qubits nach der Messung nicht zulässt, wird die Messung jetzt stattdessen auf einem verschränkten Qubit durchgeführt. Da
Reset
der Vorgang kein unterstütztes Gate im Basisprofil ist, wird er gelöscht. Die resultierende Leitung entspricht dem, was auf der Hardware ausgeführt wird, wenn dieses Programm mit diesem target Profil an Azure Quantum übermittelt wird.
Feedback
https://aka.ms/ContentUserFeedback.
Bald verfügbar: Im Laufe des Jahres 2024 werden wir GitHub-Issues stufenweise als Feedbackmechanismus für Inhalte abbauen und durch ein neues Feedbacksystem ersetzen. Weitere Informationen finden Sie unterFeedback senden und anzeigen für