Så här skapar du brusmodeller för neutrala atomenhetssimuleringar i QDK

Microsoft Quantum Development Kit (QDK) innehåller en uppsättning neutrala API:er för atomenhetssimulering som du kan använda för att modellera hur programmet körs på en neutral atoms kvantdator. Dessa API:er modellerar de typer av brus som förekommer specifikt på neutral atommaskinvara. Med QDKPython paketet kan du använda brusmodeller för simuleringar med NoiseConfig klassen.

Mer information om brusmodeller i simuleringar finns i QDKSkapa brusmodeller för kvantsimuleringar i QDK.

Anvisningar om hur du installerar och använder QDK simulatorerna finns i Installera och köra QDK kvantsimulatorerna.

API:er för simulering av neutrala atomenheter

Innehåller QDK två API:er NeutralAtomDevice för simulering av neutrala atomenheter och NeutralAtomBackend. Dessa API:er modellerar bruset som inträffar specifikt på neutrala atom-kvantdatorer. Mer information finns i Simulera kvantprogram på neutral atomenhetsmaskinvara.

Typer av brus i neutrala atomenhetssimulatorer

I neutrala atomenheter flyttar lasrar fysiskt kvantbitarna mellan olika zoner i enheten. Brus kan förekomma i neutrala atomenheter i följande situationer:

  • Qubitförflyttningar mellan zoner
  • Kvantgrindsoperationer på qubits i interaktionszonen
  • Kvantbitsmätningar i mätzonen

Neutralatomsenheter har en begränsad uppsättning kvantportar. Simuleringar av enheter med neutrala atomer i QDK stöder brus från följande källor.

Bruskälla Brusmodellparameter Källbeskrivning
$S_X$ kvantgrind sx En qubit-grind, halvvägs bitflip
$R_Z$ kvantgrind rz En en-qubitport, allmän fasrotation
$CZ$ kvantgrind cz Två-qubit grind, kontrollerad-$Z$ fasväxling
Kvantbitsmätning och återställning mresetz Mätning med en kvantbit och återställning till 0-tillstånd
Qubit-rörelse mov Qubitförflyttning mellan enhetszoner

För dessa bruskällor kan du konfigurera alla brustyper som QDK simulatorerna stöder.

Ditt kvantprogram kan innehålla valfri typ av grind som QIR-målprofilen stöder. API:erna för neutral atomsimulering kompilerar QIR-indata och delar upp programmets portar i den uppsättning portar som finns på neutrala atomenheter: $S_X$, $R_Z$och $CZ$. När du använder NeutralAtomDevice och NeutralAtomBackend för dina simuleringar ska du inte konfigurera brus på andra grindar eftersom bruset inte påverkar simuleringen. Om ditt program till exempel innehåller Hadamard-portar och du konfigurerar brus för Hadamard-grindar visas inte bruset i simuleringen eftersom Hadamard-grindarna delas upp i neutrala atomenhetsgrindar.

API:erna för neutral atomsimulering konverterar alla mått i programmet till instruktioner för mått och återställning. Om du vill inkludera måttbrus konfigurerar du bruset på mresetz. Brus på mz ingår inte i simuleringen.

Skapa en brusmodell för en neutral atomenhetssimulering

Följ dessa steg för att skapa en brusmodell för en neutral atomenhetssimulering.

  1. I VS Codeöppnar du menyn Visa och väljer Kommandopalett.

  2. Ange Skapa: Ny Jupyter Notebook. En tom Jupyter Notebook fil öppnas på en ny flik.

  3. I den första cellen i notebook-filen importerar du de nödvändiga Python objekten.

    from qdk import init, TargetProfile
    from qdk.openqasm import compile
    from qdk.simulation import NeutralAtomDevice, NoiseConfig
    from qdk.widgets import Histogram
    
  4. I en ny cell anger du QIR-målprofilen för enheten och kompilerar ett OpenQASM-program till 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. Skapa ett NoiseConfig objekt och skapa din brusmodell. Kör till exempel följande kod i en ny cell.

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

    Den här koden genererar följande brusmodell, där brusfrekvensen är sannolikheten att källan orsakar motsvarande typ av brus.

    Bruskälla Typ av brus Brusfrekvens
    $S_X$ port bitvändning 1 %
    $R_Z$-port Fasvändning 1 %
    $CZ$ port Bitflip och fasväxling på målqubit 2 %
    Qubit-rörelse Qubit-förlust 0,5 %
  6. Kör simulatorn med brusmodellen och visa ett histogram med mätresultat. Kör till exempel följande kod i en ny cell för att köra 1 000 bilder av ditt program på Clifford-simulatorn.

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