Sparse kwantumsimulator

De sparse-simulator maakt gebruik van een sparse-weergave van kwantumstatusvectoren. Een sparse kwantumstatus is een toestand waarbij de meeste amplitudecoëfficiënten nul zijn. Met sparse-representaties kan de sparsesimulator de geheugenvoetafdruk minimaliseren die nodig is om kwantumstatussen weer te geven, waardoor simulaties via een groter aantal qubits mogelijk zijn. De spaarzame simulator is efficiënt voor programma's met quantumtoestanden die schaars zijn in de rekenbasis. Met de sparse-simulator kunnen gebruikers grotere toepassingen verkennen dan een simulator met volledige status, omdat full-state simulators geheugen en tijd verspillen op een exponentieel groot aantal nul-amplitudes.

Zie Jaques en Häner (arXiv:2105.01533) voor meer informatie over de sparse simulator.

De sparse-simulator aanroepen

De sparse-simulator is de standaard lokale simulator in de extensie MicrosoftQuantum Development-kit (QDK) voor Visual Studio Code (VS Code). Hoe u de sparse-simulator gebruikt, is afhankelijk van uw ontwikkelomgeving.

Ontwikkelomgeving Hoe de sparse-simulator aan te roepen
In een Q# of OpenQASM programma in VS Code Het Q#-bestand of het OpenQASM-bestand uitvoeren
In een Python programma met het qdk pakket qsharp.run
or
openqasm.run
or
qiskit.QSharpBackend
In een %%qsharp notebookcel Roep de programmavermeldingsbewerking aan, bijvoorbeeld:
Main()

Ruis toevoegen Pauli aan de sparse simulator in VS Code

De sparse simulator ondersteunt het toevoegen van Pauli ruis aan simulaties van uw Q# programma's met de VS Code extensie. Met deze functie kunt u de effecten van ruis op kwantumbewerkingen en metingen simuleren. Als u een ruismodel in uw Q# programma wilt opgeven, gebruikt u de ConfigurePauliNoise functie. De functie stelt waarschijnlijkheden in voor Pauli operators X, Yen Zruis. U kunt ook globale ruismodellen configureren in de extensie-instellingen.

Ruis toevoegen Pauli met behulp van de VS Code instellingen

Als u globale Pauli ruis voor Q# programma's wilt VS Codeinstellen, configureert u de Q#> simulatie:Pauli ruisgebruikersinstelling voor de QDK extensie.

Schermopname met de algemene Q# 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.

Een histogram voor het volgende GHz-voorbeeldprogramma zonder ruis dat is geconfigureerd, toont bijvoorbeeld een resultaat van $\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 met resultaten zonder ruis.

Als u zelfs een bit-flip ruisniveau van 1% toevoegt, beginnen de resultaten te vervagen. Met 25% bit-flip ruis is het histogram niet te onderscheiden van pure ruis.

Schermopname van de QDK in VS Code die histogramresultaten toont voor een programma met 1% en 25% bit-flip ruispercentages.

Ruis toevoegen Pauli aan afzonderlijke Q# programma's

Gebruik de ConfigurePauliNoise functie om het ruismodel voor afzonderlijke Q# programma's in te stellen of te wijzigen. De ConfigurePauliNoise functie geeft u controle over wanneer en waar ruis plaatsvindt in uw Q# programma's.

Opmerking

Als u ruis in de VS Code instellingen configureert, wordt de ruis toegepast op alle Q# programma's. De ConfigurePauliNoise functie overschrijft echter de VS Code ruisinstellingen voor het programma dat de functie aanroept.

In het vorige programma kunt u bijvoorbeeld direct na de toewijzing van qubit ruis toevoegen.

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

Schermopname die histogramresultaten toont, met ruis toegevoegd na de toewijzing van qubits.

U kunt ook alleen ruis toevoegen aan de meetbewerking.

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

Schermopname met histogramresultaten met ruis die net voor de meting is toegevoegd.

Als u ruisconfiguraties op verschillende punten in uw programma wilt wijzigen of wissen, roept u meerdere keren aan ConfigurePauliNoise . U kunt bijvoorbeeld 5% bit-flip ruis instellen op de Hadamard-poort en vervolgens geen ruis instellen 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

De ConfigureNoiseFunction functie is voldoende om elk soort Pauli ruis in uw programma te modelleren, maar Q# heeft andere ruisfuncties die u ook kunt gebruiken. De volgende functies zijn beschikbaar in de Std.Diagnostics bibliotheek voor het configureren van ruis in Q# programma's:

Functie Description Example
ConfigurePauliNoise Hiermee configureert Pauli u ruis voor een simulatoruitvoering. Parameters vertegenwoordigen de waarschijnlijkheden van X-, Y- en Z-poortruis Pauli. De ruisconfiguratie is van toepassing op alle volgende poorten, metingen en qubits in een Q# programma. Hiermee overschrijft u de VS Code instellingen voor extensieruis. Verdere oproepen naar ConfigurePauliNoise overschrijven de ruis zoals die is ingesteld door eerdere oproepen. ConfigurePauliNoise(0.1, 0.0, 0.5)
or
ConfigurePauliNoise(BitFlipNoise(0.1))
BitFlipNoise Hiermee stelt u alleen X-gate ruis in met de opgegeven waarschijnlijkheid. 10% bitflip fouten:
ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0)
PhaseFlipNoise Hiermee configureert u alleen Z-poortruis met de opgegeven waarschijnlijkheid. 10% fase-flip ruis
ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1)
DepolarizingNoise Hiermee configureert u ruis als X-, Y- of Z-poort met gelijke waarschijnlijkheden. 6% depolariserende ruis:
ConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.2, 0.2, 0.2)
NoNoise Stelt het ruismodel opnieuw in op geen ruis. 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]);
...