Eseguire simulazioni quantistiche nell'estensione QDK per Visual Studio Code

L'estensione MicrosoftQuantum Development Kit (Visual Studio Code) per VS Code (QDK) esegue automaticamente i programmi Q# e OpenQASM sul proprio simulatore sparse locale.

Questo articolo illustra come eseguire programmi nel simulatore locale e come aggiungere Pauli rumore alle Q# simulazioni. Per usare gli altri QDK simulatori di Python, vedere Eseguire simulazioni quantistiche con il QDKPython pacchetto .

Funzionamento del simulatore locale

Il simulatore di tipo sparse archivia solo le ampiezze non pari a zero di uno stato quantistico. Quando la maggior parte delle ampiezze di base di calcolo è zero, questa rappresentazione usa meno memoria e può simulare alcuni programmi con più qubit rispetto a un simulatore di stato completo, che archivia ogni ampiezza.

Il vantaggio delle prestazioni dipende dal fatto che lo stato quantistico rimanga sparso nella base di calcolo. Per altre informazioni, vedere Jaques e Häner (arXiv:2105.01533).

Eseguire un programma quantistico in VS Code

  1. Installare l'estensioneQDK per VS Code.
  2. Aprire un Q# file (.qs) o OpenQASM (.qasm).
  3. Selezionare Esegui da CodeLens all'inizio del file o sopra l'operazione Q#Main.

L'output della simulazione viene visualizzato nel VS Code terminale. Per Q# i programmi, selezionare Debug per controllare lo stato quantistico del programma durante l'esecuzione.

Aggiungere Pauli rumore alle Q# simulazioni

Il simulatore sparse supporta Pauli rumore per Q# programmi nell'estensione QDK. Utilizzare ConfigurePauliNoise per impostare le probabilità di Pauli errori $X$, $Y$e $Z$ in un programma. Le impostazioni di QDK estensione supportano anche un Pauli modello di disturbo globale.

Note

Non è possibile aggiungere un modello di disturbo a una OpenQASM simulazione nell'estensione QDK . Per creare modelli di rumore specifici dell'operazione per Q# o programmi QDK, usare il pacchetto PythonNoiseConfig e l'API OpenQASM.

Aggiungere Pauli rumore nelle VS Code impostazioni

  • In VS Code, impostare il rumore globale Pauli per Q# i programmi nelle impostazioni utente Q#> Simulazione:Pauli Rumore per l'estensione QDK.

Screenshot delle impostazioni globali del rumore Q#Pauli per l'estensione QDK in VS Code.

Le impostazioni del rumore si applicano ai risultati dell'istogramma per tutti i gate, le misurazioni e i qubit in Q# in tutti i VS Code programmi.

Senza rumore, un istogramma per questo GHZ programma di esempio mostra $\ket{00000}$ per circa metà delle misurazioni e $\ket{11111}$ per l'altra metà.

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

Screenshot di un istogramma senza rumore e picchi in cui tutti i qubit sono zero o tutti i qubit sono uno.

Con un tasso di rumore bit-flip dell'1%, i risultati iniziano a disperdersi. A 25%, l'istogramma è indistinguibile dal rumore puro.

Screenshot degli istogrammi per un Q# programma con tassi di rumore con inversione di bit dell'1% e del 25%.

Aggiungi Pauli rumore ai singoli Q# programmi

Usare ConfigurePauliNoise per impostare o modificare il modello di rumore di un Q# programma e controllare quando e dove si verifica il rumore.

Note

Le VS Code impostazioni applicano rumore a tutti i Q# programmi, ma ConfigurePauliNoise esegue l'override di tali impostazioni per il programma che lo chiama.

Nel programma precedente aggiungere rumore immediatamente dopo l'allocazione del qubit:

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

Screenshot dei risultati dell'istogramma quando il rumore bit-flip del 5% inizia dopo l'allocazione di qubit.

Per applicare il rumore solo all'operazione di misurazione, impostare il modello di rumore immediatamente prima della misurazione e cancellarlo in seguito:

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

Screenshot dei risultati dell'istogramma quando il rumore di bit-flip del 5% inizia immediatamente prima della misurazione.

Per modificare o cancellare la configurazione del rumore in punti diversi del programma, chiamare ConfigurePauliNoise più volte. Ad esempio, applicare un rumore bit-flip del 5% al gate Hadamard e quindi cancellare la configurazione del rumore per il resto del 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;
}

Altre Q# funzioni di rumore

ConfigurePauliNoise supporta qualsiasi modello di rumore Pauli. Usare queste funzioni e operazioni dallo Std.Diagnostics spazio dei nomi per configurare o applicare il disturbo:

Function Description Example
ConfigurePauliNoise Imposta Pauli rumore per una simulazione. Passa le probabilità di Pauli errori $X$, $Y$ e $Z$ o un Pauli modello di disturbo. La configurazione si applica a tutti i gate, le misurazioni e i qubit successivi in un programma Q# ed esegue l'override delle impostazioni di disturbo dell'estensione VS Code. Le chiamate successive sostituiscono le configurazioni precedenti. ConfigurePauliNoise(0.1, 0.0, 0.5)
o
ConfigurePauliNoise(BitFlipNoise(0.1))
BitFlipNoise Restituisce un modello di disturbo con solo Pauli errori $X$ con la probabilità specificata. 10% rumore di inversione di bit:
ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0)
PhaseFlipNoise Restituisce un modello di disturbo con solo Pauli errori $Z$ con la probabilità specificata. 10% rumore di inversione di fase:
ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1)
DepolarizingNoise Restituisce un modello di disturbo con probabilità uguali per Pauli gli errori $X$, $Y$e $Z$. 6% rumore depolarizzato:
ConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.02, 0.02, 0.02)
NoNoise Restituisce un modello con zero probabilità di errore. Passa ConfigurePauliNoise per cancellare la configurazione del rumore corrente. ConfigurePauliNoise(NoNoise()) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.0)
ApplyIdleNoise Applica il rumore configurato a un singolo qubit durante la simulazione. ...
use q = Qubit[2];
ConfigurePauliNoise(0.1, 0.0, 0.0);
ApplyIdleNoise(q[0]);
...