Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Symulator rozrzedny jest domyślnym lokalnym symulatorem środowisk deweloperskich usługi Azure Quantum i wykorzystuje rozrzedliwą reprezentację wektorów stanu kwantowego. Ta funkcja umożliwia symulatorowi rozrzedżenia zminimalizowanie ilości pamięci używanej do reprezentowania stanów kwantowych, co umożliwia symulacje większej liczby kubitów. Symulator rozrzedzonych jest wydajny do reprezentowania stanów kwantowych, które są rozrzedzonych w podstawie obliczeniowej, czyli stanów kwantowych, dla których większość współczynników amplitudy wynosi zero w podstawie obliczeniowej. W związku z tym, rozrzedzony symulator umożliwia użytkownikom eksplorowanie większych aplikacji w porównaniu do tego, co jest możliwe do przedstawienia za pomocą symulatora pełnego stanu, marnując zarówno pamięć, jak 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ływanie symulatora rozrzednia
Symulator Sparse jest domyślnym symulatorem lokalnym w programie Visual Studio Code z zainstalowanym rozszerzeniem Azure Quantum Development Kit.
| Scenariusz | Method |
|---|---|
| Q# W programie w programie VS Code | Wybierz pozycję Uruchom Q# plik |
| W komórce notesu języka Python | result=qsharp.eval("Program_Entry_Operation()")lub result=qsharp.run("Program_Entry_Operation()", shots=##) |
W komórce notesu %%qsharp |
Program_Entry_Operation() |
Dodawanie szumu Pauli do rozrzedliwego symulatora
Symulator rozrzedliwy obsługuje dodanie szumu Pauli do symulacji. Ta funkcja umożliwia symulowanie wpływu szumu na operacje kwantowe i pomiary. Model szumu jest określany przy użyciu słownika prawdopodobieństwa szumu Pauli, gdzie klucze są operatorami XPauli , Yi Z, a wartości są prawdopodobieństwem zastosowania odpowiedniego operatora Pauli. Model szumu może być używany w Q# programach, programach w języku Python lub ustawieniach skonfigurowanych w programie VS Code.
Dodawanie szumu Pauli przy użyciu ustawień programu VS Code
Szum Pauli można skonfigurować globalnie w programie Visual Studio Code, konfigurując Q#> ustawienie użytkownika Symulacja:Pauli Noise .
Ustawienia mają zastosowanie do wyników histogramu dla wszystkich programów uruchamianych w programie VS Code oraz do wszystkich Q# bram, pomiarów i kubitów, do których odwołuje się program. Ustawienia są identyczne z użyciem ConfigurePauliNoise() funkcji .
Uruchomienie histogramu z następującego programu próbkującego GHz bez skonfigurowanego szumu zwróci wartość $\ket{00000}$ mniej więcej w połowie przypadków, a $\ket{11111}$ w pozostałej połowie przypadków.
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;
}
Jednak dodanie 1% szumu bit-flipowego pokazuje, że stan zaczyna się rozpraszać, a przy 25% szumu stan jest nie do odróżnienia od szumu.
Dodawanie szumu Pauli do Q# programów
Za pomocą ConfigurePauliNoise() funkcji można ustawić lub zmodyfikować model szumu dla poszczególnych Q# programów. Za pomocą ConfigurePauliNoise() można szczegółowo kontrolować, gdzie szum jest stosowany w programach Q#.
Uwaga / Notatka
Jeśli skonfigurujesz szum w ustawieniach programu VS Code, szum zostanie zastosowany do wszystkich Q# programów. Jeśli skonfigurujesz szum w Q# programie przy użyciu programu ConfigurePauliNoise, ten szum zastępuje ustawienia szumu programu VS Code podczas uruchamiania tego programu.
Na przykład w poprzednim programie można dodać szum natychmiast po alokacji kubitu:
...
operation GHzSample(n: Int) : Result[] {
use qs = Qubit[n];
ConfigurePauliNoise(0.05, 0.0, 0.0); // 5% bit-flip noise applies to all operations
H(qs[0]);
...
lub tuż przed operacją pomiaru.
...
use qs = Qubit[n];
H(qs[0]);
ApplyCNOTChain(qs);
ConfigurePauliNoise(0.05, 0.0, 0.0); // noise applies only to measurement operation
let results = MeasureEachZ(qs);
...
Można również użyć ConfigurePauliNoise() polecenia , aby zresetować lub wyczyścić konfiguracje szumu. W tym przykładzie ustawienia szumu są skonfigurowane po alokacji kubitu, a następnie czyszczone natychmiast po operacji Hadamard, tak aby szum był stosowany tylko do H(); operacji.
...
operation GHzSample(n: Int) : Result[] {
use qs = Qubit[n];
ConfigurePauliNoise(0.05, 0.0, 0.0); // noise applies to H() operation
H(qs[0]);
ConfigurePauliNoise(0.0, 0.0, 0.0); // clear noise settings
...
Następujące funkcje są dostępne w bibliotece Std.Diagnostics do konfigurowania szumu w programach Q#:
| Funkcja | Description | Example |
|---|---|---|
ConfigurePauliNoise() |
Konfiguruje szum Pauli dla przebiegu symulatora z parametrami reprezentującymi prawdopodobieństwo bram X, Y i Z. Konfiguracja szumu ma zastosowanie do wszystkich kolejnych bram, pomiarów i kubitów w Q# programie. Pomija wszystkie ustawienia zakłóceń w edytorze VS Code i może zostać zresetowane przez kolejne wywołania ConfigurePauliNoise(). |
ConfigurePauliNoise(0.1, 0.0, 0.5)lub ConfigurePauliNoise(BitFlipNoise(0.1)) |
BitFlipNoise() |
Konfiguruje szum jako bramę X tylko z określonym prawdopodobieństwem. Konfiguracja szumu ma zastosowanie do wszystkich kolejnych bram, pomiarów i kubitów w Q# programie. | 10% szum błędu bitowegoConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0) |
PhaseFlipNoise() |
Konfiguruje szum jako bramę Z tylko z określonym prawdopodobieństwem. Konfiguracja szumu ma zastosowanie do wszystkich kolejnych bram, pomiarów i kubitów w Q# programie. | 10% szum fazowy:ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1) |
DepolarizingNoise() |
Ustawia szum na bramę X, Y lub Z z równym prawdopodobieństwem. | 6% depolaryzującego szumuConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.2, 0.2, 0.2) |
NoNoise() |
Konfiguruje model szumu pod kątem braku 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]);... |
Dodawanie szumu Pauli do programów w języku Python lub notatników Jupyter
Konfiguracja szumu Pauli jest dostępna w pakiecie qdk.qsharp Python, a zdolność histogramu w pakiecie qdk.widgets. Szum jest dodawany jako parametr do qsharp.run metody .
qsharp.BitFlipNoiseqsharp.PhaseFlipNoiseqsharp.DepolarizingNoise
Poniższy przykład przedstawia wpływ 10% depolaryzującego szumu na pomiar stanu Bella.
from qdk import qsharp
from qdk import widgets
%%qsharp
operation BellPair() : Result[] {
use q = Qubit[2];
H(q[0]);
CNOT(q[0], q[1]);
MResetEachZ(q)
}
results = qsharp.run("BellPair()", 20, noise=qsharp.DepolarizingNoise(0.1))
results
Dowolny szum Pauli można dodać do modelu szumu, określając prawdopodobieństwo każdego operatora Pauli. Użyjmy poprzedniego przykładowego programu GHz:
%%qsharp
operation GHzSample() : Result[] {
use q = Qubit[5];
H(q[0]);
ApplyCNOTChain(q);
MResetEachZ(q)
}
Ten przebieg programu stosuje szum z prawdopodobieństwem 20% (połowę przypadków bit-flip, a połowę przypadków zamiana fazy).
result = qsharp.run("GHzSample()", 20, noise=(0.1, 0.0, 0.1))
display(widgets.Histogram(result))
ten przebieg stosuje szum Pauli-Y z prawdopodobieństwem 10%.
result = qsharp.run("GHzSample()", 20, noise=(0.0, 0.1, 0.0))
display(widgets.Histogram(result))