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 pode usar para modelar como o seu programa corre num computador quântico de átomos neutros. Estas APIs modelam os tipos de ruído que ocorrem especificamente em hardware de átomos neutros. O pacote QDKPython permite-te criar modelos de ruído para simulações com a classe NoiseConfig.

Para mais informações sobre modelos de ruído em QDK simulações, veja Como construir modelos de ruído para simulações quânticas em .QDK

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

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

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

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

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

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

Os dispositivos de átomos neutros têm um conjunto limitado de portas quânticas. As simulações de dispositivos com átomos neutros no QDK suportam ruído proveniente das seguintes fontes.

Fonte de ruído Parâmetro do modelo de ruído Descrição da fonte
$S_X$ porta quântica sx Porta de qubit único, inversão de meio bit
$R_Z$ porta quântica rz Porta de qubit único, rotação de fase geral
Porta quântica $CZ$ cz Porta de dois qubits, inversão de fase controlada $Z$
Medição e reset do qubit mresetz Medição de um único qubit e reset para o estado 0
Movimento dos Qubits mov Movimento dos qubits entre zonas de dispositivos

Para estas fontes de ruído, podes configurar todos os tipos de ruído que os QDK simuladores suportam.

O seu programa quântico pode conter qualquer tipo de porta que o perfil alvo QIR suporte. 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 que existem em dispositivos de átomos neutros: $S_X$, $R_Z$ e $CZ$. Quando usas NeutralAtomDevice e NeutralAtomBackend para as tuas simulações, não configures ruído noutras portas porque esse ruído não afeta a simulação. Por exemplo, se o teu programa contém portas de Hadamard e configuras ruído para portas de Hadamard, esse ruído não aparece na simulação porque as portas de Hadamard são decompostas em portas de dispositivos atómicos neutros.

As APIs de simulação de átomos neutros convertem todas as medições no seu programa em instruções de medição e reposição. Para incluir o ruído de medição, configure o ruído em mresetz. O ruído em mz não está incluído na simulação.

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

Para construir um modelo de ruído para uma simulação de dispositivo de átomos neutros, siga estes passos.

  1. No VS Code, abra o menu Exibir e escolha Paleta de comandos.

  2. Inserir Criar: Novo Jupyter Notebook. Um ficheiro vazio Jupyter Notebook abre-se num novo separador.

  3. Na primeira célula do caderno, importa 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. Numa nova célula, defina o perfil alvo QIR do dispositivo e compile um programa OpenQASM para 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. Cria um NoiseConfig objeto e constrói o teu modelo de ruído. Por exemplo, execute o código seguinte numa 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
    

    Este código produz o seguinte modelo de ruído, onde a taxa de ruído é a probabilidade de a fonte causar o tipo correspondente de ruído.

    Fonte de ruído Tipo de ruído Taxa de ruído
    $S_X$ porta Inversão de bits 1%
    Porta $R_Z$ Inversão de fase 1%
    Portão $CZ$ Inversão de bit e inversão de fase no qubit alvo 2%
    Movimento dos Qubits Perda de qubits 0,5%
  6. Executa o simulador com o modelo de ruído e visualiza um histograma dos resultados das medições. Por exemplo, execute o código seguinte numa nova célula para executar 1.000 imagens do seu programa no simulador Clifford.

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