Partager via


Simulateur quantique partiellement alloué

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 .

Capture d’écran montrant les paramètres du Q# simulateur bruyant.

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;
}

Capture d’écran montrant les résultats sans bruit.

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.

Capture d’écran montrant les résultats avec 1 % de bruit et 25 % de 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]);
...

Capture d’écran montrant les résultats avec le bruit ajouté après l’allocation de qubits.

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);
    ...

Capture d’écran montrant les résultats avec le bruit ajouté juste avant la mesure.

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épolarisation
ConfigurePauliNoise(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.BitFlipNoise
  • qsharp.PhaseFlipNoise
  • qsharp.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))