Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Die Microsoft Quantum Development Kit (QDK) enthält eine Reihe von Quantensimulatoren, die modellieren, wie Ihr Programm auf einem Quantencomputer ausgeführt wird. Programme, die Sie auf einem Quantencomputer ausführen, enthalten immer eine bestimmte Art und ein bestimmtes Maß an Rauschen. Mit dem QDKPython Paket können Sie benutzerdefinierte Rauschmodelle erstellen, die in Ihren Simulationen über die NoiseConfig API verwendet werden.
Anweisungen zum Installieren und Verwenden der QDK Simulatoren finden Sie unter Ausführen von Quantensimulationen mit dem QDKPython Paket.
Arten von Rauschen
Jede Operation oder Anweisung in einem Quantenprogramm kann Rauschen verursachen. In dieser Tabelle sind alle Vorgänge und Anweisungen aufgeführt, für die Sie Rauschen festlegen können.
| Rauschquelle | Rauschmodellparameter | Quellbeschreibung |
|---|---|---|
| $X$-Gatter | x |
Einzel-Qubit-Pauli-Gatter, Bit-Flip |
| $Y$-Gatter | y |
Single-Qubit-Gate Pauli , Bit-Flip und Phasen-Flip |
| $Z$-Gatter | z |
Einzel-Qubit-Pauli-Gatter, Phasen-Flip |
| $H$-Gatter | h |
Single-qubit gate Hadamard, erstellt einen gleichgewichteten Superpositionszustand |
| $S$-Gatter | s |
Single-Qubit-Gate, Halb-Pi-Phasenverschiebung |
| $S^\dagger$-Gatter | s_adj |
Einzel-Qubit-Gatter, Adjunkt von $S$ |
| $T$-Gatter | t |
Single-Qubit-Gate, Viertel-Pi-Phasenverschiebung |
| $T^\dagger$-Gatter | t_adj |
Einzel-Qubit-Gatter, Adjunkt von $T$ |
| $S_X$ Gate | sx |
Single-Qubit-Gate, halber Bit-Flip-Drehung |
| $S_X^\dagger$-Gatter | sx_adj |
Einzel-Qubit-Gatter, Adjunkt von $S_X$ |
| $R_X$-Gatter | rx |
Single-Qubit-Gate, allgemeine Phasendrehung um die $x$-Achse |
| $R_Y$-Gatter | ry |
Einzel-Qubit-Gatter, allgemeine Phasendrehung um $y$-Achse |
| $R_Z$-Gate | rz |
Einzel-Qubit-Gatter, allgemeine Phasendrehung um $z$-Achse |
| $CX$-Gatter | cx |
Zwei-Qubit-Tor, kontrolliertes $X$-Gate |
| $CY$-Gatter | cy |
Zwei-Qubit-Tor, kontrolliertes $Y$ Gate |
| $CZ$-Gate | cz |
Zwei-Qubit-Gatter, kontrolliertes $Z$-Gatter |
| $R_{XX}$-Gatter | rxx |
Zwei-Qubit-Gate, analog zu $R_X$ |
| $R_{YY}$-Gatter | ryy |
Zwei-Qubit-Tor, analog zu $R_Y$ |
| $R_{ZZ}$-Gatter | rzz |
Zwei-Qubit-Gate, analog zu $R_Z$ |
| $SWAP$-Gatter | swap |
Zwei-Qubit-Gatter, tauscht die Zustände der Qubits |
| $CCX$-Gatter | ccx |
Drei-Qubit-Tor, Zwei-Qubit-kontrolliertes $X$-Gatter |
| Qubit-Bewegung | mov |
Qubit-Bewegung zwischen Gerätezonen (für neutrale Atomgerätesimulation) |
| Qubit-Messung | mz |
Einzel-Qubit-Messung in der Pauli-$Z$-Basis |
| Qubit-Messung und Zurücksetzen | mresetz |
Single-Qubit-Messung und Zurücksetzen auf den Zustand 0 |
Mit NoiseConfig können Sie vier verschiedene Arten von Rauschen mit jeweils bestimmten Wahrscheinlichkeiten auf die vorangehenden Operationen anwenden. In dieser Tabelle sind die Rauschtypparameter aufgeführt, die Sie mit NoiseConfig festlegen können. Es enthält außerdem einen Parameter für kein Rauschen.
| Rauschtyp | Rauschmodellparameter | Rauschbeschreibung | Beispielverwendung | Beispielbeschreibung |
|---|---|---|---|---|
| Pauli $X$ Rauschen | x |
Bit-Flip | noise.z.x = 0.03 |
Bitfehler treten bei 3 % der $Z$-Operationen auf. |
| Pauli $Y$ Rauschen | y |
Bit-Flip und Phasen-Flip | noise.sx.y = 0.01 |
Bit-Flip und Phasen-Flip treten in 1% der $S_X$-Operationen auf. |
| Pauli $Z$ Rauschen | z |
Phasendrehung | noise.h.z = 0.02 |
Phasenflip tritt bei 2 % der $H$-Operationen auf. |
| Kein Rauschen | i |
Identitätsvorgang, kein Effekt | noise.cz.ix = 0.02 |
Ein Bit-Flip tritt nur auf dem Ziel-Qubit bei 2 % der $CZ$-Operationen auf. |
| Qubit-Verlust | l |
Qubit geht vom Gerät verloren | noise.mov.l = 0.03 |
Ein Qubit geht bei 3 % der Bewegungen zwischen den Gerätezonen in einem Neutralatom-Quantencomputer verloren |
Das Rauschen tritt nach dem Quellenvorgang auf, nicht anstelle des Quellenvorgangs. Beispielsweise bedeutet noise.z.x, dass das Programm das beabsichtigte Z -Gatter auf das Qubit anwendet und anschließend ein unbeabsichtigtes X -Gatter anwendet. Da das Rauschen nach der Quelle angewendet wird, können Sie ein Rauschen konfigurieren, das dieselbe Wirkung wie die Quelle hat. Beispielsweise wendet noise.x.x nach dem beabsichtigten Bit-Flip einen unbeabsichtigten Bit-Flip an.
Hinweis
Die neutralen Atomgerätesimulations-APIs unterstützen Rauschen aus einer begrenzten Anzahl von Quellen. Weitere Informationen finden Sie unter So erstellen Sie Rauschmodelle für Simulationen von Neutralatom-Geräten im QDK.
Erstellen eines Rauschmodells
Führen Sie die folgenden Schritte aus, um ein Rauschmodell für eine Simulation zu erstellen und die Auswirkungen dieses Rauschens auf die Ergebnisse Ihres Quantenprogramms anzuzeigen.
VS CodeÖffnen Sie im Menü "Ansicht" das Menü "Ansicht", und wählen Sie "Befehlspalette" aus.
Geben Sie "Erstellen: Neu" Jupyter Notebookein. Eine leere Jupyter Notebook Datei wird auf einer neuen Registerkarte geöffnet.
Importieren Sie in der ersten Zelle des Notizbuchs die erforderlichen Python Objekte.
from qdk import init, TargetProfile from qdk.openqasm import compile from qdk.simulation import NoiseConfig, run_qir from qdk.widgets import HistogramLegen Sie in einer neuen Zelle das Gerätezielprofil QIR fest, und kompilieren Sie Ihren OpenQASM Schaltkreis in QIR.
init(target_profile=TargetProfile.Base) qasm_src = """ include "stdgates.inc"; qubit[2] qs; bit[2] r; h qs[0]; t qs[0]; cx qs[0], qs[1]; r = measure qs; """ qir = compile(qasm_src)Erstellen Sie ein
NoiseConfig-Objekt, um Ihr Rauschmodell zu erstellen.noise = NoiseConfig() noise.t.z = 0.01 noise.cx.zi = 0.02Dieser Code erzeugt dieses Rauschmodell, wobei die Rauschrate die Wahrscheinlichkeit ist, dass die Quelle die entsprechende Art von Rauschen erzeugt.
Rauschquelle Rauschtyp Rauschrate $T$-Gatter Phasendrehung 1 % $CX$-Gatter Phasenumkehr am Steuerqubit 2% Führen Sie den Simulator mit dem Rauschmodell aus, und zeigen Sie ein Histogramm der Messergebnisse an. Dieser Code simuliert 1.000 Schüsse im Stabilisierungssimulator. Das $T$-Gate verursacht eine Verzweigung des Stabilisators, und der konfigurierte $Z$-Fehler wird nach dem $T$-Gate abgesampt.
results = run_qir(qir, shots=1000, noise=noise, type="stabilizer") Histogram(results, labels="kets")Um die lauten Ergebnisse mit einer rauschfreien Simulation zu vergleichen, führen Sie die Simulation erneut ohne Rauschmodell aus.
results = run_qir(qir, shots=1000, type="stabilizer") Histogram(results, labels="kets")
Festlegen mehrerer Arten von Rauschen für dieselbe Quelle
Sie können verschiedene Arten von Rauschen auf derselben Quelle modellieren, mit unterschiedlichen Wahrscheinlichkeiten für jeden Rauschtyp. Dieser Code legt beispielsweise eine 1% Chance fest, dass ein Bit flip auftritt, und eine 3% Chance, dass ein Phasenflip nach einem Hadamard Gate auftritt.
noise.h.x = 0.01
noise.h.z = 0.03
Wenn Sie mehrere Arten von Rauschen für denselben Vorgang konfigurieren, kann in Ihrem Programm auf jeden Vorgang nur eine Art von Rauschen angewendet werden. Beispielsweise kann jedes Hadamard-Gatter entweder X -Rauschen oder Z -Rauschen aufweisen, jedoch nicht beides.
Funktionen des Rauschmodells
Anstelle von Rauschmodellparametern können Sie diese Rauschfunktionen verwenden, um Ihr Rauschmodell zu erstellen.
Rauschen Pauli festlegen
Um Rauschen in Ihr Modell einzuschließen Pauli , rufen Sie die set_pauli_noise Funktion auf einem Gate- oder Bewegungsvorgang auf.
Übergeben Sie bei Einzel-Qubit-Vorgängen eine Zeichenfolge mit einem Zeichen Pauli und eine Rauschrate. Dieser Code legt beispielsweise eine 1% Chance fest, dass während der Qubit-Bewegung ein Bit flip auftritt.
# Equivalent to: noise.mov.x = 0.01
noise.mov.set_pauli_noise('X', 0.01)
Übergeben Sie bei Zwei-Qubit-Vorgängen eine Pauli Zeichenfolge mit zwei Zeichen und eine Rauschrate. Das erste Zeichen der Pauli Zeichenfolge entspricht Rauschen auf dem Steuer-Qubit, und das zweite Zeichen entspricht Rauschen auf dem Ziel-Qubit. Dieser Code legt beispielsweise korrelierte Phasenumkehrungen nach 1 % der CX -Operationen fest.
# Equivalent to: noise.cx.zz = 0.01
noise.cx.set_pauli_noise('ZZ', 0.01)
Depolarisierendes Rauschen festlegen
Die set_depolarizing Funktion legt gleiche Raten für alle drei Arten von Pauli Rauschen fest. Dieser Code legt z. B. eine 3% Chance fest, dass Pauli Rauschen nach einem $H$-Vorgang auftritt, gleichmäßig verteilt als 1% Chance für jeden der drei Pauli Rauschtypen.
# Equivalent to:
# noise.h.x = 0.01
# noise.h.y = 0.01
# noise.h.z = 0.01
noise.h.set_depolarizing(0.03)
Festlegen von Bit-Flip-Rauschen
Um das Rauschverhältnis für Bit-Flips festzulegen, wenden Sie die set_bitflip-Funktion auf einen Gatter- oder Umlagerungsvorgang an. Dieser Code legt beispielsweise eine 1% Chance fest, dass ein Bit-Flip nach einem $R_Z$-Vorgang auftritt.
# Equivalent to: noise.rz.x = 0.01
noise.rz.set_bitflip(0.01)
Festlegen von Phasen-Flip-Rauschen
Um in einem Vorgang das Rauschverhältnis für Phasen-Flips festzulegen, wenden Sie die set_phaseflip-Funktion auf einen Gatter- oder Umlagerungsvorgang an. Dieser Code legt z. B. eine 1% Chance fest, dass eine Phasendrehung nach einem $R_Y$-Vorgang auftritt.
# Equivalent to: noise.ry.z = 0.01
noise.ry.set_phaseflip(0.01)