Symulator kwantowy rzadki

Symulator rzadki wykorzystuje rzadką reprezentację wektorów stanu kwantowego. Rozrzedny stan kwantowy jest stanem, w którym większość współczynników amplitudy wynosi zero. Reprezentacje rozrzedane umożliwiają symulatorowi rozrzedżenia zminimalizowanie ilości pamięci wymaganej do reprezentowania stanów kwantowych, co umożliwia symulacje większej liczby kubitów. Symulator rzadki jest wydajny dla programów ze stanami kwantowymi, które są rzadkie w podstawie obliczeniowej. Symulator rozrzedny umożliwia użytkownikom eksplorowanie większych aplikacji niż symulator pełnego stanu, ponieważ symulatory pełnego stanu tracą pamięć i czas na wykładniczo dużą liczbę amplitud zerowych.

Aby uzyskać więcej informacji na temat symulatora rozrzedliwego, zobacz Jaques i Häner (arXiv:2105.01533).

Wywołaj rzadki symulator

Symulator rzadki jest domyślnym lokalnym symulatorem w rozszerzeniu MicrosoftQuantum Development Kit (QDK) dla Visual Studio Code (VS Code). Korzystanie z symulatora rozproszonego zależy od środowiska programistycznego.

Środowisko programistyczne Jak uruchomić symulator rzadki
W programie Q# lub OpenQASM w VS Code Uruchom plik Q# lub OpenQASM
W programie Python z biblioteką qdk qsharp.run
lub
openqasm.run
lub
qiskit.QSharpBackend
W komórce notebooka %%qsharp Wywołaj operację wprowadzania programu, na przykład:
Main()

Dodawanie Pauli szumu do rozrzedliwego symulatora w programie VS Code

Symulator rzadki obsługuje dodawanie szumu Pauli do symulacji Q# programów za pomocą rozszerzenia VS Code. Ta funkcja umożliwia symulowanie wpływu szumu na operacje kwantowe i pomiary. Aby określić model szumu w Q# programie, użyj ConfigurePauliNoise funkcji . Funkcja ustawia prawdopodobieństwa występowania operatorów Pauli, X, Y i Z, a także szumu. Można również skonfigurować globalne modele szumów w ustawieniach rozszerzenia.

Dodaj Pauli szum za pomocą VS Code ustawień

Aby ustawić globalny Pauli szum dla Q# programów w VS Code, skonfiguruj ustawienia użytkownika Q#> Symulacja:Pauli Szum związane z rozszerzeniem QDK.

Zrzut ekranu przedstawiający globalne szumowe ustawienia Q# dla rozszerzenia QDK w VS Code.

Ustawienia szumu dotyczą wyników histogramu dla wszystkich bram, pomiarów i kubitów we wszystkich programach Q# w VS Code.

Na przykład histogram dla następującego programu próbkowego GHz bez skonfigurowanego szumu pokazuje wynik $\ket{00000}$ dla około połowy pomiarów i $\ket{11111}$ dla drugiej połowy.

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;
}

Zrzut ekranu przedstawiający wyniki bez szumu.

Jeśli dodasz nawet 1% współczynnik szumu przerzucania bitów, wyniki zaczynają się rozpraszać. Dzięki szumowi wynikającemu z przerzucania 25% bitów histogram jest nie do odróżnienia od czystego szumu.

Zrzut ekranu QDK w VS Code, który pokazuje wyniki histogramu dla programu z 1% i 25% stopą szumu odwracania bitów.

Dodawanie Pauli szumu do poszczególnych Q# programów

ConfigurePauliNoise Użyj funkcji , aby ustawić lub zmodyfikować model szumu dla poszczególnych Q# programów. Funkcja ConfigurePauliNoise zapewnia kontrolę nad tym, kiedy i gdzie występuje szum w Q# programach.

Uwaga / Notatka

Jeśli skonfigurujesz szum w VS Code ustawieniach, szum zostanie zastosowany do wszystkich Q# programów. ConfigurePauliNoise Jednak funkcja zastępuje ustawienia szumu VS Code dla programu, który wywołuje funkcję.

Na przykład w poprzednim programie można dodać szum bezpośrednio po alokacji kubitu.

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;
}

Zrzut ekranu przedstawiający wyniki histogramów z dodanym szumem po alokacji kubitu.

Możesz też dodać szum tylko do operacji pomiaru.

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;
}

Zrzut ekranu przedstawiający wyniki histogramu z szumem dodanym tuż przed pomiarem.

Aby zmodyfikować lub wyczyścić konfiguracje szumów w różnych punktach programu, wywołaj ConfigurePauliNoise wiele razy. Na przykład można ustawić szum bitowy jako 5% przerzut na bramie Hadamarda, a następnie pozostawić resztę programu bez szumu.

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;
}

Inne Q# funkcje szumu

Funkcja ConfigureNoiseFunction jest wystarczająca do modelowania dowolnego rodzaju szumu Pauli w Twoim programie, ale Q# ma inne funkcje szumu, których również możesz użyć. Następujące funkcje są dostępne w bibliotece Std.Diagnostics do konfigurowania szumu w programach Q#:

Funkcja Description Example
ConfigurePauliNoise Konfiguruje Pauli szum dla przebiegu symulatora. Parametry reprezentują prawdopodobieństwo szumu bramy X, Y i Z Pauli . Konfiguracja szumu ma zastosowanie do wszystkich kolejnych bram, pomiarów i kubitów w Q# programie. Zastępuje ustawienia rozszerzenia VS Code dla szumu. Kolejne wywołania ConfigurePauliNoise zastępują szum określony przez poprzednie wywołania. ConfigurePauliNoise(0.1, 0.0, 0.5)
lub
ConfigurePauliNoise(BitFlipNoise(0.1))
BitFlipNoise Konfiguruje tylko szum bramki X z określonym prawdopodobieństwem. 10% szum błędu bitowego
ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0)
PhaseFlipNoise Konfiguruje tylko szum bramy Z z określonym prawdopodobieństwem. 10% szum fazowy:
ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1)
DepolarizingNoise Konfiguruje szum, aby działał jako bramka X, Y lub Z z równymi prawdopodobieństwami. 6% depolaryzującego szumu
ConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.2, 0.2, 0.2)
NoNoise Resetuje model szumu do stanu bez szumów. ConfigurePauliNoise(NoNoise()) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.0)
ApplyIdleNoise Stosuje skonfigurowany szum do pojedynczego kubitu podczas symulacji. ...
use q = Qubit[2];
ConfigurePauliNoise(0.1, 0.0, 0.0);
ApplyIdleNoise(q[0]);
...