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 simulateur éparse est le simulateur local par défaut pour les environnements de développement Azure Quantum, et utilise une représentation éparse des vecteurs d’état quantique. Cette fonctionnalité permet au simulateur de parcimonie de minimiser l’empreinte mémoire utilisée pour représenter les états quantiques, ce qui permet d’effectuer simulations sur un plus grand nombre de qubits. Le simulateur de parcimonie est efficace pour représenter des états quantiques qui sont parcimonieux dans la base de calcul, c’est-à-dire des états quantiques pour lesquels la plupart des coefficients d’amplitude sont nuls dans la base de calcul. Par conséquent, le simulateur éparse permet aux utilisateurs d’explorer des applications plus volumineuses que ce qui peut être représenté à l’aide d’un simulateur à état complet qui gaspille à la fois de la mémoire et du temps sur un nombre exponentiellement élevé d’amplitudes nulles.
Pour plus d’informations sur le simulateur de parcimonie, consultez Jaques et Häner (arXiv:2105.01533).
Appel du simulateur partiellement alloué
Le simulateur clairsemé est le simulateur local par défaut dans Visual Studio Code, avec l’extension Azure Quantum Development Kit installée.
| Scénario | Method |
|---|---|
| Dans un Q# programme dans VS Code | Sélectionner Exécuter le Q# fichier |
| Dans une cellule de notebook Python | result=qsharp.eval("Program_Entry_Operation()")or result=qsharp.run("Program_Entry_Operation()", shots=##) |
Dans une %%qsharp cellule de bloc-notes |
Program_Entry_Operation() |
Ajout du bruit Pauli au simulateur éparse
Le simulateur sparse prend en charge l'intégration du bruit de Pauli dans la simulation. Cette fonctionnalité vous permet de simuler les effets du bruit sur les opérations quantiques et les mesures. Le modèle de bruit est spécifié à l’aide d’un dictionnaire de probabilités de bruit Pauli, où les clés sont les opérateurs XPauli, Yet Zles valeurs sont les probabilités d’appliquer l’opérateur Pauli correspondant. Le modèle de bruit peut être utilisé dans les programmes Q#, les programmes Python ou configuré dans les paramètres VS Code.
Ajout de bruit Pauli à l’aide des paramètres VS Code
Le bruit Pauli peut être configuré globalement dans Visual Studio Code en configurant le Q#> paramètre utilisateur Simulation :Pauli Noise .
Les paramètres s'appliquent aux résultats des histogrammes pour tous les programmes exécutés dans VS Code, ainsi qu'à toutes les portes, mesures et qubits référencés dans le programme. Les paramètres sont identiques à l’utilisation de la ConfigurePauliNoise() fonction.
L’exécution d’un histogramme de l’exemple GHz suivant sans bruit configuré retournerait $\ket{00000}$ environ la moitié du temps et $\ket{11111}$ l’autre moitié.
import Std.Diagnostics.*;
import Std.Measurement.*;
operation Main() : Result []{
let num = 5;
return GHzSample(num);
}
operation GHzSample(n: Int) : Result[] {
use qs = Qubit[n];
H(qs[0]);
ApplyCNOTChain(qs);
let results = MeasureEachZ(qs);
ResetAll(qs);
return results;
}
Toutefois, l’ajout de 1% de bruit de renversement de bits montre que l’état commence à se diffuser, et avec 25% de bruit, l’état est indistinguable du bruit.
Ajout de bruit Pauli à Q# des programmes
Vous pouvez utiliser la ConfigurePauliNoise() fonction pour définir ou modifier le modèle de bruit pour des programmes individuels Q# . En utilisant ConfigurePauliNoise(), vous pouvez contrôler de manière granulaire l’endroit où le bruit est appliqué dans vos Q# programmes.
Note
Si vous configurez le bruit dans les paramètres VS Code, le bruit est appliqué à tous les Q# programmes. Si vous configurez le bruit dans un Q# programme à l’aide ConfigurePauliNoise, ce bruit remplace vos paramètres de bruit VS Code pendant l’exécution de ce programme.
Par exemple, dans le programme précédent, vous pouvez ajouter du bruit immédiatement après l’allocation de qubit :
...
operation GHzSample(n: Int) : Result[] {
use qs = Qubit[n];
ConfigurePauliNoise(0.05, 0.0, 0.0); // 5% bit-flip noise applies to all operations
H(qs[0]);
...
ou juste avant l’opération de mesure.
...
use qs = Qubit[n];
H(qs[0]);
ApplyCNOTChain(qs);
ConfigurePauliNoise(0.05, 0.0, 0.0); // noise applies only to measurement operation
let results = MeasureEachZ(qs);
...
Vous pouvez également utiliser ConfigurePauliNoise() pour réinitialiser ou effacer les configurations de bruit. Dans cet exemple, les paramètres de bruit sont définis après l’allocation de qubit, puis effacés immédiatement après l’opération Hadamard, afin que le bruit soit appliqué uniquement à l’opération H(); .
...
operation GHzSample(n: Int) : Result[] {
use qs = Qubit[n];
ConfigurePauliNoise(0.05, 0.0, 0.0); // noise applies to H() operation
H(qs[0]);
ConfigurePauliNoise(0.0, 0.0, 0.0); // clear noise settings
...
Les fonctions suivantes sont disponibles dans la Std.Diagnostics bibliothèque pour configurer le bruit dans les Q# programmes :
| Fonction | Descriptif | Example |
|---|---|---|
ConfigurePauliNoise() |
Configure le bruit Pauli pour une exécution de simulateur, avec les paramètres représentant les probabilités des portes X, Y et Z. La configuration du bruit s’applique à toutes les portes, mesures et qubits suivants dans un Q# programme. Contourne les paramètres de bruit dans VS Code et peut être réinitialisé par les appels suivants ConfigurePauliNoise() . |
ConfigurePauliNoise(0.1, 0.0, 0.5)or ConfigurePauliNoise(BitFlipNoise(0.1)) |
BitFlipNoise() |
Configure le bruit pour être la porte X uniquement avec une probabilité spécifiée. La configuration du bruit s’applique à toutes les portes, mesures et qubits suivants dans un Q# programme. | 10% bruit d'inversion de bits :ConfigurePauliNoise(BitFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.1, 0.0, 0.0) |
PhaseFlipNoise() |
Configure le bruit pour être la porte Z uniquement avec une probabilité spécifiée. La configuration du bruit s’applique à toutes les portes, mesures et qubits suivants dans un Q# programme. | 10 % de bruit de renversement de phase :ConfigurePauliNoise(PhaseFlipNoise(0.1)) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.1) |
DepolarizingNoise() |
Configure le bruit comme porte X, Y ou Z avec des probabilités égales. | 6% de bruit de dépolarisationConfigurePauliNoise(DepolarizingNoise(0.06)) $\equiv$ ConfigurePauliNoise(0.2, 0.2, 0.2) |
NoNoise() |
Configure le modèle de bruit pour aucun bruit. |
ConfigurePauliNoise(NoNoise()) $\equiv$ ConfigurePauliNoise(0.0, 0.0, 0.0) |
ApplyIdleNoise |
Applique le bruit configuré à un qubit unique pendant la simulation. | ...use q = Qubit[2];ConfigurePauliNoise(0.1, 0.0, 0.0);ApplyIdleNoise(q[0]);... |
Ajout de bruit Pauli aux programmes Python ou aux notebooks Jupyter
La configuration du bruit Pauli est disponible avec le qdk.qsharp package Python et la fonctionnalité d’histogramme avec le qdk.widgets package. Le bruit est ajouté en tant que paramètre à la qsharp.run méthode.
qsharp.BitFlipNoiseqsharp.PhaseFlipNoiseqsharp.DepolarizingNoise
L’exemple suivant montre l’effet de 10% dépolarisation du bruit sur une mesure de l’état bell.
from qdk import qsharp
from qdk import widgets
%%qsharp
operation BellPair() : Result[] {
use q = Qubit[2];
H(q[0]);
CNOT(q[0], q[1]);
MResetEachZ(q)
}
results = qsharp.run("BellPair()", 20, noise=qsharp.DepolarizingNoise(0.1))
results
Le bruit de Pauli arbitraire peut être ajouté au modèle de bruit en spécifiant les probabilités de chaque opérateur Pauli. Utilisons le programme d'exemple GHz précédent :
%%qsharp
operation GHzSample() : Result[] {
use q = Qubit[5];
H(q[0]);
ApplyCNOTChain(q);
MResetEachZ(q)
}
Cette exécution du programme applique un bruit avec une probabilité de 20% (inversion de bit la moitié du temps et inversion de phase l'autre moitié).
result = qsharp.run("GHzSample()", 20, noise=(0.1, 0.0, 0.1))
display(widgets.Histogram(result))
et cette exécution applique un bruit Pauli-Y avec une probabilité de 10%.
result = qsharp.run("GHzSample()", 20, noise=(0.0, 0.1, 0.0))
display(widgets.Histogram(result))