Sparsamer Quantensimulator

Der sparse Simulator verwendet eine geringe Darstellung von Quantenzustandsvektoren. Ein geringer Quantenzustand ist ein Zustand, in dem die meisten Amplitudenkoeffizienten null sind. Geringe Darstellungen ermöglichen es dem sparsamen Simulator, den Speicherbedarf zu minimieren, der zum Darstellen von Quantenzuständen erforderlich ist, was Simulationen über eine größere Anzahl von Qubits ermöglicht. Der sparse Simulator ist effizient für Programme mit Quantenzuständen, die in der Rechenbasis spärlich sind. Mit dem sparsamen Simulator können Benutzer größere Anwendungen als einen Vollzustandssimulator erkunden, da Vollzustandssimulatoren Arbeitsspeicher und Zeit auf einer exponentiell großen Anzahl von Null-Amplituden verschwenden.

Weitere Informationen zum Sparse-Simulator finden Sie in Jaques und Häner (arXiv:2105.01533).

Rufen Sie den Sparse-Simulator auf

Der Sparse Simulator ist der Standard lokale Simulator im MicrosoftQuantum Development Kit (QDK) für Visual Studio Code (VS Code). Die Nutzung des dünn besetzten Simulators hängt von Ihrer Entwicklungsumgebung ab.

Entwicklungsumgebung So rufen Sie den Sparsesimulator auf
In einem Q# oder OpenQASM Programm in VS Code Führen Sie die Datei Q# oder OpenQASM aus
In einem Python-Programm mit der Bibliothek qdk qsharp.run
oder
openqasm.run
oder
qiskit.QSharpBackend
In einer %%qsharp Notizbuchzelle Rufen Sie beispielsweise den Programmeingabevorgang auf:
Main()

Fügen Sie Pauli Rauschen zum Sparsesimulator in VS Code hinzu

Der Sparse-Simulator unterstützt das Hinzufügen von Pauli Rauschen in Simulationen Ihrer Q#-Programme mit der VS Code-Erweiterung. Mit diesem Feature können Sie die Auswirkungen von Rauschen auf Quantenvorgänge und Messungen simulieren. Verwenden Sie die Funktion ConfigurePauliNoise, um ein Rauschmodell in Ihrem Q# Programm anzugeben. Die Funktion legt Wahrscheinlichkeiten für Pauli Operatoren X, Y, und Z sowie für das Auftreten von Rauschen fest. Sie können auch globale Rauschmodelle in den Erweiterungseinstellungen konfigurieren.

Füge Pauli Rauschen mithilfe der VS Code Einstellungen hinzu

Um das globale Pauli-Rauschen für Q#-Programme in VS Code festzulegen, konfigurieren Sie die Benutzereinstellung Q#> Simulation:Pauli Rauschen für die QDK-Erweiterung.

Screenshot der globalen Q# Geräuscheeinstellungen 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.

Beispielsweise zeigt ein Histogramm für das folgende GHz-Beispielprogramm ohne Rauschen ein Ergebnis von $\ket{00000}$ für etwa die Hälfte der Maße 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 mit Ergebnissen ohne Rauschen.

Wenn Sie sogar eine 1% Bit-Flip-Rauschrate hinzufügen, beginnen die Ergebnisse zu diffus. Bei 25% Bit-Flip-Rauschen ist das Histogramm von reinem Rauschen nicht mehr zu unterscheiden.

Screenshot des QDK im VS Code, das Histogrammergebnisse für ein Programm mit 1% und 25% Bit-Flip-Fehlerraten zeigt.

Hinzufügen von Pauli Rauschen zu einzelnen Q# Programmen

Verwenden Sie die ConfigurePauliNoise Funktion, um das Rauschmodell für einzelne Q# Programme festzulegen oder zu ändern. Mit der ConfigurePauliNoise Funktion können Sie steuern, wann und wo Rauschen in Ihren Q# Programmen auftreten.

Hinweis

Wenn Sie Rauschen in den VS Code Einstellungen konfigurieren, wird das Rauschen auf alle Q# Programme angewendet. Die Funktion überschreibt jedoch die ConfigurePauliNoise Rauscheinstellungen für das Programm, VS Code das die Funktion aufruft.

Im vorherigen Programm können Sie z. B. unmittelbar nach der Qubit-Zuweisung Rauschen hinzufügen.

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

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

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

Screenshot, der Histogrammergebnisse mit Rauschen anzeigt, das nach der Qubit-Zuordnung hinzugefügt wurde.

Oder Sie können nur dem Messvorgang Rauschen hinzufügen.

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

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

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

Screenshot, der Histogrammergebnisse mit Rauschen anzeigt, die direkt vor der Messung hinzugefügt wurden.

Um Rauschkonfigurationen an verschiedenen Stellen in Ihrem Programm zu ändern oder zu löschen, rufen Sie ConfigurePauliNoise mehrmals auf. Sie können z. B. 5% Bit-Flip-Rauschen auf das Hadamard-Tor festlegen und dann keinen Rauschen für den Rest des Programms festlegen.

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

Die ConfigureNoiseFunction Funktion reicht aus, um jede Art von Pauli Rauschen in Ihrem Programm zu modellieren, verfügt jedoch Q# über andere Rauschfunktionen, die Sie auch verwenden können. Die folgenden Funktionen stehen in der Std.Diagnostics Bibliothek zum Konfigurieren von Rauschen in Q# Programmen zur Verfügung:

Funktion Description Example
ConfigurePauliNoise Konfiguriert Rauschen Pauli für eine Simulatorausführung. Parameter stellen die Wahrscheinlichkeit von X-, Y- und Z-Torgeräuschen Pauli dar. Die Rauschkonfiguration gilt für alle nachfolgenden Gates, Messungen und Qubits in einem Q# Programm. Setzt die Rauscheinstellungen der Erweiterung VS Code außer Kraft. Nachfolgende Aufrufe von ConfigurePauliNoise überschreiben das durch vorherige Aufrufe gesetzte Rauschen. ConfigurePauliNoise(0.1, 0.0, 0.5)
oder
ConfigurePauliNoise(BitFlipNoise(0.1))
BitFlipNoise Konfiguriert nur X-Gate-Rauschen mit der angegebenen Wahrscheinlichkeit. 10% Bit-Flip-Rauschen:
ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0)
PhaseFlipNoise Konfiguriert nur Z-Gate-Rauschen mit der angegebenen Wahrscheinlichkeit. 10% Phasen-Flip-Rauschen:
ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1)
DepolarizingNoise Konfiguriert das Rauschen so, dass es mit gleicher Wahrscheinlichkeit ein X-, Y- oder Z-Gate ist. 6% depolarisierendes Rauschen:
ConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.2, 0.2, 0.2)
NoNoise Setzt das Rauschmodell auf ein rauschfreies Modell zurück. 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]);
...