Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Microsoft Quantum Development Kit (QDK) include un set di simulatori quantistici che modellano il modo in cui il programma viene eseguito in un computer quantistico. I programmi eseguiti in un computer quantistico includono sempre un certo tipo e grado di rumore. Il QDKPython pacchetto consente di creare modelli di rumore personalizzati da usare nelle simulazioni tramite l'API NoiseConfig .
Per istruzioni su come installare e usare i simulatori QDK, vedere Eseguire simulazioni quantistiche con il pacchetto QDKPython.
Tipi di rumore
Ogni operazione o istruzione in un programma quantistico può introdurre rumore. Questa tabella elenca tutte le operazioni e le istruzioni per cui è possibile impostare il livello di rumore.
| Sorgente di rumore | Parametro del modello di rumore | Descrizione origine |
|---|---|---|
| porta $X$ | x |
Porta a qubit Pauli singolo, capovolgimento bit |
| porta $Y$ | y |
Gate a qubit singolo Pauli, inversione di bit e inversione di fase |
| porta $Z$ | z |
Gate a singolo qubit Pauli, inversione di fase |
| porta $H$ | h |
Porta a qubit Hadamard singolo, crea lo stato di sovrapposizione uniforme |
| porta $S$ | s |
Porta a qubit singolo, sfasamento di fase di mezzo pi |
| $S^\dagger$ porta | s_adj |
Gate a qubit singolo, adiacente di $S$ |
| porta $T$ | t |
Porta a qubit singolo, cambio di fase di π/4 |
| $T^\dagger$ porta | t_adj |
Gate a qubit singolo, adiacente di $T$ |
| porta $S_X$ | sx |
Gate a qubit singolo, rotazione di mezzo bit-flip |
| porta $S_X^\dagger$ | sx_adj |
Gate a qubit singolo, adiacente di $S_X$ |
| porta $R_X$ | rx |
Gate a qubit singolo, rotazione generale delle fasi circa l'asse $x$ |
| porta $R_Y$ | ry |
Gate a qubit singolo, rotazione generale delle fasi circa l'asse $y$ |
| gate $R_Z$ | rz |
Gate a qubit singolo, rotazione generale delle fasi sull'asse $z$ |
| porta $CX$ | cx |
Porta a due qubit, porta controllata-$X$ |
| porta $CY$ | cy |
Porta a due qubit, porta controllata-$Y$ |
| $CZ$ porta | cz |
Porta a due qubit, porta $Z$ controllata |
| porta $R_{XX}$ | rxx |
Gate a due qubit, analogo a $R_X$ |
| porta $R_{YY}$ | ryy |
Gate a due qubit, analogo a $R_Y$ |
| porta $R_{ZZ}$ | rzz |
Gate a due qubit, analogo a $R_Z$ |
| $SWAP$ porta | swap |
Gate a due qubit, scambia gli stati dei qubit |
| porta $CCX$ | ccx |
Porta a tre qubit, porta controllata-$X$ a due qubit |
| Spostamento qubit | mov |
Spostamento di qubit tra le zone del dispositivo (per la simulazione di un dispositivo a atomi neutri) |
| Misurazione del qubit | mz |
Misurazione del singolo qubit nella base Pauli-$Z$ |
| Misurazione e reimpostazione del qubit | mresetz |
Misurazione a qubit singolo e reimpostazione dello stato 0 |
Con NoiseConfigè possibile applicare quattro diversi tipi di rumore alle operazioni precedenti con probabilità specifiche. Questa tabella elenca i parametri del tipo di rumore che è possibile impostare con NoiseConfig. Comprende anche un parametro per l'assenza di rumore.
| Tipo di rumore | Parametro del modello di rumore | Descrizione del rumore | Esempio di utilizzo | Descrizione esempio |
|---|---|---|---|---|
| Pauli rumore $X$ | x |
Inversione di bit | noise.z.x = 0.03 |
Si verifica un'inversione di bit nel 3% delle operazioni $Z$ |
| Pauli rumore $Y$ | y |
Capovolgimento di bit e capovolgimento delle fasi | noise.sx.y = 0.01 |
Flip bit e flip di fase si verificano nel 1% delle operazioni $S_X$ |
| Pauli rumore $Z$ | z |
Capovolgimento della fase | noise.h.z = 0.02 |
Si verifica un’inversione di fase nel 2% delle operazioni $H$ |
| Nessun rumore | i |
Operazione di identità, nessun effetto | noise.cz.ix = 0.02 |
L'inversione di bit solo sul qubit di destinazione avviene nel 2% delle operazioni $CZ$ |
| Perdita di qubit | l |
Il qubit è stato perso dal dispositivo | noise.mov.l = 0.03 |
Qubit perso nel 3% degli spostamenti tra le zone del dispositivo in un computer quantistico ad atomi neutri |
Il rumore si verifica dopo l'operazione di origine, non anziché l'operazione di origine. Ad esempio, noise.z.x significa che il programma applica il gate $Z$ previsto al qubit e quindi applica un gate $X$ imprevisto. Poiché il rumore si applica dopo la sorgente, è possibile configurare il rumore che ha lo stesso effetto della sorgente. Ad esempio, noise.x.x applica un'inversione di bit non intenzionale dopo l'inversione di bit desiderata.
Note
Le API per la simulazione di dispositivi a atomi neutri supportano il rumore proveniente da un numero limitato di fonti. Per ulteriori informazioni, vedere Come creare modelli di rumore per le simulazioni di dispositivi ad atomi neutri nel QDK.
Creare un modello di rumore
Per creare un modello di rumore per una simulazione e visualizzare gli effetti di tale rumore sui risultati del programma quantistico, seguire questa procedura.
In VS Codeaprire il menu Visualizza e scegliere Riquadro comandi.
Immettere Crea: Nuovo Jupyter Notebook. Un file vuoto Jupyter Notebook viene aperto in una nuova scheda.
Nella prima cella del notebook importare gli oggetti necessari Python .
from qdk import init, TargetProfile from qdk.openqasm import compile from qdk.simulation import NoiseConfig, run_qir from qdk.widgets import HistogramIn una nuova cella impostare il profilo di destinazione del dispositivo QIR e compilare il OpenQASM circuito in 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)Creare un
NoiseConfigoggetto e creare il modello di rumore.noise = NoiseConfig() noise.t.z = 0.01 noise.cx.zi = 0.02Questo codice produce questo modello di rumore, in cui il tasso di rumore è la probabilità che la sorgente causi il tipo di rumore corrispondente.
Sorgente di rumore Tipo di rumore Tasso di rumore porta $T$ Capovolgimento della fase 1% porta $CX$ Inversione della fase sul qubit di controllo 2% Eseguire il simulatore con il modello di rumore e visualizzare un istogramma dei risultati della misurazione. Questo codice simula 1.000 scatti nel simulatore di stabilizzazione. Il gate $T$ causa la diramazione stabilizzatrice e l'errore $Z$ configurato viene campionato dopo il gate $T$.
results = run_qir(qir, shots=1000, noise=noise, type="stabilizer") Histogram(results, labels="kets")Per confrontare i risultati rumorosi con una simulazione senza rumore, eseguire di nuovo la simulazione senza alcun modello di rumore.
results = run_qir(qir, shots=1000, type="stabilizer") Histogram(results, labels="kets")
Impostare più tipi di rumore sulla stessa sorgente
È possibile modellare diversi tipi di rumore sulla stessa fonte, con probabilità diverse per ogni tipo di rumore. Ad esempio, questo codice imposta una probabilità dell'1% che si verifichi un'inversione di bit e una probabilità del 3% che si verifichi un'inversione di fase dopo una Hadamard porta.
noise.h.x = 0.01
noise.h.z = 0.03
Quando si configurano più tipi di rumore per la stessa operazione, è possibile applicare un solo tipo di rumore a ogni operazione nel programma. Ad esempio, ogni Hadamard porta può avere rumore $X$ o rumore $Z$, ma non entrambi.
Funzioni del modello di rumore
Anziché i parametri del modello di disturbo, è possibile usare queste funzioni di disturbo per creare il modello di disturbo.
Imposta Pauli rumore
Per includere Pauli il rumore nel modello, chiama la funzione set_pauli_noise su un gate o un'operazione di spostamento.
Per le operazioni a qubit singolo, passare una stringa di un carattere Pauli e una frequenza di rumore. Ad esempio, questo codice imposta una probabilità dell'1% che si verifichi un'inversione di bit durante lo spostamento di qubit.
# Equivalent to: noise.mov.x = 0.01
noise.mov.set_pauli_noise('X', 0.01)
Per le operazioni a due qubit, passare una stringa a due caratteri Pauli e un tasso di rumore. Il primo carattere della Pauli stringa corrisponde al disturbo sul qubit di controllo e il secondo carattere corrisponde al rumore nel qubit di destinazione. Ad esempio, questo codice imposta i capovolgimenti di fase correlati dopo l'1% delle operazioni $CX$.
# Equivalent to: noise.cx.zz = 0.01
noise.cx.set_pauli_noise('ZZ', 0.01)
Impostare il rumore depolarizzato
La set_depolarizing funzione imposta tassi uguali per tutti e tre i tipi di Pauli rumore. Ad esempio, questo codice imposta una probabilità del 3% che Pauli il rumore si verifichi dopo un'operazione $H$, distribuito in modo uniforme come una probabilità dell'1% per ognuno dei tre Pauli tipi di rumore.
# Equivalent to:
# noise.h.x = 0.01
# noise.h.y = 0.01
# noise.h.z = 0.01
noise.h.set_depolarizing(0.03)
Impostare il rumore di inversione di bit
Per impostare la frequenza di rumore per i capovolgimenti di bit, utilizzare la funzione set_bitflip su una porta o un'operazione di movimento. Ad esempio, questo codice imposta 1% probabilità che si verifichi un'inversione di bit dopo un'operazione $R_Z$.
# Equivalent to: noise.rz.x = 0.01
noise.rz.set_bitflip(0.01)
Impostare il rumore di inversione di fase
Per impostare il tasso di rumore per i capovolgimenti di fase in un'operazione, usare la funzione set_phaseflip su un gate o un'operazione di spostamento. Ad esempio, questo codice imposta 1% probabilità che si verifichi un capovolgimento di fase dopo un'operazione $R_Y$.
# Equivalent to: noise.ry.z = 0.01
noise.ry.set_phaseflip(0.01)