Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Element Microsoft Quantum Development Kit (QDK) zawiera zestaw symulatorów kwantowych, które modeluje sposób działania programu na komputerze kwantowym. Programy uruchamiane na komputerze kwantowym zawsze zawierają pewien typ i stopień szumu. Pakiet QDKPython umożliwia tworzenie niestandardowych modeli szumów do użycia w symulacjach za pośrednictwem interfejsu NoiseConfig API.
Aby uzyskać instrukcje dotyczące sposobu instalowania i używania QDKsymulatorów, zobacz Jak zainstalować i uruchomić QDK symulatory kwantowe.
Typy szumów
Każda operacja lub instrukcja w programie kwantowym może powodować szum. W poniższej tabeli wymieniono wszystkie operacje i instrukcje, dla których można ustawić szum.
| Źródło szumu | Parametr modelu szumu | Opis źródła |
|---|---|---|
| bramka $X$ | x |
Jednokubitowa bramka Pauliego, odwrócenie bitu |
| bramka $Y$ | y |
Bramka Pauli z pojedynczym kubitem, przerzucanie bitowe i przerzucanie fazy |
| bramka $Z$ | z |
jednokubitowa bramka Pauliego, odwrócenie fazy |
| bramka $H$ | h |
Jednokubitowa bramka Hadamarda, tworząca stan równej superpozycji |
| bramka $S$ | s |
Bramka jednokubitowa, odwrócenie fazy o pół π |
| bramka $S^\dagger$ | s_adj |
Bramka z pojedynczym kubitem, przylega do $S$ |
| bramka $T$ | t |
Bramka jednokubitowa, lip fazy π/4 |
| brama $T^\dagger$ | t_adj |
Bramka jednokubitowa, sprzężona do $T$ |
| bramka $S_X$ | sx |
Bramka z pojedynczym kubitem, przerzucanie o połowę bitu |
| $S_X^\dagger$ gate | sx_adj |
Bramka z pojedynczym kubitem, przylega do $S_X$ |
| bramka $R_X$ | rx |
Bramka jednokubitowa, ogólny obrót fazowy wokół osi $x$ |
| bramka $R_Y$ | ry |
Bramka jednokubitowa, ogólny obrót fazowy wokół osi $y$ |
| bramka $R_Z$ | rz |
Bramka jednokubitowa, ogólny obrót fazowy wokół osi $z$ |
| bramka $CX$ | cx |
Bramka z dwoma kubitami, brama sterowana $X$ |
| bramka $CY$ | cy |
Bramka z dwoma kubitami, brama sterowana $Y$ |
| bramka $CZ$ | cz |
Bramka z dwoma kubitami, brama sterowana $Z$ |
| bramka $R_{XX}$ | rxx |
Bramka dwukubitowa, analogiczna do $R_X$ |
| bramka $R_{YY}$ | ryy |
Bramka dwukubitowa, analogiczna do bramki $R_Y$ |
| bramka $R_{ZZ}$ | rzz |
Bramka dwukabitowa, analogiczna do $R_Z$ |
| bramka $SWAP$ | swap |
Bramka dwukubitowa, zamienia stany kubitów |
| bramka $CCX$ | ccx |
Bramka z trzema kubitami, brama sterowana dwoma kubitami $X$ |
| Ruch kubitu | mov |
Ruch kubitu między strefami urządzeń (w przypadku symulacji urządzenia neutralnego atomu) |
| Pomiar kubitu | mz |
Pomiar pojedynczego kubitu w bazie Pauliego-$Z$ |
| Pomiar i resetowanie kubitów | mresetz |
Pomiar pojedynczego kubitu i resetowanie do stanu 0 |
Za pomocą NoiseConfig można zastosować cztery różne rodzaje szumów do wcześniejszych operacji z określonymi prawdopodobieństwami. W poniższej tabeli wymieniono parametry typu szumu, które można ustawić za pomocą NoiseConfig, w tym parametr oznaczający brak szumu.
| Typ szumu | Parametr modelu szumu | Opis szumu | Przykładowe użycie | Opis przykładu |
|---|---|---|---|---|
| Pauli $X$ szum | x |
Przerzucanie bitowe | noise.z.x = 0.03 |
Przerzucanie bitów odbywa się w 3% operacji $Z$ |
| Pauli $Y$ szum | y |
Przerzucanie bitowe i przerzucanie fazy | noise.sx.y = 0.01 |
Przerzucanie bitów i przerzucanie faz odbywa się w 1% operacji $S_X$ |
| Pauli $Z$ szum | z |
Odwrócenie fazy | noise.h.z = 0.02 |
Odwrócenie fazy występuje w 2% operacji $H$ |
| Brak szumu | i |
Operacja tożsamości, bez efektu | noise.cz.ix = 0.02 |
Odwrócenie bitu dotyczy jedynie docelowego kubitu w 2% operacji $CZ$. |
| Utrata kubitu | l |
Kubit zostanie utracony z urządzenia | noise.mov.l = 0.03 |
Kubit gubi się podczas 3% przemieszczeń między strefami urządzenia w komputerze kwantowym opartym na neutralnych atomach |
Szum występuje po operacji źródłowej, a nie zamiast operacji źródłowej. Na przykład noise.z.x oznacza, że program nakłada na kubit zamierzoną bramkę $Z$, a następnie nakłada na ten kubit niezamierzoną bramkę $X$. Ponieważ szum ma zastosowanie po źródle, można skonfigurować szum, który ma taki sam efekt jak źródło. Na przykład noise.x.x powoduje niezamierzone odwrócenie bitu po zamierzonym odwróceniu bitu.
Note
Interfejsy API symulacji urządzeń z atomami neutralnymi obsługują zakłócenia z ograniczonej liczby źródeł. Aby uzyskać więcej informacji, zobacz Jak tworzyć modele szumu na potrzeby symulacji urządzeń z atomami neutralnymi w QDK.
Utwórz model szumu
Aby utworzyć model szumu dla symulacji i wyświetlić wpływ tego szumu na wyniki programu kwantowego, wykonaj następujące kroki.
W VS Codeprogramie otwórz menu Widok i wybierz pozycję Paleta poleceń.
Wprowadź Utwórz: Nowy Jupyter Notebook. Jupyter Notebook Pusty plik zostanie otwarty na nowej karcie.
W pierwszej komórce notesu zaimportuj wymagane Python obiekty.
from qdk import init, TargetProfile from qdk.openqasm import compile from qdk.simulation import NoiseConfig, run_qir from qdk.widgets import HistogramW nowej komórce ustaw docelowy profil QIR urządzenia i skompiluj swój obwód OpenQASM do postaci QIR.
init(target_profile=TargetProfile.Base) qasm_src = """ include "stdgates.inc"; qubit[2] qs; bit[2] r; h qs[0]; cx qs[0], qs[1]; r = measure qs; """ qir = compile(qasm_src)Utwórz
NoiseConfigobiekt i zbuduj model szumu.noise = NoiseConfig() noise.h.x = 0.01 noise.cx.zi = 0.02Ten kod tworzy następujący model szumu, w którym szybkość szumu jest prawdopodobieństwem, że źródło powoduje odpowiedni typ szumu.
Źródło szumu Typ szumu Wskaźnik szumu bramka $H$ Przerzucanie bitowe 1% bramka $CX$ Odwrócenie fazy na kubicie kontrolnym 2% Uruchom symulator z modelem szumu i wyświetl histogram wyników pomiaru. Uruchom na przykład następujący kod, aby symulować 1000 zdjęć programu w symulatorze Cliffordu.
results = run_qir(qir, shots=1000, noise=noise, type="clifford") Histogram(results, labels="kets")Aby porównać hałaśliwe wyniki z symulacją bez szumu, uruchom symulację ponownie bez modelu szumu.
results = run_qir(qir, shots=1000, type="clifford") Histogram(results, labels="kets")
Ustawianie wielu typów szumów w tym samym źródle
Można modelować różne typy szumów na tym samym źródle, z różnymi prawdopodobieństwami dla każdego typu szumu. Na przykład poniższy kod ustawia 1% szansę na przerzucanie bitowe i 3% szansę, że przerzucanie fazy występuje po bramie Hadamard.
noise.h.x = 0.01
noise.h.z = 0.03
Podczas konfigurowania wielu typów szumów dla tej samej operacji tylko jeden typ szumu może być stosowany do każdej operacji w programie. Na przykład każda brama Hadamarda może mieć szum typu $X$ albo typu $Z$, ale nie oba naraz.
Funkcje modelu szumu
Zamiast parametrów modelu szumu można użyć następującego zestawu funkcji szumu, aby utworzyć model szumu.
Ustaw szum Pauli
Aby uwzględnić szum Pauli w modelu, wywołaj set_pauli_noise funkcję w operacji bramy lub ruchu.
W przypadku operacji pojedynczego kubitu przekaż jednoznakowy ciąg Pauli i współczynnik szumu. Na przykład poniższy kod ustawia prawdopodobieństwo odwrócenia bitu podczas przemieszczania kubitu na 1%.
# Equivalent to: noise.mov.x = 0.01
noise.mov.set_pauli_noise('X', 0.01)
W przypadku operacji dwukubitowych przekaż dwuznakowy ciąg Pauliego i współczynnik szumu. Pierwszy znak ciągu Pauli odpowiada szumowi na kubitie sterującym, a drugi znak odpowiada szumowi na kubitie docelowym. Na przykład poniższy kod ustawia skorelowane odwrócenia fazy dla 1% operacji $CX$.
# Equivalent to: noise.cx.zz = 0.01
noise.cx.set_pauli_noise('ZZ', 0.01)
Ustaw szum depolaryzacyjny
Funkcja set_depolarizing ustawia równe, ale nieskorelowane współczynniki szumów dla wszystkich trzech typów szumu Pauli. Na przykład poniższy kod ustawia prawdopodobieństwo wystąpienia szumu Pauliego po operacji $H$ na 3%, rozłożone równomiernie po 1% na każdy z trzech typów szumu Pauliego.
# Equivalent to:
# noise.h.x = 0.01
# noise.h.y = 0.01
# noise.h.z = 0.01
noise.h.set_depolarizing(0.03)
Ustawianie szumu przerzucania bitów
Aby ustawić szybkość szumu dla przerzucania bitów, użyj set_bitflip funkcji w operacji bramy lub ruchu. Na przykład poniższy kod ustawia prawdopodobieństwo, że po operacji $R_Z$ wystąpi odwrócenie fazy, na 1%.
# Equivalent to: noise.rz.x = 0.01
noise.rz.set_bitflip(0.01)
Ustaw szum odwrócenia fazy
Aby ustawić szybkość szumu dla przerzucania faz w operacji, użyj set_phaseflip funkcji w operacji bramy lub ruchu. Na przykład poniższy kod ustawia prawdopodobieństwo 1%, że po wykonaniu operacji $R_Y$ nastąpi odwrócenie fazy.
# Equivalent to: noise.ry.z = 0.01
noise.ry.set_phaseflip(0.01)