Nota
O acesso a esta página requer autorização. Pode tentar iniciar sessão ou alterar os diretórios.
O acesso a esta página requer autorização. Pode tentar alterar os diretórios.
O Microsoft Quantum Development Kit (QDK) inclui um conjunto de simuladores quânticos que modelam como o seu programa corre num computador quântico. Os programas que executas num computador quântico incluem sempre algum tipo e grau de ruído. O QDKPython pacote permite-lhe construir modelos de ruído personalizados para usar nas suas simulações através da NoiseConfig API.
Para instruções sobre como instalar e usar os QDK simuladores, consulte Simulações quânticas com o pacote QDKPython.
Tipos de ruído
Cada operação ou instrução num programa quântico pode introduzir ruído. Esta tabela lista todas as operações e instruções para as quais pode definir o ruído.
| Fonte de ruído | Parâmetro do modelo de ruído | Descrição da fonte |
|---|---|---|
| porta $X$ | x |
Porta lógica de Pauli qubit único, inversão do bit |
| porta $Y$ | y |
Porta de qubit único Pauli, inversão de bit e inversão de fase |
| porta $Z$ | z |
Porta de um único qubit Pauli , inversão de fase |
| porta $H$ | h |
Porta de qubit único Hadamard, cria um estado de superposição igual |
| porta $S$ | s |
porta quântica de um qubit, deslocamento de fase de π/2 |
| porta $S^\dagger$ | s_adj |
Porta de qubit único, adjunto de $S$ |
| porta $T$ | t |
Porta de qubit único, deslocamento de fase de um quarto de pi |
| porta $T^\dagger$ | t_adj |
Porta de qubit único, adjunto de $T$ |
| $S_X$ porta | sx |
porta lógica de qubit único, rotação de meia inversão do bit |
| porta $S_X^\dagger$ | sx_adj |
Porta de qubit único, adjunta de $S_X$ |
| $R_X$ porta | rx |
Porta de qubit único, rotação de fase geral em torno do eixo $x$ |
| porta $R_Y$ | ry |
Porta de qubit único, rotação geral de fase em torno do eixo $y$ |
| Porta $R_Z$ | rz |
Porta de um único qubit, rotação geral de fase em torno do eixo $z$ |
| porta $CX$ | cx |
Porta de dois qubits, porta controlada de $X$ |
| porta $CY$ | cy |
Porta de dois qubits, porta controlada por $Y$ |
| Portão $CZ$ | cz |
Porta de dois qubits, porta controlada de $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 controlada de dois qubits $X$ |
| Movimento dos Qubits | mov |
Movimento de qubits entre zonas do dispositivo (para simulação de dispositivos com átomos neutros) |
| Medição de Qubit | mz |
Medição de qubit único na Paulibase $Z$ |
| Medição e reset do qubit | mresetz |
Medição de um único qubit e reset para o estado 0 |
Com NoiseConfig, pode-se aplicar quatro tipos diferentes de ruído às operações anteriores com probabilidades específicas. Esta tabela lista os parâmetros de tipo de ruído que pode definir com NoiseConfig. Inclui também um parâmetro para ausência de 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 |
|---|---|---|---|---|
| Pauli Ruído $X$ | x |
Inversão de bits | noise.z.x = 0.03 |
A inversão de bits ocorre em 3% de operações de $Z$ |
| Pauli ruído $Y$ | y |
Inversão de bits e inversão de fase | noise.sx.y = 0.01 |
A inversão de bits e a inversão de fase ocorrem em 1% das operações de $S_X$ |
| Pauli ruído $Z$ | 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 apenas no qubit alvo ocorre em 2% das operações de $CZ$ |
| Perda de qubits | l |
O Qubit perdeu-se do dispositivo | noise.mov.l = 0.03 |
O qubit perde-se em 3% de movimentos entre zonas de dispositivo num computador quântico de átomos neutros |
O ruído ocorre após a operação de origem, não em vez da operação de origem. Por exemplo, noise.z.x significa que o programa aplica a porta $Z$ pretendida ao qubit e depois aplica uma porta $X$ não intencional. Como o ruído aplica-se depois da fonte, podes configurar ruído que tenha o mesmo efeito que a fonte. Por exemplo, noise.x.x aplica uma inversão de bit não intencional após a inversão de bit prevista.
Note
As APIs de simulação de dispositivos de átomos neutros suportam ruído proveniente de um número limitado de fontes. Para mais informações, veja Como construir modelos de ruído para simulações de dispositivos de átomos neutros no QDK.
Construir um modelo de ruído
Para construir um modelo de ruído para uma simulação e ver os efeitos desse ruído nos resultados do seu programa quântico, siga estes passos.
No VS Code, abra o menu Exibir e escolha Paleta de comandos.
Inserir Criar: Novo Jupyter Notebook. Um ficheiro vazio Jupyter Notebook abre-se num novo separador.
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 NoiseConfig, run_qir from qdk.widgets import HistogramNuma célula nova, defina o perfil alvo do dispositivo QIR e compile o seu OpenQASM circuito em QIR.
init(target_profile=TargetProfile.Base) qasm_src = """ include "stdgates.inc"; qubit[2] qs; bit[2] r; h qs[0]; t qs[0]; cx qs[0], qs[1]; r = measure qs; """ qir = compile(qasm_src)Cria um
NoiseConfigobjeto e constrói o teu modelo de ruído.noise = NoiseConfig() noise.t.z = 0.01 noise.cx.zi = 0.02Este código produz este modelo de ruído, onde 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 $T$ Inversão de fase 1% porta $CX$ Inversão de fase no qubit de controlo 2% Executa o simulador com o modelo de ruído e visualiza um histograma dos resultados das medições. Este código simula 1.000 execuções no simulador estabilizador. A porta $T$ causa ramificação do estabilizador, e a falha $Z$ configurada é amostrada após a porta $T$.
results = run_qir(qir, shots=1000, noise=noise, type="stabilizer") Histogram(results, labels="kets")Para comparar os resultados ruidosos com uma simulação sem ruído, execute novamente a simulação sem modelo de ruído.
results = run_qir(qir, shots=1000, type="stabilizer") Histogram(results, labels="kets")
Defina vários tipos de ruído na mesma fonte
Podes modelar diferentes tipos de ruído na mesma fonte, com probabilidades diferentes para cada tipo de ruído. Por exemplo, este código define uma probabilidade de 1% de ocorrer uma inversão de bits e uma probabilidade de 3% de ocorrer uma inversão de fase após uma Hadamard porta.
noise.h.x = 0.01
noise.h.z = 0.03
Quando configura vários tipos de ruído para a mesma operação, apenas um tipo de ruído pode aplicar-se a cada operação do seu programa. Por exemplo, cada Hadamard porta pode ter ruído de $X$ ou ruído de $Z$, mas não ambos.
Funções do modelo de ruído
Em vez de parâmetros do modelo de ruído, pode usar estas funções de ruído para construir o seu modelo de ruído.
Definir Pauli ruído
Para incluir Pauli ruído no seu modelo, chame a função set_pauli_noise numa porta ou operação de movimento.
Para operações de um qubit, passa uma cadeia de um carácter Pauli e uma taxa de ruído. Por exemplo, este código estabelece uma probabilidade de 1% de ocorrer um inversão de bit durante o movimento do qubit.
# Equivalent to: noise.mov.x = 0.01
noise.mov.set_pauli_noise('X', 0.01)
Para operações de dois qubits, passa uma cadeia de dois caracteres Pauli e uma taxa de ruído. O primeiro carácter da Pauli cadeia corresponde ao ruído no qubit de controlo e o segundo carácter corresponde ao ruído no qubit alvo. Por exemplo, este código define mudanças de fase correlacionadas após 1% de operações de $CX$.
# Equivalent to: noise.cx.zz = 0.01
noise.cx.set_pauli_noise('ZZ', 0.01)
Definir ruído de despolarização
A função set_depolarizing define taxas iguais para os três tipos de ruído Pauli. Por exemplo, este código estabelece uma probabilidade de 3% de ocorrer ruído Pauli após uma operação de $H$, distribuída uniformemente como uma probabilidade de 1% para cada um dos três Pauli tipos de ruído.
# 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 bits
Para definir a taxa de ruído para inversões de bits, use a função set_bitflip num gate ou numa operação de movimento. Por exemplo, este código define uma hipótese de 1% de ocorrer um bit flip após uma operação $R_Z$.
# Equivalent to: noise.rz.x = 0.01
noise.rz.set_bitflip(0.01)
Definir ruído de mudança de fase
Para definir a taxa de ruído para inversões de fase numa operação, use a set_phaseflip função numa operação de gate ou movimento. Por exemplo, este código estabelece uma probabilidade de 1% de ocorrer uma inversão de fase após uma operação $R_Y$.
# Equivalent to: noise.ry.z = 0.01
noise.ry.set_phaseflip(0.01)