Ausführen von Quantensimulationen in der QDK Erweiterung für Visual Studio Code

Die MicrosoftQuantum Development Kit (QDK) Erweiterung für Visual Studio Code (VS Code) führt Q# und OpenQASM Programme automatisch auf seinem lokalen Sparsesimulator aus.

In diesem Artikel wird erläutert, wie Sie Programme auf dem lokalen Simulator ausführen und wie Sie Q# Rauschen zu Pauli Simulationen hinzufügen. Wenn Sie die anderen QDK Simulatoren von Python verwenden möchten, lesen Sie Ausführen von Quantensimulationen mit dem QDKPython Paket.

Funktionsweise des lokalen Simulators

Der Sparse-Simulator speichert nur die Nichtnull-Amplituden eines Quantenzustands. Wenn die meisten Amplituden der Rechenbasis null sind, verwendet diese Darstellung weniger Arbeitsspeicher und kann einige Programme mit mehr Qubits als ein Vollzustandssimulator simulieren, der jede Amplitude speichert.

Der Leistungsvorteil hängt davon ab, ob der Quantenzustand in der Rechenbasis spärlich bleibt. Weitere Informationen finden Sie unter Jaques und Häner (arXiv:2105.01533).

Quantenprogramm in VS Code ausführen

  1. Installieren Sie die QDK Erweiterung für VS Code.
  2. Öffnen Sie eine Datei vom Typ Q# (.qs) oder OpenQASM (.qasm).
  3. Wählen Sie "Ausführen" aus der Codelinse am Anfang der Datei oder oberhalb des Q#Main Vorgangs aus.

Die Simulationsausgabe wird im VS Code Terminal angezeigt. Wählen Sie für Q# Programme "Debuggen " aus, um den Quantenzustand des Programms während der Ausführung zu prüfen.

Rauschen zu Q# Simulationen hinzufügen

Der sparse Simulator unterstützt Pauli Rauschen für Q# Programme in der QDK Erweiterung. Verwenden Sie ConfigurePauliNoise, um die Wahrscheinlichkeiten von Pauli $X$-, $Y$- und $Z$-Fehlern in einem Programm festzulegen. Die QDK Erweiterungseinstellungen unterstützen auch ein globales Pauli Rauschmodell.

Note

Sie können einer QDK Simulation in der OpenQASM Erweiterung kein Rauschmodell hinzufügen. Verwenden Sie das QDKPython Paket und die NoiseConfig API, um betriebsspezifische Rauschmodelle für Q# oder OpenQASM Programme zu erstellen.

Rauschen in den VS Code Einstellungen hinzufügen Pauli

  • Legen Sie in VS Code globales Rauschen Pauli für Q# Programme in der Q#> Simulation:Pauli Benutzereinstellung: Rauschen für die QDK Erweiterung fest.

Screenshot der globalen Q#Pauli Rauscheinstellungen für die QDK Erweiterung in VS Code.

Die Rauscheinstellungen gelten für Histogrammergebnisse für alle Gatter, Messungen und Qubits in allen Q# Programmen in VS Code.

Ohne Rauschen zeigt ein Histogramm für dieses GHZ Beispielprogramm $\ket{00000}$ für etwa die Hälfte der Messungen und $\ket{11111}$ für die andere Hälfte.

import Std.Diagnostics.*;
import Std.Measurement.*;

operation Main() : Result[] {
    let num = 5;
    return GHZSample(num);
}

operation GHZSample(n: Int) : Result[] {
    use qs = Qubit[n];
    H(qs[0]);
    ApplyCNOTChain(qs);
    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

Screenshot eines Histogramms ohne Rauschen und Spitzen, bei denen alle Qubits null oder alle Qubits eins sind.

Bei einer 1% Bit-Flip-Rauschrate beginnen die Ergebnisse sich zu streuen. Bei 25%ist das Histogramm von reinem Rauschen nicht zu unterscheiden.

Screenshot von Histogrammen für ein Q# Programm mit 1% und 25% Bit-Flip-Rauschraten.

Hinzufügen von Pauli Rauschen zu einzelnen Q# Programmen

Wird verwendet ConfigurePauliNoise , um das Rauschmodell eines Q# Programms festzulegen oder zu ändern und zu steuern, wann und wo Rauschen auftritt.

Note

Die VS Code Einstellungen wenden Rauschen auf alle Q# Programme an, aber ConfigurePauliNoise überschreibt diese Einstellungen für das Programm, das es aufruft.

Fügen Sie im vorherigen Programm unmittelbar nach der Qubit-Zuordnung Rauschen hinzu:

operation GHZSample(n: Int) : Result[] {
    use qs = Qubit[n];

    // 5% bit-flip noise applies to all subsequent operations.
    ConfigurePauliNoise(0.05, 0.0, 0.0);

    H(qs[0]);
    ApplyCNOTChain(qs);
    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

Screenshot der Histogrammergebnisse, wenn 5% Bit-Flip-Rauschen nach der Qubit-Zuweisung beginnt.

Um Rauschen nur auf den Messvorgang anzuwenden, legen Sie das Rauschmodell unmittelbar vor der Messung fest und löschen Sie es anschließend:

operation GHZSample(n: Int) : Result[] {
    use qs = Qubit[n];
    H(qs[0]);
    ApplyCNOTChain(qs);

    // Noise applies only to the measurement operation.
    ConfigurePauliNoise(0.05, 0.0, 0.0);

    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

Screenshot der Histogrammergebnisse, wenn 5% Bit-Flip-Rauschen unmittelbar vor der Messung beginnt.

Um die Rauschkonfiguration an verschiedenen Stellen in Ihrem Programm zu ändern oder zu löschen, rufen Sie ConfigurePauliNoise mehrmals an. Wenden Sie beispielsweise 5% Bit-Flip-Rauschen auf das Hadamard-Gate an, und löschen Sie dann die Rauschkonfiguration für den Rest des Programms.

operation GHZSample(n: Int) : Result[] {
    use qs = Qubit[n];

    // Noise applies to the H operation.
    ConfigurePauliNoise(0.05, 0.0, 0.0);
    
    H(qs[0]);

    // Clear the noise settings.
    ConfigurePauliNoise(0.0, 0.0, 0.0);
    
    ApplyCNOTChain(qs);
    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

Andere Q# Rauschfunktionen

ConfigurePauliNoise unterstützt jedes Pauli Rauschmodell. Verwenden Sie diese Funktionen und Vorgänge aus dem Std.Diagnostics-Namespace, um Rauscheffekte zu konfigurieren oder anzuwenden:

Function Description Example
ConfigurePauliNoise Legt Pauli Rauschen für eine Simulation fest. Übergeben Sie entweder die Wahrscheinlichkeiten von Pauli $X$, $Y$, und $Z$-Fehler oder ein Pauli Rauschmodell. Die Konfiguration gilt für alle nachfolgenden Tore, Messungen und Qubits in einem Q# Programm und setzt die VS Code Erweiterungsgeräuscheinstellungen außer Kraft. Nachfolgende Aufrufe überschreiben frühere Konfigurationen. ConfigurePauliNoise(0.1, 0.0, 0.5)
oder
ConfigurePauliNoise(BitFlipNoise(0.1))
BitFlipNoise Gibt ein Rauschmodell mit nur Pauli $X$-Fehlern mit der angegebenen Wahrscheinlichkeit zurück. 10% Bit-Flip-Rauschen:
ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0)
PhaseFlipNoise Gibt ein Rauschmodell mit nur Pauli $Z$-Fehlern mit der angegebenen Wahrscheinlichkeit zurück. 10% Phasen-Flip-Rauschen:
ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1)
DepolarizingNoise Gibt ein Rauschmodell mit gleicher Wahrscheinlichkeit für Pauli $X$, $Y$ und $Z$-Fehler zurück. 6% depolarisierendes Rauschen:
ConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.02, 0.02, 0.02)
NoNoise Gibt ein Modell mit Fehlerwahrscheinlichkeiten von null zurück. Übergeben Sie es an ConfigurePauliNoise, um die aktuelle Rauschkonfiguration zu löschen. ConfigurePauliNoise(NoNoise()) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.0)
ApplyIdleNoise Wendet konfiguriertes Rauschen während der Simulation auf einen einzelnen Qubit an. ...
use q = Qubit[2];
ConfigurePauliNoise(0.1, 0.0, 0.0);
ApplyIdleNoise(q[0]);
...