Kwantumsimulaties uitvoeren in de QDK extensie voor Visual Studio Code

De MicrosoftQuantum Development-kit (QDK) extensie voor Visual Studio Code (VS Code) voert Q#- en OpenQASM-programma's automatisch uit op de lokale sparsesimulator.

In dit artikel wordt uitgelegd hoe u programma's uitvoert op de lokale simulator en hoe u Pauli ruis toevoegt aan Q# simulaties. Als u de andere QDK simulators van Python wilt gebruiken, raadpleeg dan Python.

Hoe de lokale simulator werkt

In de sparse-simulator worden alleen de niet-nul-amplitudes van een kwantumstatus opgeslagen. Wanneer de meeste amplitudes van de computationele basis nul zijn, gebruikt deze weergave minder geheugen en kan deze sommige programma's simuleren met meer qubits dan een volledige-toestandsimulator, waarin elke amplitude wordt opgeslagen.

Het prestatievoordeel is afhankelijk van of de kwantumstatus in de computationele basis sparse blijft. Zie Jaques en Häner (arXiv:2105.01533) voor meer informatie.

Een kwantumprogramma uitvoeren in VS Code

  1. Installeer de QDK extensie voor VS Code.
  2. Open een Q#-bestand (.qs) of OpenQASM-bestand (.qasm).
  3. Selecteer Uitvoeren vanaf de codelens aan het begin van het bestand of boven de Q#Main bewerking.

De simulatie-uitvoer wordt weergegeven in de VS Code terminal. Voor Q# programma's selecteert u Foutopsporing om de kwantumstatus van het programma te controleren terwijl dit wordt uitgevoerd.

Pauli Ruis toevoegen aan Q# simulaties

De sparse-simulator ondersteunt Pauli ruis voor Q# programma's in de QDK extensie. Gebruik ConfigurePauliNoise deze methode om de waarschijnlijkheid van Pauli $X$, $Y$ en $Z$ fouten in een programma in te stellen. De QDK extensie-instellingen ondersteunen ook een globaal Pauli ruismodel.

Note

U kunt geen ruismodel toevoegen aan een OpenQASM simulatie in de QDK extensie. Als u operatiespecifieke ruismodellen voor Q# of OpenQASM programma's wilt bouwen, gebruikt u het QDKPython pakket en de NoiseConfig API.

Ruis toevoegen in de VS Code instellingen Pauli

  • Stel VS Codeglobale Pauli ruis in voor Q# programma's in de Q#> simulatie:Pauli gebruikersinstelling voor ruis voor de QDK extensie.

Schermopname van algemene Q#Pauli ruisinstellingen voor de QDK extensie in VS Code.

De ruisinstellingen zijn van toepassing op histogramresultaten voor alle poorten, metingen en qubits in alle Q# programma's in VS Code.

Zonder ruis toont een histogram voor dit GHZ voorbeeldprogramma $\ket{00000}$ voor ongeveer de helft van de metingen en $\ket{11111}$ voor de andere helft.

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

Schermopname van een histogram zonder ruis en pieken waarbij alle qubits nul zijn of alle qubits één zijn.

Bij een bit-flip-ruispercentage van 1% beginnen de resultaten zich te verspreiden. Op 25%is het histogram niet te onderscheiden van pure ruis.

Schermopname van histogrammen voor een Q# programma met 1% en 25% bit-flip ruissnelheden.

Ruis toevoegen Pauli aan afzonderlijke Q# programma's

Gebruik ConfigurePauliNoise dit om het ruismodel van een Q# programma in te stellen of te wijzigen en te bepalen wanneer en waar ruis optreedt.

Note

De VS Code instellingen voegen ruis toe aan alle Q# programma's, maar ConfigurePauliNoise overschrijft deze instellingen voor het programma dat ConfigurePauliNoise aanroept.

Voeg in het vorige programma direct na de toewijzing van qubits ruis toe:

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

Schermopname van histogramresultaten wanneer 5% bit-flip-ruis begint na de toewijzing van qubits.

Als u alleen ruis wilt toepassen op de meetbewerking, stelt u het ruismodel direct vóór de meting in en wist u het daarna:

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

Schermopname van histogramresultaten wanneer 5% bit-flip ruis direct voor de meting begint.

Als u de ruisconfiguratie op verschillende punten in uw programma wilt wijzigen of wissen, roept u ConfigurePauliNoise meerdere keren aan. Pas bijvoorbeeld 5% bit-flip ruis toe op de Hadamard-poort en wis vervolgens de ruisconfiguratie voor de rest van het programma.

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

Andere Q# ruisfuncties

ConfigurePauliNoise ondersteunt elk Pauli ruismodel. Gebruik deze functies en bewerkingen vanuit de Std.Diagnostics naamruimte om ruis te configureren of toe te passen:

Functie Description Example
ConfigurePauliNoise Hiermee stelt u Pauli ruis in voor een simulatie. Geef ofwel de waarschijnlijkheden van Pauli $X$-, $Y$- en $Z$-fouten door, of een Pauli ruismodel. De configuratie is van toepassing op alle volgende poorten, metingen en qubits in een Q# programma en heeft voorrang op de VS Code instellingen voor extensieruis. Volgende aanroepen overschrijven eerdere configuraties. ConfigurePauliNoise(0.1, 0.0, 0.5)
or
ConfigurePauliNoise(BitFlipNoise(0.1))
BitFlipNoise Retourneert een ruismodel met alleen Pauli $X$ fouten met de opgegeven waarschijnlijkheid. 10% bitflip fouten:
ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0)
PhaseFlipNoise Retourneert een ruismodel met alleen Pauli $Z$ fouten bij de opgegeven waarschijnlijkheid. 10% fase-flip ruis
ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1)
DepolarizingNoise Retourneert een ruismodel met gelijke waarschijnlijkheden voor Pauli $X$-, $Y$- en $Z$-fouten. 6% depolariserende ruis:
ConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.02, 0.02, 0.02)
NoNoise Retourneert een model met nul foutkansen. Geef deze door aan ConfigurePauliNoise om de huidige ruisconfiguratie te wissen. ConfigurePauliNoise(NoNoise()) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.0)
ApplyIdleNoise Hiermee past u geconfigureerde ruis toe op één qubit tijdens simulatie. ...
use q = Qubit[2];
ConfigurePauliNoise(0.1, 0.0, 0.0);
ApplyIdleNoise(q[0]);
...