Como construir modelos de ruído para simulações de dispositivos de átomos neutros no QDK

O Microsoft Quantum Development Kit (QDK) inclui um conjunto de APIs de simulação de dispositivos de átomos neutros que você pode usar para modelar como seu programa é executado em um computador quântico de átomos neutros. Essas APIs modelam os tipos de ruído que ocorrem especificamente no hardware atom neutro. O QDKPython pacote permite que você crie modelos de ruído para simulações com a NoiseConfig classe.

Para obter mais informações sobre modelos de ruído em QDK simulações, consulte Como criar modelos de ruído para simulações quânticas no QDK.

Para obter instruções sobre como instalar e usar os QDK simuladores, consulte Como instalar e executar os QDK simuladores quânticos.

As APIs de simulação de dispositivos de átomos neutros

O QDK inclui duas APIs de simulação de dispositivos de átomos neutros, NeutralAtomDevice e NeutralAtomBackend. Essas APIs modelam o ruído que ocorre especificamente em computadores quânticos de átomos neutros. Para obter mais informações, consulte Simular programas quânticos em hardware de dispositivos de átomos neutros.

Tipos de ruído em simuladores de dispositivos de átomos neutros

Em dispositivos atom neutros, os lasers movem fisicamente os qubits entre diferentes zonas no dispositivo. O ruído pode ocorrer em dispositivos atom neutros nas seguintes situações:

  • Movimentos de qubit entre zonas
  • Operações de porta quântica em qubits na zona de interação
  • Medidas de qubit na zona de medição

Dispositivos atom neutros têm um conjunto limitado de portas quânticas. As simulações de dispositivos de átomos neutros no QDK oferecem suporte a ruído das seguintes fontes.

Fonte de ruído Parâmetro do modelo de ruído Descrição da origem
Porta quântica $S_X$ sx Porta de um único qubit, inversão parcial de bit
Portão quântico $R_Z$ rz Porta de qubit único, rotação da fase geral
Porta quântica $CZ$ cz Porta de dois qubits, inversão de fase $Z$ controlada
Medição e reinicialização de qubit mresetz Medição de um único qubit e redefinição para o estado 0
Movimento do qubit mov Movimentação de qubit entre zonas de dispositivo

Para essas fontes de ruído, você pode configurar todos os tipos de ruído compatíveis com os QDK simuladores.

Seu programa quântico pode conter qualquer tipo de portão compatível com o perfil de destino QIR. As APIs de simulação de átomos neutros compilam o QIR de entrada e decompõem as portas do seu programa no conjunto de portas existente em dispositivos de átomos neutros: $S_X$, $R_Z$ e $CZ$. Quando você usa NeutralAtomDevice e NeutralAtomBackend para suas simulações, não configure o ruído em outras portas porque esse ruído não afeta a simulação. Por exemplo, se o seu programa contém portas Hadamard e você configura ruído para essas portas, o ruído não será exibido na simulação porque as portas Hadamard são decompostas em portas do dispositivo de átomos neutros.

As APIs de simulação atômica neutra convertem todas as medidas em seu programa em instruções de medida e redefinição. Para incluir o ruído de medida, configure o ruído em mresetz. O ruído em mz não está incluído na simulação.

Criar um modelo de ruído para uma simulação de um dispositivo de átomos neutros

Para criar um modelo de ruído para uma simulação de dispositivo de átomos neutros, siga estas etapas.

  1. In VS Code, abra o menu Exibir e escolha Paleta de Comandos.

  2. Insira Criar: Novo Jupyter Notebook. Um arquivo Jupyter Notebook vazio é aberto em uma nova guia.

  3. Na primeira célula do notebook, importe os objetos necessários Python .

    from qdk import init, TargetProfile
    from qdk.openqasm import compile
    from qdk.simulation import NeutralAtomDevice, NoiseConfig
    from qdk.widgets import Histogram
    
  4. Em uma nova célula, defina o perfil de destino QIR do dispositivo e compile um programa OpenQASM em QIR.

    init(target_profile=TargetProfile.Base)
    
    qasm_src = """
    include "stdgates.inc";
    qubit[2] qs;
    bit[2] r;
    
    h qs[0];
    cx qs[0], qs[1];
    r = measure qs;
    """
    
    qir = compile(qasm_src)
    
  5. Crie um NoiseConfig objeto e crie seu modelo de ruído. Por exemplo, execute o código a seguir em uma nova célula.

    noise = NoiseConfig()
    
    noise.sx.x = 0.01
    noise.rz.z = 0.01
    noise.cz.iy = 0.02
    noise.mov.loss = 0.005
    

    Esse código produz o seguinte modelo de ruído, em que a taxa de ruído é a probabilidade de a origem causar o tipo correspondente de ruído.

    Fonte de ruído Tipo de ruído Taxa de ruído
    porta $S_X$ Inversão de bit 1%
    Porta $R_Z$ Inversão de fase 1%
    porta $CZ$ Inversão de bit e inversão de fase no qubit de destino 2%
    Movimento do qubit Perda de qubit 0,5%
  6. Execute o simulador com o modelo de ruído e exiba um histograma dos resultados da medida. Por exemplo, execute o código a seguir em uma nova célula para executar 1.000 capturas do seu programa no simulador Clifford.

    device = NeutralAtomDevice()
    
    results = device.simulate(qir, shots=1000, noise=noise, type="clifford")
    Histogram(results, labels="kets")