Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
Le Microsoft Quantum Development Kit (QDK) inclut un ensemble de simulateurs quantiques qui modélisent la façon dont votre programme s’exécute sur un ordinateur quantique. Les programmes que vous exécutez sur un ordinateur quantique incluent toujours un certain type et un certain degré de bruit. Le QDKPython package vous permet de créer des modèles de bruit personnalisés à utiliser dans vos simulations via l’API NoiseConfig .
Pour obtenir des instructions sur l’installation et l’utilisation QDK des simulateurs, consultez Comment installer et exécuter les QDK simulateurs quantiques.
Types de bruit
Chaque opération ou instruction dans un programme quantique peut introduire du bruit. Le tableau suivant répertorie toutes les opérations et instructions pour lesquelles vous pouvez définir le bruit.
| Source de bruit | Paramètre de modèle de bruit | Description de la source |
|---|---|---|
| porte $X$ | x |
Porte de Pauli sur un seul qubit, inversion de bit |
| porte $Y$ | y |
Porte de Pauli à un qubit, inversion de bit et inversion de phase |
| porte $Z$ | z |
Porte de Pauli à un seul qubit, inversion de phase |
| porte $H$ | h |
Porte Hadamard à qubit unique, crée un état de superposition égal |
| porte $S$ | s |
Porte à qubit unique, inversion de phase de demi-π |
| porte $S^\dagger$ | s_adj |
Porte à qubit unique, adjoint de $S$ |
| porte $T$ | t |
Porte à qubit unique, inversion de phase de quart de π |
| porte $T^\dagger$ | t_adj |
Porte à qubit unique, adjoint de $T$ |
| porte $S_X$ | sx |
Porte à un qubit, demi-renversement de bit |
| porte $S_X^\dagger$ | sx_adj |
Porte à qubit unique, adjointe de $S_X$ |
| porte $R_X$ | rx |
Porte à qubit unique, rotation de phase générale sur l’axe $x$ |
| porte $R_Y$ | ry |
Porte à qubit unique, rotation de phase générale sur l’axe $y$ |
| porte $R_Z$ | rz |
Porte à qubit unique, rotation de phase générale sur l’axe $z$ |
| porte $CX$ | cx |
Porte à deux qubits, porte $X$ contrôlée |
| porte $CY$ | cy |
Porte à deux qubits, porte $Y$ contrôlée |
| porte $CZ$ | cz |
Porte à deux qubits, porte $Z$ contrôlée |
| porte $R_{XX}$ | rxx |
Porte à deux qubits, analogue à $R_X$ |
| porte $R_{YY}$ | ryy |
Porte à deux qubits, analogue à $R_Y$ |
| porte $R_{ZZ}$ | rzz |
Porte à deux qubits, analogue à $R_Z$ |
| porte $SWAP$ | swap |
Porte à deux qubits, échange les états des qubits |
| porte $CCX$ | ccx |
Porte à trois qubits, porte contrôlée à deux qubits $X$ |
| Le mouvement du qubit | mov |
Déplacement de qubits entre les zones du dispositif (pour la simulation d’un dispositif à atomes neutres) |
| Mesure de qubit | mz |
Mesure à qubit unique dans la base pauli-$Z$ |
| Mesure et réinitialisation du qubit | mresetz |
Mesure à qubit unique et réinitialisation à 0 état |
Avec NoiseConfig, vous pouvez appliquer quatre types de bruit différents aux opérations précédentes avec des probabilités spécifiques. Le tableau suivant répertorie les paramètres de type de bruit que vous pouvez définir avec NoiseConfig, y compris un paramètre pour aucun bruit.
| Type de bruit | Paramètre de modèle de bruit | Description du bruit | Exemple d’utilisation | Exemple de description |
|---|---|---|---|---|
| Bruit quantique de Pauli $X$ | x |
Retournement de bit | noise.z.x = 0.03 |
Une inversion de bit se produit dans 3 % des opérations $Z$ |
| Bruit de Pauli $Y$ | y |
Retournement de bit et retournement de phase | noise.sx.y = 0.01 |
Le retournement de bit et le retournement de phase se produisent dans 1% des opérations $S_X$ |
| Bruit de Pauli $Z$ | z |
Inversion de phase | noise.h.z = 0.02 |
Une inversion de phase se produit dans 2 % des opérations $H$ |
| Aucun bruit | i |
Opération d’identité, aucun effet | noise.cz.ix = 0.02 |
Le retournement de bit se produit uniquement sur le qubit cible dans 2 % des opérations $CZ$. |
| Perte de qubit | l |
Qubit est perdu de l’appareil | noise.mov.l = 0.03 |
Le qubit est perdu dans 3 % des déplacements entre les zones de l’appareil sur un ordinateur quantique à atomes neutres |
Le bruit se produit après l’opération source, et non à la place de l’opération source. Par exemple, noise.z.x signifie que le programme applique la porte $Z$ prévue au qubit, puis applique une porte $X$ involontaire au qubit. Étant donné que le bruit s’applique après la source, vous pouvez configurer le bruit qui a le même effet que la source. Par exemple, noise.x.x applique une inversion de bit involontaire après l’inversion de bit prévue.
Note
Les API de simulation d’appareil atom neutre prennent en charge le bruit provenant d’un nombre limité de sources. Pour plus d’informations, consultez Comment élaborer des modèles de bruit pour les simulations de dispositifs à atomes neutres dans le QDK.
Créer un modèle de bruit
Pour créer un modèle de bruit pour une simulation et afficher les effets de ce bruit sur les résultats de votre programme quantique, procédez comme suit.
Dans VS Code, ouvrez le menu Affichage et choisissez Palette de commandes.
Entrez Créer : Nouveau Jupyter Notebook. Un fichier vide Jupyter Notebook s’ouvre dans un nouvel onglet.
Dans la première cellule du notebook, importez les objets requis Python .
from qdk import init, TargetProfile from qdk.openqasm import compile from qdk.simulation import NoiseConfig, run_qir from qdk.widgets import HistogramDans une nouvelle cellule, définissez le profil cible QIR de l’appareil et compilez votre circuit OpenQASM en 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)Créez un
NoiseConfigobjet et générez votre modèle de bruit.noise = NoiseConfig() noise.h.x = 0.01 noise.cx.zi = 0.02Ce code produit le modèle de bruit suivant, où le taux de bruit est la probabilité que la source provoque le type de bruit correspondant.
Source de bruit Type de bruit Taux de bruit porte $H$ Retournement de bit 1 % porte $CX$ Inversion de phase sur le qubit de contrôle 2 % Exécutez le simulateur avec le modèle de bruit et affichez un histogramme des résultats de mesure. Par exemple, exécutez le code suivant pour simuler 1 000 captures de votre programme sur le simulateur Clifford.
results = run_qir(qir, shots=1000, noise=noise, type="clifford") Histogram(results, labels="kets")Pour comparer les résultats bruyants à une simulation sans bruit, réexécutez la simulation sans modèle de bruit.
results = run_qir(qir, shots=1000, type="clifford") Histogram(results, labels="kets")
Définir plusieurs types de bruit sur la même source
Vous pouvez modéliser différents types de bruit sur la même source, avec des probabilités différentes pour chaque type de bruit. Par exemple, le code suivant définit une probabilité de 1 % qu’un retournement de bit se produise et une probabilité de 3 % qu’un retournement de phase se produise après une porte de Hadamard.
noise.h.x = 0.01
noise.h.z = 0.03
Lorsque vous configurez plusieurs types de bruit pour la même opération, un seul type de bruit peut s’appliquer à chaque opération de votre programme. Par exemple, chaque porte Hadamard peut avoir un bruit $X$ ou un bruit $Z$, mais pas les deux.
Fonctions de modèle de bruit
Au lieu des paramètres de modèle de bruit, vous pouvez utiliser l’ensemble suivant de fonctions de bruit pour créer votre modèle de bruit.
Configurer le bruit de Pauli
Pour inclure le bruit Pauli dans votre modèle, appelez la fonction set_pauli_noise sur une porte ou une opération de mouvement.
Pour les opérations à qubit unique, passez une chaîne Pauli d’un caractère et une fréquence de bruit. Par exemple, le code suivant définit une probabilité de 1 % qu’une inversion de bit se produise lors du déplacement du qubit.
# Equivalent to: noise.mov.x = 0.01
noise.mov.set_pauli_noise('X', 0.01)
Pour les opérations à deux qubits, spécifiez une chaîne de Pauli de deux caractères et un taux de bruit. Le premier caractère de la chaîne Pauli correspond au bruit sur le qubit de contrôle et le deuxième caractère correspond au bruit sur le qubit cible. Par exemple, le code suivant définit des retournements de phase corrélés après 1% d’opérations $CX$.
# Equivalent to: noise.cx.zz = 0.01
noise.cx.set_pauli_noise('ZZ', 0.01)
Définir le bruit dépolarisant
La set_depolarizing fonction définit des taux de bruit égaux mais non corrélés pour les trois types de bruit Pauli. Par exemple, le code suivant définit une probabilité de 3 % que du bruit de Pauli se produise après une opération $H$, répartie uniformément en une probabilité de 1 % pour chacun des trois types de bruit de Pauli.
# Equivalent to:
# noise.h.x = 0.01
# noise.h.y = 0.01
# noise.h.z = 0.01
noise.h.set_depolarizing(0.03)
Définir le bruit de retournement du bit
Pour définir le taux de bruit pour les retournements de bits, utilisez la fonction set_bitflip sur une porte ou une opération de mouvement. Par exemple, le code suivant définit une chance de 1% qu’un retournement de phase se produit après une opération $R_Z$.
# Equivalent to: noise.rz.x = 0.01
noise.rz.set_bitflip(0.01)
Paramétrer le bruit de retournement de phase
Pour définir le taux de bruit pour les retournements de phase dans une opération, utilisez la set_phaseflip fonction sur une porte ou une opération de déplacement. Par exemple, le code suivant définit une chance de 1% qu’un retournement de phase se produit après une opération $R_Y$.
# Equivalent to: noise.ry.z = 0.01
noise.ry.set_phaseflip(0.01)