Kör kvantsimuleringar i tillägget QDK för Visual Studio Code

Tillägget MicrosoftQuantum Development Kit (QDK) för Visual Studio Code (VS Code) kör automatiskt Q#- och OpenQASM-program på dess lokala sparse-simulator.

Den här artikeln beskriver hur du kör program på den lokala simulatorn och hur du lägger till Pauli brus i Q#-simuleringar. Om du vill använda de andra QDK simulatorerna från Pythonkan du läsa Köra kvantsimuleringar med QDKPython paketet.

Så här fungerar den lokala simulatorn

Den sparsamma simulatorn lagrar endast icke-nollamplituderna i ett kvanttillstånd. När de flesta beräkningsbassamplituder är noll använder den här representationen mindre minne och kan simulera vissa program med fler qubitar än en fulltillståndssimulator, som lagrar varje amplitud.

Prestandafördelarna beror på om kvanttillståndet förblir glest i beräkningsbasen. Mer information finns i Jaques och Häner (arXiv:2105.01533).

Kör ett kvantprogram i VS Code

  1. Installera QDK tillägget för VS Code.
  2. Öppna en Q# (.qs) eller OpenQASM (.qasm) fil.
  3. Välj Kör från kodlinsen i början av filen eller ovanför åtgärden Q#Main .

Simuleringsutdata visas i VS Code terminalen. För Q# program väljer du Felsök för att inspektera programmets kvanttillstånd när det körs.

Lägg till Pauli brus till Q# simuleringar

Sparse-simulatorn stöder Pauli noise för Q# program i QDK tillägget. Använd ConfigurePauliNoise för att ange sannolikheterna Pauli för felen $X$, $Y$och $Z$ i ett program. Tilläggsinställningarna QDK stöder också en global Pauli brusmodell.

Note

Du kan inte lägga till en brusmodell i en OpenQASM simulering i QDK tillägget. Om du vill skapa operationsspecifika brusmodeller för Q#- eller QDK-program använder du PythonNoiseConfig-paketet och OpenQASM API:et.

Lägg till Pauli brus i VS Code inställningarna

  • I VS Code anger du globalt Pauli brus för Q# program i Q#> användarinställningen Simulering:Pauli Noise för tillägget QDK.

Skärmbild av globala Q#Pauli brusinställningar för QDK tillägget i VS Code.

Brusinställningarna gäller för histogramresultat för alla portar, mått och kvantbitar i alla Q# program i VS Code.

Utan brus visar ett histogram för det här GHZ exempelprogrammet $\ket{00000}$ för ungefär hälften av mätningarna och $\ket{11111}$ för den andra hälften.

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

Skärmbild av ett histogram utan brus och toppar där alla kvantbitar är noll eller alla kvantbitar är ett.

Med en brusfrekvens på 1% bit-flip börjar resultaten spridas. Vid 25 % är histogrammet oskiljaktigt från rent brus.

Skärmbild av histogram för ett Q# program med 1% och 25% bit-flip brusfrekvenser.

Lägga till Pauli brus i enskilda Q# program

Använd ConfigurePauliNoise för att ställa in eller ändra ett Q# programs brusmodell och styra när och var brus uppstår.

Note

VS Code Inställningarna lägger till brus i alla Q# program, men ConfigurePauliNoise åsidosätter de inställningarna för programmet som anropar det.

I föregående program lägger du till brus omedelbart efter kvantbitsallokering:

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

Skärmbild av histogramresultat när 5% bit-flip-brus startar efter kvantbitsallokering.

Om du bara vill tillämpa brus på mätningsåtgärden ställer du in brusmodellen omedelbart före mätningen och rensar den efteråt:

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

Skärmbild av histogramresultat när 5% bit-flip-brus startar omedelbart före mätningen.

Om du vill ändra eller rensa bruskonfigurationen vid olika tidpunkter i programmet anropar du ConfigurePauliNoise flera gånger. Använd till exempel 5% bit-flip-brus på Hadamard-grinden och rensa sedan bruskonfigurationen för resten av programmet.

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

Andra Q# brusfunktioner

ConfigurePauliNoise stöder vilken Pauli brusmodell som helst. Använd dessa funktioner och åtgärder från Std.Diagnostics namnområdet för att konfigurera eller tillämpa brus:

Funktion Description Example
ConfigurePauliNoise Ställer in Pauli störning för en simulering. Skicka antingen sannolikheterna Pauli för felen $X$, $Y$och $Z$ eller en Pauli brusmodell. Konfigurationen gäller för alla efterföljande portar, mätningar och kvantbitar i ett Q# program och åsidosätter inställningarna för VS Code tilläggsbrus. Efterföljande anrop åsidosätter tidigare konfigurationer. ConfigurePauliNoise(0.1, 0.0, 0.5)
eller
ConfigurePauliNoise(BitFlipNoise(0.1))
BitFlipNoise Returnerar en brusmodell med endast Pauli $X$-fel med angiven sannolikhet. 10% bit-flip störning
ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0)
PhaseFlipNoise Returnerar en brusmodell med endast Pauli $Z$-fel vid den angivna sannolikheten. 10% fasvänd brus:
ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1)
DepolarizingNoise Returnerar en brusmodell med lika sannolikheter för Pauli $X$-, $Y$- och $Z$-fel. 6% avpolariserande brus:
ConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.02, 0.02, 0.02)
NoNoise Returnerar en modell med noll felannolikheter. Skicka det vidare till ConfigurePauliNoise för att rensa den aktuella bruskonfigurationen. ConfigurePauliNoise(NoNoise()) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.0)
ApplyIdleNoise Tillämpar konfigurerat brus på en enda kvantbit under simuleringen. ...
use q = Qubit[2];
ConfigurePauliNoise(0.1, 0.0, 0.0);
ApplyIdleNoise(q[0]);
...