Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
O Microsoft Quantum Development Kit (QDK) inclui um conjunto de simuladores quânticos que modelam como seu programa é executado em um computador quântico. Os programas executados em um computador quântico sempre incluem algum tipo e grau de ruído. O QDKPython pacote permite que você crie modelos de ruído personalizados para usar em suas simulações por meio da NoiseConfig API.
Para obter instruções sobre como instalar e usar os QDK simuladores, consulte Como instalar e executar os QDK simuladores quânticos.
Tipos de ruído
Cada operação ou instrução em um programa quântico pode introduzir ruído. A tabela a seguir lista todas as operações e instruções para as quais você pode definir ruído.
| Fonte de ruído | Parâmetro do modelo de ruído | Descrição da origem |
|---|---|---|
| porta $X$ | x |
Porta Pauli de qubit único, inversão de bit |
| Porta $Y$ | y |
Porta Pauli de qubit único, inversão de bit e inversão de fase |
| porta $Z$ | z |
Portão Pauli de qubit único, inversão de fase |
| porta $H$ | h |
Portão hadamard de qubit único, cria estado de superposição igual |
| porta $S$ | s |
Porta de um único qubit, inversão de fase de meio pi |
| Porta $S^\dagger$ | s_adj |
Porta de um único qubit, adjunta da porta $S$ |
| porta $T$ | t |
Porta de um único qubit, inversão de fase de um quarto de pi |
| Porta $T^\dagger$ | t_adj |
Porta de um único qubit, adjunta da porta $T$ |
| porta $S_X$ | sx |
Porta de um único qubit, inversão parcial de bit |
| Porta $S_X^\dagger$ | sx_adj |
Portão de qubit único, adjacente a $S_X$ |
| porta $R_X$ | rx |
Porta de qubit único, rotação de fase geral sobre o eixo $x$ |
| porta $R_Y$ | ry |
Porta de qubit único, rotação de fase geral sobre o eixo $y$ |
| Porta $R_Z$ | rz |
Porta de qubit único, rotação de fase geral sobre o eixo $z$ |
| porta $CX$ | cx |
porta de dois qubits, porta controlada-$X$ |
| porta $CY$ | cy |
Porta de dois qubits, porta controlada-$Y$ |
| porta $CZ$ | cz |
Porta de dois qubits, porta controlada-$Z$ |
| porta $R_{XX}$ | rxx |
Porta de dois qubits, análoga a $R_X$ |
| porta $R_{YY}$ | ryy |
Porta de dois qubits, análoga a $R_Y$ |
| Porta $R_{ZZ}$ | rzz |
Porta de dois qubits, análoga a $R_Z$ |
| porta $SWAP$ | swap |
Porta de dois qubits, troca os estados dos qubits |
| porta $CCX$ | ccx |
Porta de três qubits, porta $X$ controlada de dois qubits |
| Movimento do qubit | mov |
Movimentação de qubit entre zonas do dispositivo (para simulação de dispositivos de átomos neutros) |
| Medição do qubit | mz |
Medida de qubit único na base pauli-$Z$ |
| Medição e reinicialização de qubit | mresetz |
Medição de um único qubit e redefinição para o estado 0 |
Com NoiseConfig, você pode aplicar quatro tipos diferentes de ruído às operações anteriores com probabilidades específicas. A tabela a seguir lista os parâmetros de tipo de ruído com NoiseConfigos quais você pode definir, incluindo um parâmetro sem ruído.
| Tipo de ruído | Parâmetro do modelo de ruído | Descrição do ruído | Utilização de exemplo | Descrição de exemplo |
|---|---|---|---|---|
| Ruído $X$ de Pauli | x |
Inversão de bit | noise.z.x = 0.03 |
A inversão de bit ocorre em 3% das operações de $Z$ |
| Ruído $Y$ de Pauli | y |
Inversão de bit e inversão de fase | noise.sx.y = 0.01 |
A inversão de bits e a inversão de fase ocorrem em 1% de operações $S_X$ |
| Ruído $Z$ de Pauli | z |
Inversão de fase | noise.h.z = 0.02 |
A inversão de fase ocorre em 2% das operações $H$ |
| Sem ruído | i |
Operação de identidade, sem efeito | noise.cz.ix = 0.02 |
A inversão de bit ocorre somente no qubit de destino em 2% das operações $CZ$. |
| Perda de qubit | l |
O qubit foi perdido do dispositivo | noise.mov.l = 0.03 |
Um qubit se perde em 3% dos deslocamentos entre zonas do dispositivo em um computador quântico de átomos neutros |
O ruído ocorre após a operação de origem, e não substitui a operação de origem. Por exemplo, noise.z.x significa que o programa aplica o portão $Z$ pretendido ao qubit e aplica uma porta $X$ não intencional ao qubit. Como o ruído se aplica após a origem, você pode configurar o ruído que tem o mesmo efeito que a origem. Por exemplo, o noise.x.x aplica uma inversão de bit não intencional após a inversão de bit intencional.
Note
As APIs de simulação de dispositivos de átomos neutros oferecem suporte a ruído proveniente de um número limitado de fontes. Para obter mais informações, consulte Como criar modelos de ruído para simulações de dispositivos de átomos neutros no QDK.
Criar um modelo de ruído
Para criar um modelo de ruído para uma simulação e exibir os efeitos desse ruído nos resultados do seu programa quântico, siga estas etapas.
In VS Code, abra o menu Exibir e escolha Paleta de Comandos.
Insira Criar: Novo Jupyter Notebook. Um arquivo Jupyter Notebook vazio é aberto em uma nova guia.
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 NoiseConfig, run_qir from qdk.widgets import HistogramEm uma nova célula, defina o perfil de destino qir do dispositivo e compile seu circuito 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)Crie um
NoiseConfigobjeto e crie seu modelo de ruído.noise = NoiseConfig() noise.h.x = 0.01 noise.cx.zi = 0.02Esse 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 $H$ Inversão de bit 1% porta $CX$ Inversão de fase no qubit de controle 2% 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 para simular 1.000 fotos do seu programa no simulador Clifford.
results = run_qir(qir, shots=1000, noise=noise, type="clifford") Histogram(results, labels="kets")Para comparar os resultados barulhentos com uma simulação sem ruído, execute a simulação novamente sem nenhum modelo de ruído.
results = run_qir(qir, shots=1000, type="clifford") Histogram(results, labels="kets")
Definir vários tipos de ruído na mesma origem
Você pode modelar diferentes tipos de ruído na mesma origem, com probabilidades diferentes para cada tipo de ruído. Por exemplo, o código a seguir define uma probabilidade de 1% de ocorrer uma inversão de bit e uma probabilidade de 3% de ocorrer uma inversão de fase após uma porta Hadamard.
noise.h.x = 0.01
noise.h.z = 0.03
Quando você configura vários tipos de ruído para a mesma operação, apenas um tipo de ruído pode se aplicar a cada operação em seu programa. Por exemplo, cada porta Hadamard pode ter ruído $X$ ou ruído $Z$, mas não ambos.
Funções de modelo de ruído
Em vez de parâmetros de modelo de ruído, você pode usar o seguinte conjunto de funções de ruído para criar seu modelo de ruído.
Definir o ruído de Pauli
Para incluir ruído de Pauli no seu modelo, chame a função set_pauli_noise em uma porta ou operação de movimento.
Para operações de um único qubit, informe uma string de Pauli de um caractere e uma taxa de ruído. Por exemplo, o código a seguir define uma chance de 1% de ocorrer uma inversão de bits durante a movimentação do qubit.
# Equivalent to: noise.mov.x = 0.01
noise.mov.set_pauli_noise('X', 0.01)
Para operações de dois qubits, informe uma string de Pauli de dois caracteres e uma taxa de ruído. O primeiro caractere da cadeia de caracteres Pauli corresponde ao ruído no qubit de controle e o segundo caractere corresponde ao ruído no qubit de destino. Por exemplo, o código a seguir define inversões de fase correlacionadas após 1% das operações $CX$.
# Equivalent to: noise.cx.zz = 0.01
noise.cx.set_pauli_noise('ZZ', 0.01)
Definir o ruído de despolarização
A set_depolarizing função define taxas de ruído iguais, mas não relacionadas, para todos os três tipos de ruído Pauli. Por exemplo, o código a seguir define uma chance de 3% de que o ruído Pauli ocorra após uma operação $H$, distribuída uniformemente como uma chance de 1% para cada um dos três tipos de ruído Pauli.
# Equivalent to:
# noise.h.x = 0.01
# noise.h.y = 0.01
# noise.h.z = 0.01
noise.h.set_depolarizing(0.03)
Definir ruído de inversão de bit
Para definir a taxa de ruído de inversões de bit, use a função set_bitflip em uma porta ou operação de movimento. Por exemplo, o código a seguir define uma chance de 1% de que uma inversão de fase ocorra após uma operação $R_Z$.
# Equivalent to: noise.rz.x = 0.01
noise.rz.set_bitflip(0.01)
Definir ruído de inversão de fase
Para definir a taxa de ruído de inversões de fase em uma operação, use a função set_phaseflip em uma porta ou operação de movimento. Por exemplo, o código a seguir define uma chance de 1% de que uma inversão de fase ocorra após uma operação $R_Y$.
# Equivalent to: noise.ry.z = 0.01
noise.ry.set_phaseflip(0.01)