Uruchamianie symulacji kwantowych w rozszerzeniu QDK dla polecenia Visual Studio Code

Rozszerzenie MicrosoftQuantum Development Kit (Visual Studio Code) dla VS Code (QDK) automatycznie uruchamia programy Q# i OpenQASM na swoim lokalnym symulatorze sparse.

W tym artykule wyjaśniono, jak uruchamiać programy w symulatorze lokalnym i jak dodać Pauli szum do Q# symulacji. Aby użyć innych QDK symulatorów z Python, zobacz jak uruchamiać symulacje kwantowe za pomocą pakietu QDKPython.

Jak działa lokalny symulator

Symulator rzadki przechowuje tylko niezerowe amplitudy stanu kwantowego. Jeśli większość amplitud baz obliczeniowych wynosi zero, ta reprezentacja używa mniejszej ilości pamięci i może symulować niektóre programy z większą ilością kubitów niż symulator pełnego stanu, który przechowuje każdą amplitudę.

Korzyść z wydajności zależy od tego, czy stan kwantowy pozostaje rozrzedzony w bazie obliczeniowej. Aby uzyskać więcej informacji, zobacz Jaques i Häner (arXiv:2105.01533).

Uruchom program kwantowy w VS Code

  1. QDK Zainstaluj rozszerzenie dla programu VS Code.
  2. Otwórz plik Q# (.qs) lub OpenQASM (.qasm).
  3. Wybierz pozycję Uruchom z widoku CodeLens na początku pliku lub nad operacją Q#Main.

Dane wyjściowe symulacji są wyświetlane w terminalu VS Code . W przypadku Q# programów wybierz pozycję Debug, aby sprawdzić stan kwantowy programu podczas jego uruchamiania.

Dodawanie Pauli szumu do Q# symulacji

Symulator rzadki obsługuje Pauli szumy dla Q# programów w rozszerzeniu QDK. Służy ConfigurePauliNoise do ustawiania prawdopodobieństw Pauli błędów $X$, $Y$ i $Z$ w programie. Ustawienia QDK rozszerzenia obsługują również globalny Pauli model szumu.

Note

Nie można dodać modelu szumu do OpenQASM symulacji w QDK rozszerzeniu. Aby utworzyć modele szumu specyficzne dla operacji dla programów Q# lub OpenQASM, użyj pakietu PythonQDK i interfejsu API NoiseConfig.

Dodaj Pauli szum w VS Code ustawieniach

  • W VS Codeprogramie ustaw globalny Pauli szum dla Q# programów w ustawieniu użytkownika Q#> Symulacja:Pauli Szum dla rozszerzenia QDK.

Zrzut ekranu przedstawiający globalne Q#Pauli ustawienia dotyczące szumu dla rozszerzenia QDK w programie VS Code.

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

Bez szumu histogram dla tego GHZ przykładowego programu pokazuje $\ket{00000}$ w około połowie 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 histogram bez szumu i szczytów, w których wszystkie kubity są zerowe lub wszystkie kubity są jednym.

W przypadku 1% współczynnika szumu przerzucania bitów wyniki zaczynają wykazywać większy rozrzut. W 25%histogram jest nie do odróżnienia od czystego szumu.

Zrzut ekranu przedstawiający histogramy programu Q# z 1% i 25% poziomami szumu przerzucania bitów.

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

Użyj ConfigurePauliNoise, aby ustawić lub zmienić model szumu dla programu Q# i kontrolować, kiedy i gdzie występuje szum.

Note

Ustawienia VS Code stosują efekt szumu do wszystkich programów Q#, ale ConfigurePauliNoise zastępuje te ustawienia dla programu, który go wywołuje.

W poprzednim programie dodaj szum natychmiast po alokacji kubitu:

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

Zrzut ekranu przedstawiający wyniki histogramu, gdy 5% szum przerzucania bitów rozpoczyna się po alokacji kubitu.

Aby zastosować szum tylko do operacji pomiaru, ustaw model szumu bezpośrednio przed pomiarem i wyczyść go później:

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

Zrzut ekranu przedstawiający wyniki histogramu, gdy 5% szumu przerzucania bitów rozpoczyna się bezpośrednio przed pomiarem.

Aby zmienić lub wyczyścić konfigurację szumu w różnych punktach programu, wywołaj ConfigurePauliNoise wiele razy. Na przykład zastosuj 5-procentowy szum typu bit-flip do bramy Hadamarda, a następnie wyczyść konfigurację szumu dla pozostałej części programu.

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

ConfigurePauliNoise obsługuje dowolny Pauli model szumu. Użyj tych funkcji i operacji z Std.Diagnostics przestrzeni nazw, aby skonfigurować lub zastosować szum:

Funkcja Description Example
ConfigurePauliNoise Ustawia Pauli szum dla symulacji. Przekaż prawdopodobieństwa Pauli błędów $X$, $Y$ i $Z$ lub model szumu Pauli. Konfiguracja ma zastosowanie do wszystkich kolejnych bram, pomiarów i kubitów w Q# programie i zastępuje VS Code ustawienia szumu rozszerzenia. Kolejne wywołania zastępują wcześniejsze konfiguracje. ConfigurePauliNoise(0.1, 0.0, 0.5)
lub
ConfigurePauliNoise(BitFlipNoise(0.1))
BitFlipNoise Zwraca model szumu zawierający tylko błędy Pauli $X$ z określonym prawdopodobieństwem. 10% szum błędu bitowego
ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0)
PhaseFlipNoise Zwraca model szumu zawierający tylko błędy Pauli $Z$ przy określonym prawdopodobieństwie. 10% szum fazowy:
ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1)
DepolarizingNoise Zwraca model szumu z równymi prawdopodobieństwami dla Pauli błędów $X$, $Y$i $Z$. 6% depolaryzującego szumu
ConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.02, 0.02, 0.02)
NoNoise Zwraca model o zerowych prawdopodobieństwach błędów. Przekaż go do ConfigurePauliNoise, aby wyczyścić bieżącą konfigurację szumu. 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]);
...