Executar simulações quânticas na QDK extensão para Visual Studio Code

A extensão MicrosoftQuantum Development Kit (QDK) para Visual Studio Code (VS Code) corre Q# e OpenQASM programas automaticamente no seu simulador esparso local.

Este artigo explica como executar programas no simulador local e como adicionar Pauli ruído às Q# simulações. Para usar os outros QDK simuladores de Python, veja Executar simulações quânticas com o QDKPython pacote.

Como funciona o simulador local

O simulador esparso armazena apenas as amplitudes não nulas de um estado quântico. Quando a maioria das amplitudes da base computacional é zero, esta representação consome menos memória e pode simular alguns programas com mais qubits do que um simulador de estado completo, que armazena todas as amplitudes.

O benefício de desempenho depende de o estado quântico permanecer esparso na base computacional. Para mais informações, consulte Jaques e Häner (arXiv:2105.01533).

Executar um programa quântico em VS Code

  1. Instale a QDK extensão para VS Code.
  2. Abra um Q# ficheiro (.qs) ou OpenQASM (.qasm).
  3. Selecione Executar a partir da lente de código no início do ficheiro ou acima da Q#Main operação.

A saída da simulação aparece no VS Code terminal. Para programas Q# , selecione Debug para inspecionar o estado quântico do programa durante a execução.

Adicionar Pauli ruído às Q# simulações

O simulador esparso suporta Pauli de ruído para Q# programas na QDK extensão. Utilize ConfigurePauliNoise para definir as probabilidades de erros de Pauli $X$, $Y$ e $Z$ num programa. QDK definições de extensão também suportam um modelo global Pauli de ruído.

Note

Não podes adicionar um modelo de ruído a uma OpenQASM simulação na QDK extensão. Para construir modelos de ruído específicos da operação para programas Q# ou OpenQASM, use o pacote QDKPython e a API NoiseConfig.

Adicionar Pauli ruído nas VS Code definições

  • Em VS Code, defina ruído global Pauli para Q# programas na Q#> definição do utilizador Simulation:Pauli Ruído para a QDK extensão.

Captura de ecrã das definições globais Q#Pauli de ruído para a QDK extensão em VS Code.

As definições de ruído aplicam-se aos resultados de histogramas para todas as portas, medições e qubits em todos Q# os programas em VS Code.

Sem ruído, um histograma deste GHZ programa de amostragem mostra $\ket{00000}$ para cerca de metade das medições e $\ket{11111}$ para a outra metade.

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

Captura de ecrã de um histograma sem ruído e com picos onde todos os qubits são zero ou todos os qubits são um.

A uma taxa de ruído de 1% de inversão de bits, os resultados começam a espalhar-se. A 25%, o histograma é indistinguível do ruído puro.

Captura de ecrã de histogramas de um Q# programa com taxas de ruído de inversão de bits de 1% e 25%.

Adicionar Pauli ruído a programas individuais Q#

Utilize ConfigurePauliNoise para definir ou alterar o modelo de ruído de um programa Q# e controlar quando e onde ocorre ruído.

Note

As VS Code definições adicionam ruído a todos os Q# programas, mas ConfigurePauliNoise sobrepõe essas definições para o programa que os chama.

No programa anterior, adicionar ruído imediatamente após a atribuição de qubits:

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

Captura de ecrã dos resultados do histograma quando o ruído de 5% de inversão de bits começa após a alocação dos qubits.

Para aplicar ruído apenas à operação de medição, defina o modelo de ruído imediatamente antes da medição e limpe-o depois:

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

Captura de ecrã dos resultados do histograma quando o ruído de 5% de inversão de bits começa imediatamente antes da medição.

Para alterar ou eliminar a configuração de ruído em diferentes pontos do seu programa, chame ConfigurePauliNoise várias vezes. Por exemplo, aplicar ruído de 5% bit-flip à porta de Hadamard e depois limpar a configuração de ruído para o resto do programa.

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

Outras Q# funções de ruído

ConfigurePauliNoise suportam qualquer Pauli modelo de ruído. Utilize estas funções e operações do espaço de nomes Std.Diagnostics para configurar ou aplicar ruído:

Função Description Exemplo
ConfigurePauliNoise Define o ruído Pauli para uma simulação. Passe as probabilidades de Pauli erros de $X$, $Y$ e $Z$ ou um Pauli modelo de ruído. A configuração aplica-se a todas as portas, medições e qubits subsequentes num programa Q# e sobrepõe-se às definições de ruído da extensão VS Code. Chamadas subsequentes sobrepõem-se a configurações anteriores. ConfigurePauliNoise(0.1, 0.0, 0.5)
ou
ConfigurePauliNoise(BitFlipNoise(0.1))
BitFlipNoise Retorna um modelo de ruído com apenas Pauli erros de $X$ com a probabilidade especificada. 10% de ruído de inversão de bits:
ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0)
PhaseFlipNoise Retorna um modelo de ruído com apenas Pauli erros de $Z$ com a probabilidade especificada. 10% ruído de inversão de fase
ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1)
DepolarizingNoise Devolve um modelo de ruído com probabilidades iguais de erros Pauli de $X$, $Y$ e $Z$. 6% ruído despolarizante:
ConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.02, 0.02, 0.02)
NoNoise Devolve um modelo com probabilidades de erro zero. Passe-o a ConfigurePauliNoise para limpar a configuração atual de ruído. ConfigurePauliNoise(NoNoise()) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.0)
ApplyIdleNoise Aplica ruído configurado a um único qubit durante a simulação. ...
use q = Qubit[2];
ConfigurePauliNoise(0.1, 0.0, 0.0);
ApplyIdleNoise(q[0]);
...