Sparsam kvantsimulator

Den glesa simulatorn använder en gles representation av kvanttillståndsvektorer. Ett glest kvanttillstånd är ett tillstånd där de flesta amplitudkoefficienterna är noll. Med glesa representationer kan den glesa simulatorn minimera det minnesavtryck som krävs för att representera kvanttillstånd, vilket möjliggör simuleringar över ett större antal kvantbitar. Den glesa simulatorn är effektiv för program med kvanttillstånd som är glesa i beräkningsbasen. Med den glesa simulatorn kan användarna utforska större program än en fulltillståndssimulator eftersom fulltillståndssimulatorer slösar bort minne och tid på ett exponentiellt stort antal noll amplituder.

Mer information om sparse-simulatorn finns i Jaques och Häner (arXiv:2105.01533).

Kalla på den glesa simulatorn

Den glesa simulatorn är den lokala standardsimulatorn i tillägget MicrosoftQuantum Development Kit (QDK) för Visual Studio Code (VS Code). Hur du använder den glesa simulatorn beror på din utvecklingsmiljö.

Utvecklingsmiljö Så här anropar du sparse-simulatorn
I ett Q# eller OpenQASM program i VS Code Kör Q#-filen eller OpenQASM-filen
I ett Python program med qdk paketet qsharp.run
eller
openqasm.run
eller
qiskit.QSharpBackend
I en %%qsharp notebook-cellen Anropa inmatningsoperationen för programmet, till exempel:
Main()

Lägg till Pauli brus i den glesa simulatorn i VS Code

Den glesa simulatorn stöder tillägg av Pauli brus till simuleringar av dina Q# program med VS Code tillägget. Med den här funktionen kan du simulera effekterna av brus på kvantåtgärder och mätningar. Om du vill ange en brusmodell i programmet Q# använder du ConfigurePauliNoise funktionen. Funktionen anger sannolikheter för Pauli operatorerna X, Yoch Z, brus som ska uppstå. Du kan också konfigurera globala brusmodeller i tilläggsinställningarna.

Lägg till Pauli brus med hjälp av VS Code inställningarna

Om du vill ange globalt Pauli brus för Q# program i VS Codekonfigurerar du Q#> inställningen Simulering:Pauli Brusanvändare för QDK tillägget.

Skärmbild som visar de globala Q# brusinställningarna 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.

Ett histogram för följande GHz-exempelprogram utan konfigurerat brus visar till exempel ett resultat av $\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 som visar resultat utan brus.

Om du lägger till en 1 % bit-flip-brusnivå börjar resultaten spridas. Med 25% bit-flip brus är histogrammet oskiljaktigt från rent brus.

Skärmbild av QDK i VS Code som visar histogramresultat för ett program med 1% och 25% bit-flip brusfrekvenser.

Lägga till Pauli brus i enskilda Q# program

ConfigurePauliNoise Använd funktionen för att ange eller ändra brusmodellen för enskilda Q# program. Funktionen ConfigurePauliNoise ger dig kontroll över när och var brus uppstår i dina Q# program.

Anmärkning

Om du konfigurerar brus i VS Code inställningarna tillämpas bruset på alla Q# program. Funktionen åsidosätter dock ConfigurePauliNoiseVS Code brusinställningarna för programmet som anropar funktionen.

I det föregående programmet kan du till exempel lägga till brus direkt efter kvantbitsallokering.

operation GHzSample(n: Int) : Result[] {
    use qs = Qubit[n];

     // 5% bit-flip noise applies to all operations
    ConfigurePauliNoise(0.05, 0.0, 0.0);

    H(qs[0]);
    ApplyCNOTChain(qs);
    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

Skärmbild som visar histogramresultat med brus som lagts till efter kvantbitsallokering.

Eller så kan du bara lägga till brus i mätningsåtgärden.

operation GHzSample(n: Int) : Result[] {
    use qs = Qubit[n];
    H(qs[0]);
    ApplyCNOTChain(qs);

    // Noise applies to only the measurement operation
    ConfigurePauliNoise(0.05, 0.0, 0.0);

    let results = MeasureEachZ(qs);
    ResetAll(qs);
    return results;
}

Skärmbild som visar histogramresultat med brus som lagts till strax före mätningen.

Om du vill ändra eller rensa bruskonfigurationer vid olika tidpunkter i programmet anropar du ConfigurePauliNoise flera gånger. Du kan till exempel ange 5% bit-flip-brus till Hadamard-porten och sedan ange inget brus 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

Funktionen ConfigureNoiseFunction räcker för att modellera alla typer av Pauli brus i ditt program, men Q# har andra brusfunktioner som du också kan använda. Följande funktioner är tillgängliga i Std.Diagnostics biblioteket för att konfigurera brus i Q# program:

Funktion Description Example
ConfigurePauliNoise Konfigurerar Pauli brus för en simulatorkörning. Parameter representerar sannolikheterna för brus från X-, Y- och Z-gaterna Pauli. Brusinställningen gäller för alla efterföljande grindar, mätningar och kvantbitar i ett Q# program. Åsidosätter VS Code inställningar för utökningsbrus. Efterföljande anrop av ConfigurePauliNoise åsidosätter bruset som angetts av tidigare anrop. ConfigurePauliNoise(0.1, 0.0, 0.5)
eller
ConfigurePauliNoise(BitFlipNoise(0.1))
BitFlipNoise Konfigurerar endast X-gate-brus med den angivna sannolikheten. 10% bit-flip störning
ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0)
PhaseFlipNoise Konfigurerar endast Z-gatebrus med angiven sannolikhet. 10% fasvänd brus:
ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1)
DepolarizingNoise Konfigurerar brus till X-, Y- eller Z-port med lika sannolikhet. 6% avpolariserande brus:
ConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.2, 0.2, 0.2)
NoNoise Återställer brusmodellen till att inte ha något brus. 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]);
...