Jak tworzyć modele szumów dla neutralnych symulacji urządzeń atomowych w programie QDK

Microsoft Quantum Development Kit (QDK) zawiera zestaw interfejsów API do symulacji urządzeń opartych na atomach neutralnych, których można używać do modelowania działania programu na komputerze kwantowym opartym na atomach neutralnych. Te interfejsy API modelują typy szumów występujące specyficznie w sprzęcie opartym na atomach neutralnych. Pakiet QDKPython umożliwia modelowanie szumów dla symulacji z klasą NoiseConfig .

Aby uzyskać więcej informacji na temat modeli szumu w QDK symulacjach, zobacz Jak tworzyć modele szumów na potrzeby symulacji kwantowych w programie QDK.

Aby uzyskać instrukcje dotyczące sposobu instalowania i używania QDKsymulatorów, zobacz Jak zainstalować i uruchomić QDK symulatory kwantowe.

Interfejsy API do symulacji urządzeń opartych na atomach neutralnych

QDK obejmuje dwa interfejsy API do symulacji urządzeń opartych na atomach neutralnych: NeutralAtomDevice i NeutralAtomBackend. Te interfejsy API modelują szum występujący konkretnie na komputerach kwantowych z neutralnymi atomami. Aby uzyskać więcej informacji, zobacz Symulowanie programów kwantowych na neutralnym sprzęcie urządzenia atomowego.

Rodzaje szumów w symulatorach urządzeń z atomami neutralnymi

W urządzeniach atomów neutralnych lasery fizycznie przenoszą kubity między różnymi strefami w urządzeniu. Szum może wystąpić w urządzeniach wykorzystujących atomy neutralne w następujących sytuacjach:

  • Ruchy kubitów między strefami
  • Operacje bramy kwantowej na kubitach w strefie interakcji
  • Pomiary kubitów w strefie pomiaru

Urządzenia wykorzystujące neutralne atomy mają ograniczony zestaw bram kwantowych. Symulacje urządzeń z atomami neutralnymi w module QDK obsługują szum z następujących źródeł.

Źródło szumu Parametr modelu szumu Opis źródła
brama kwantowa $S_X$ sx Bramka z pojedynczym kubitem, przerzucanie o połowę bitu
bramka kwantowa $R_Z$ rz Bramka z pojedynczym kubitem, ogólna rotacja faz
brama kwantowa $CZ$ cz Bramka dwóch kubitów, sterowane odwrócenie fazy $Z$
Pomiar i resetowanie kubitów mresetz Pomiar pojedynczego kubitu i resetowanie do stanu 0
Ruch kubitu mov Ruch kubitu między strefami urządzeń

W przypadku tych źródeł szumów można skonfigurować wszystkie typy szumów obsługiwane przez QDK symulatory.

Program kwantowy może zawierać dowolny typ bramy obsługiwanej przez profil docelowy QIR. Interfejsy API symulacji atomów neutralnych kompilują wejściowy kod QIR i dekomponują bramy programu na zestaw bram dostępnych na urządzeniach wykorzystujących atomy neutralne: $S_X$, $R_Z$ i $CZ$. Gdy używasz NeutralAtomDevice i NeutralAtomBackend do swoich symulacji, nie konfiguruj szumu dla innych bramek, ponieważ szum ten nie wpływa na symulację. Jeśli na przykład program zawiera bramki Hadamarda i skonfigurujesz szum dla bramek Hadamarda, ten szum nie jest uwzględniany w symulacji, ponieważ bramki Hadamarda są dekomponowane na bramki urządzenia z atomami neutralnymi.

Interfejsy API symulacji atomów neutralnych przekształcają wszystkie operacje pomiaru w programie w instrukcje pomiaru i resetowania. Aby uwzględnić szum pomiarowy, skonfiguruj szum na mresetz. Szum na mz nie jest uwzględniany w symulacji.

Tworzenie modelu szumu na potrzeby symulacji urządzenia neutralnego atomu

Aby utworzyć model szumu dla neutralnej symulacji urządzenia atomowego, wykonaj następujące kroki.

  1. W VS Codeprogramie otwórz menu Widok i wybierz pozycję Paleta poleceń.

  2. Wprowadź Utwórz: Nowy Jupyter Notebook. Jupyter Notebook Pusty plik zostanie otwarty na nowej karcie.

  3. W pierwszej komórce notesu zaimportuj wymagane Python obiekty.

    from qdk import init, TargetProfile
    from qdk.openqasm import compile
    from qdk.simulation import NeutralAtomDevice, NoiseConfig
    from qdk.widgets import Histogram
    
  4. W nowej komórce ustaw docelowy profil QIR urządzenia i skompiluj program 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)
    
  5. Utwórz NoiseConfig obiekt i zbuduj model szumu. Na przykład uruchom następujący kod w nowej komórce.

    noise = NoiseConfig()
    
    noise.sx.x = 0.01
    noise.rz.z = 0.01
    noise.cz.iy = 0.02
    noise.mov.loss = 0.005
    

    Ten 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 $S_X$ Przerzucanie bitowe 1%
    bramka $R_Z$ Odwrócenie fazy 1%
    bramka $CZ$ Bit flip i phase flip na kubicie docelowym 2%
    Ruch kubitu Utrata kubitu 0,5%
  6. Uruchom symulator z modelem szumu i wyświetl histogram wyników pomiaru. Na przykład uruchom następujący kod w nowej komórce, aby uruchomić 1000 zdjęć programu w symulatorze Clifford.

    device = NeutralAtomDevice()
    
    results = device.simulate(qir, shots=1000, noise=noise, type="clifford")
    Histogram(results, labels="kets")