Lorsque le principe du calcul quantique a été clarifié pour la première fois dans les années 1980, il n'y avait aucune théorie de la correction d'erreur utilisée dans le traitement numérique classique, ou il était extrêmement difficile d'établir cette théorie, les ordinateurs quantiques sont donc réalistes. Il semble que certaines personnes aient pensé que c'était impossible. Dans le cas des bits classiques, il suffit de considérer l'erreur dans laquelle les bits sont inversés, alors que dans le cas des bits quantiques, le changement a des degrés de liberté infinis, il est donc nécessaire de traiter les erreurs avec des motifs infinis. Si vous imaginez une sphère de Bloch, il existe une infinité de façons de changer l'état quantique. Vous devez penser à restaurer précisément l'état d'origine à partir de l'état décalé. De plus, les états quantiques ne peuvent pas être dupliqués de manière innocente comme les informations classiques et sont rompus lorsqu'ils sont mesurés. Il semble qu'il y avait diverses choses comme, et on a pensé que la difficulté n'était pas étrange. Peter Shor a été le premier à le briser. En utilisant le "code Shor" proposé par ce Short, il est possible de corriger toute erreur qui fonctionne sur un bit quantique. Cet endroit "arbitraire" est incroyable. De plus, il peut être réalisé avec un circuit quantique relativement simple. Cette fois, après avoir expliqué la théorie, j'aimerais réaliser sa puissance avec le simulateur de calcul quantique qlazy.
Les documents suivants ont été utilisés comme références.
En tant qu'exercice préparatoire avant de me lancer dans l'histoire de la correction d'erreur quantique, je passerai en revue l'idée de base de la correction d'erreur dans l'information classique. Pensez maintenant à transmettre un bit d'information via un canal classique bruyant. Supposons que ce canal provoque l'inversion des bits avec une probabilité de p. Autrement dit, si le bit d'entrée est 0, le bit est inversé à 1 avec une probabilité p et reste 0 avec une probabilité 1-p. De plus, si le bit d'entrée est 1, le bit est inversé à 0 avec une probabilité p et reste 1 avec une probabilité 1-p. Un tel canal est appelé "canal symétrique binaire". Si vous utilisez ce canal tel quel sans penser à rien, le taux d'erreur est bien sûr p. N'est-il pas possible de réduire le taux d'erreur en effectuant un certain traitement sur le principe de ce canal?
La méthode de base et bien connue consiste à dupliquer les bits et à les rendre intentionnellement redondants. Par exemple, les informations 1 bit données sont converties (codées) en 3 bits comme indiqué ci-dessous.
\begin{align}
0 &\rightarrow 000 \\
1 &\rightarrow 111 \\
\end{align}
Ceci est transmis l'un après l'autre via le canal classique. La quantité d'informations sera triplée, mais l'idée est qu'il n'y a pas d'autre choix que de corriger les erreurs. La chaîne de bits 000 peut être 010 du côté de la réception, car le bruit inverse les bits de manière probabiliste. Cependant, c'est parce que le bit du milieu est inversé, et je suppose qu'il est en fait 000. En d'autres termes, c'est une méthode pour prendre une décision majoritaire et en supposant que de nombreux bits sont les bits d'origine. Il est appelé «code de répétition» car il répète et encode les bits d'entrée. Comme vous pouvez le voir, il est possible que l'entrée soit 000 et que le bruit aboutisse à 110. Cependant, je pense qu'il est bon que le taux d'erreur moyen total soit faible. Alors, comment le taux d'erreur moyen est-il calculé précisément? L'inversion de 0 ou 1 bit peut être corrigée, donc le calcul de la probabilité que 2 ou 3 bits seront inversés donnera le taux d'erreur souhaité. La probabilité de retourner 3 à la fois est $ p ^ 3 $, et la probabilité de retourner 2 est $ 3p ^ 2 (1-p) $ pour 3 modèles. Ajoutez ceci pour obtenir $ p ^ 3 + 3p ^ 2 (1-p) = 3p ^ 2 --2p ^ 3 $. Comme le taux d'erreur lorsque rien n'a été fait était de $ p $, la condition selon laquelle le taux d'erreur est plus petit lorsque l'erreur est corrigée est $ p> 3p ^ 2 --2p ^ 3 $, c'est-à-dire $ p <1 / Ce sera 2 $. En d'autres termes, si la valeur de $ p $ est inférieure à $ 1/2 $, l'effet de ce code répétitif sera affiché.
Les bits quantiques sont codés de la même manière. Par exemple, si l'état d'un bit quantique est $ \ ket {\ psi} = a \ ket {0} + b \ ket {1} $, alors c'est $ a \ ket {000} + b \ ket {111} Considérez s'il peut être converti (encodé) comme $. Comme vous pouvez le voir facilement, cela peut être réalisé en passant par le circuit quantique suivant.
|psi> --*--*-- ...
| |
|0> --X----- ...
|
|0> -----X-- ...
Dans cet état, même si un bit est inversé et changé en $ \ ket {000} \ rightarrow \ ket {010} $, l'état d'origine peut être restauré. J'expliquerai que désormais (les points sur la figure indiquent qu'il s'agit de canaux de bruit, etc.).
Tout d'abord, nous devons savoir quel bit a été inversé. Cette procédure est appelée "détection d'erreur" ou "diagnostic de syndrome". Dans le cas de 3 bits, vous pouvez le savoir en effectuant l'opération de projection suivante.
\begin{align}
P_0 &= \ket{000} \bra{000} + \ket{111} \bra{111} \\
P_1 &= \ket{100} \bra{100} + \ket{011} \bra{011} \\
P_2 &= \ket{010} \bra{010} + \ket{101} \bra{101} \\
P_3 &= \ket{001} \bra{001} + \ket{110} \bra{110} \tag{1}
\end{align}
$ P_0 $ est un opérateur de projection pour les mesures qui détectent que rien ne va pas. $ P_1 $ est une mesure de projection qui détecte que le premier bit est incorrect. Ci-dessous, $ P_2 $ est une mesure de projection qui détecte une erreur dans le deuxième bit et $ P_3 $ est une erreur dans le troisième bit. Si le résultat du bruit est $ a \ ket {100} + b \ ket {011} $, seul $ \ bra {\ psi} P_1 \ ket {\ psi} $ sera 1 et tous les autres seront 0. Vous pouvez donc voir que $ P_1 $ est certainement un opérateur pour la détection d'erreur dans le premier bit.
En plus de cet exemple, il existe une mesure de projection pour diagnostiquer le syndrome. J'ai utilisé quatre opérateurs dans l'équation (1), mais il y a un suguremono qui peut être fait avec deux. Permettez-moi de conclure d’abord. Comment mesurer les bulles d'observateur $ Z_1 Z_2 $ et $ Z_2 Z_3 $, où les opérateurs Pauli $ Z $ appliqués aux premier, deuxième et troisième bits quantiques sont respectivement $ Z_1, Z_2, Z_3 $. est. Même si on dit que c'est fou, c'est peut-être dans un état de "Hmm?", Alors je vais ajouter une petite explication.
Pauli $ Z $ peut s'écrire $ Z = \ ket {0} \ bra {0} - \ ket {1} \ bra {1} $
\begin{align}
Z_1 Z_2 &= (\ket{0}_{1}\bra{0}_{1}-\ket{1}_{1}\bra{1}_{1})(\ket{0}_{2}\bra{0}_{2}-\ket{1}_{2}\bra{1}_{2}) \\
&= \ket{00}\bra{00} + \ket{11}\bra{11} - \ket{01}\bra{01} - \ket{10}\bra{10} \\
&= (\ket{00}\bra{00} + \ket{11}\bra{11}) \otimes I_3 - (\ket{01}\bra{01} + \ket{10}\bra{10}) \otimes I_3 \tag{2}
\end{align}
Peut être étendu. Comme vous pouvez le voir en regardant cette équation, si les premier et second bits quantiques sont identiques (appelé "parité paire"), la mesure de cet observateur produira 1. Inversement, si les premier et second bits quantiques sont différents (appelé "parité impaire"), -1 est émis [^ 1]. Autrement dit, vous pouvez vérifier la parité des premier et deuxième bits quantiques en effectuant une mesure de $ Z_1 Z_2 $. De même, une mesure de $ Z_2 Z_3 $ révèle la parité des deuxième et troisième bits quantiques.
[^ 1]: Ici, l'expression "mesurer la bulle de l'observateur" peut être un peu déroutante, je vais donc ajouter une petite explication. La bulle d'observateur est littéralement «montant observable». Dans le cadre de la mécanique quantique, les grandeurs physiquement observables peuvent être exprimées par l'opérateur Hermeet. L'acteur représentatif est l'hamiltonien qui a exprimé la quantité physique d'énergie en tant qu'opérateur Elmeet. Mesurer une grandeur physique équivaut à résoudre le problème de valeur propre correspondant de l'opérateur bulle d'observateur = hermeat, la valeur mesurée est une valeur propre (car elle est hermétique, c'est toujours une valeur réelle), et l'état après la mesure est cette valeur propre Il devient le vecteur propre correspondant (état unique). Ce qui est actuellement donné en tant qu'observateur est Pauli $ Z $ (produit). Mesurer Pauli $ Z $ signifie, physiquement, mesurer la valeur énergétique du système donnée par l'hamiltonien $ H = Z $. En d'autres termes, il s'agit d'une mesure du système à 1 spin dans la direction de l'axe Z. En d'autres termes, vous pouvez le considérer comme la mesure de bits quantiques, ce qui est familier dans les circuits quantiques. Après tout, "mesurer la bulle d'observateur" de $ Z_1 Z_2 $ n'est rien, mesurer le premier bit quantique sur une base de calcul pour obtenir une valeur de -1 ou 1 et le deuxième bit quantique. Est de mesurer sur une base de calcul pour obtenir une valeur de -1 ou 1 et en prendre le produit. A ce moment, l'ordre des première et deuxième mesures peut être l'un ou l'autre (car ils peuvent être échangés en tant qu'opérateurs). À propos, mesurer la bulle d'observateur appelée Pauli $ X $ signifie que la mesure dans la direction de l'axe X est exécutée en termes de bits quantiques, donc après avoir appliqué la porte Adamal, mesurez dans la direction de l'axe Z. Equivalent à faire.
Le tableau est le suivant.
Bit inversé | ||
---|---|---|
+1 (pair) | +1 (pair) | Aucun |
+1 (pair) | -1 (impair) | Le troisième |
-1 (impair) | +1 (pair) | Premier |
-1 (impair) | -1 (impair) | La deuxième |
Dans la première ligne, la 1ère et la 2ème sont à parité paire, et les 2ème et 3ème sont à parité paire, il semble donc que l'on puisse estimer qu'il n'y a pas de bits inversés.
Dans la deuxième ligne, la première et la deuxième sont de parité paire, et les deuxième et troisième sont de parité impaire, de sorte que l'on peut estimer que la troisième est inversée.
Dans la 3ème ligne, la 1ère et la 2ème sont de parité impaire, et les 2ème et 3ème sont de parité paire, donc la 1ère est susceptible d'être inversée.
Dans la dernière 4ème ligne, la 1ère et la 2ème sont à parité impaire, et les 2ème et 3ème sont à parité impaire, il semble donc probable que la 2ème au milieu soit inversée.
Par conséquent, il est possible d'estimer le nombre de bits quantiques inversés. Si vous avez au plus un bit quantique inverseur, vous pouvez déterminer complètement le numéro du bit inverseur.
Quel genre de circuit quantique ce diagnostic de syndrome peut-il être réalisé? Il suffit de le mesurer
|psi> --*--*-- ... --M--
| |
|0> --X----- ... --M--
|
|0> -----X-- ... --M--
Cela peut finir comme. Mais ce n'est pas bon. Le bit quantique que je souhaite corriger est détruit par la mesure. Par conséquent, afin de ne pas détruire l'état quantique dont vous souhaitez corriger les erreurs, ajoutez un bit quantique auxiliaire (auxiliaire) comme indiqué ci-dessous, manquez l'état quantique cible à cet endroit et ne mesurez pas cet état. Je ne peux pas.
|psi> --*--*-- ... --*------------
| | |
|0> --X----- ... -----*--*------
| | | |
|0> -----X-- ... -----------*---
| | | |
|0> --X--X--------M1
| |
|0> --------X--X--M2
Ici, la mesure de $ Z_1 Z_2 $ est exprimée par M1 et la mesure de $ Z_2 Z_3 $ est exprimée par M2 [^ 2].
[^ 2]: Le bit cible est mesuré après avoir passé deux CNOT avec les premier et second bits quantiques comme bits de contrôle (Mesure de M1), mais pourquoi ai-je mesuré $ Z_1 Z_2 $? Qu'il sera? Si vous écrivez $ \ ket {x} \ ket {y} \ ket {0} \ rightarrow \ ket {x} \ ket {y} \ ket {x \ oplus y} $, $ x $ et $ y $ S'ils sont identiques, ils sont $ \ ket {x} \ ket {y} \ ket {0} $, et la valeur mesurée de M1 est +1. S'ils sont différents, ils sont $ \ ket {x} \ ket {y} \ ket {1} $. , La valeur mesurée de M1 est -1.
Maintenant que le bit quantique inversé a été identifié par le diagnostic de syndrome, l'étape suivante consiste à inverser à nouveau le bit quantique et à le restaurer. Active / désactive la porte X en fonction des valeurs de M1 et M2.
|psi> --*--*-- ... --*------------X---
| | | ||
|0> --X----- ... -----*--*------X---
| | | | ||
|0> -----X-- ... -----------*---X---
| | | | ||
|0> --X--X---------M1
| | ||
|0> --------X--X---M2
J'ai essayé d'exprimer le contrôle de la porte en fonction du résultat de la mesure avec une double barre verticale (c'est difficile à comprendre et ce n'est pas une façon formelle d'écrire, mais sentez-le, transpirez). X-gate l'un des trois bits quantiques avec le modèle indiqué dans le tableau ci-dessus. Cela le ramènera à son état d'origine [^ 3].
[^ 3]: Bien sûr, l'hypothèse actuelle est que le nombre de bits quantiques à inverser en raison du bruit est de 1 ou moins, donc si 2 bits ou plus sont inversés, il ne peut pas être restauré.
Au lieu de manipuler la porte en fonction du résultat de la mesure, vous pouvez faire de même avec CNOT et Toffoli.
[bruit]
|psi> --*--*-- ... --*-------------------X--X--
| | | | |
|0> --X----- ... -----*--*----------------X--
| | | | | |
|0> -----X-- ... -----------*-------X-----X--
| | | | | | |
|0> --X--X----------------*--*--
| | | |
|0> --------X--X-------*-----*--
[Codage] [Diagnostic de syndrome] [correction]
Comprenez-vous cela?
Au stade du diagnostic du syndrome, si le premier ansila est +1 ($ \ ket {0}
Si le premier ansila vaut +1 ($ \ ket {0}
Si le premier ansila est -1 ($ \ ket {1}
Si le premier ansila est -1 ($ \ ket {1}
Nous sommes donc maintenant en mesure de récupérer les bits pour tous les modèles d'erreur.
Enfin, faites l'inverse de l'encodage pour le restaurer complètement à son état d'origine.
[bruit]
|psi> --*--*-- ... --*-------------------X--X---*--*-- |psi>
| | | | | | |
|0> --X----- ... -----*--*----------------X------X-- |0>
| | | | | | |
|0> -----X-- ... -----------*-------X-----X---X----- |0>
| | | | | | |
|0> --X--X----------------*--*--
| | | |
|0> --------X--X-------*-----*--
[Codage] [Diagnostic de syndrome] [correction] [Décryptage]
Ceci termine le circuit de correction d'erreur pour l'inversion de 1 bit quantique.
Cependant, il n'est pas bon que 2 bits quantiques supplémentaires soient nécessaires comme ansila. Le circuit qui a été conçu est illustré ci-dessous car nous voulons éliminer l'ancilla si possible. L'idée est que seul le premier bit quantique doit être récupéré, de sorte que le deuxième et le troisième n'ont pas besoin d'être restaurés. Cependant, assurez-vous qu'il n'y a pas d'intrication entre au moins le premier et les autres bits quantiques.
|psi> --*--*-- ... --*--*--X-- |psi>
| | | | |
|0> --X----- ... -----X--*--
| | |
|0> -----X-- ... --X-----*--
Et ça. C'est assez simple, mais est-ce vraiment correct? Vérifions avec une formule. L'état d'entrée est $ \ ket {\ psi} = a \ ket {0} + b \ ket {1} $. Il est clair que l'état sera $ a \ ket {000} + b \ ket {111} $ au stade de l'encodage, voyons donc le changement immédiatement après.
S'il n'y a pas de bits quantiques à inverser
\begin{align}
a\ket{000} + b\ket{111} &\rightarrow a\ket{000} + b\ket{110} \rightarrow a\ket{000} + b\ket{100} \rightarrow a\ket{000} + b\ket{100} \\
&= (a\ket{0} + b\ket{1}) \otimes \ket{00} \tag{3}
\end{align}
Si le premier bit quantique est inversé à cause du bruit
\begin{align}
a\ket{100} + b\ket{011} &\rightarrow a\ket{101} + b\ket{011} \rightarrow a\ket{111} + b\ket{011} \rightarrow a\ket{011} + b\ket{111} \\
&= (a\ket{0} + b\ket{1}) \otimes \ket{11} \tag{4}
\end{align}
Si le deuxième bit quantique est inversé à cause du bruit
\begin{align}
a\ket{010} + b\ket{101} &\rightarrow a\ket{010} + b\ket{100} \rightarrow a\ket{010} + b\ket{110} \rightarrow a\ket{010} + b\ket{110} \\
&= (a\ket{0} + b\ket{1}) \otimes \ket{10} \tag{5}
\end{align}
Si le troisième bit quantique est inversé à cause du bruit
\begin{align}
a\ket{001} + b\ket{110} &\rightarrow a\ket{001} + b\ket{111} \rightarrow a\ket{001} + b\ket{101} \rightarrow a\ket{001} + b\ket{101} \\
&= (a\ket{0} + b\ket{1}) \otimes \ket{01} \tag{6}
\end{align}
Ainsi, les 2e et 3e bits quantiques ne reviennent pas nécessairement à $ \ ket {00} $, mais au moins le 1er bit quantique est $ \ ket {\ psi} = a \ ket {dans tous les modèles Il est revenu à 0} + b \ ket {1} $ et n'est pas enchevêtré avec d'autres bits quantiques (= dans un état de produit).
Vient ensuite la correction d'erreur lorsqu'il y a inversion de phase dans un bit quantique. L'inversion de bits peut être représentée par la porte X, mais l'inversion de phase est l'action de la porte Z. En d'autres termes, le changement est $ a \ ket {0} + b \ ket {1} \ rightarrow a \ ket {0} -b \ ket {1} $. Je veux me remettre de cette condition, que dois-je faire? En fait, il existe une simple prescription. Tout ce que vous avez à faire est d'utiliser la porte Adamal. L'action d'Adamal Gate est
\begin{align}
\ket{0} &\rightarrow \ket{+} = \frac{1}{2} (\ket{0} + \ket{1}) \\
\ket{1} &\rightarrow \ket{-} = \frac{1}{2} (\ket{0} - \ket{1}) \tag{7}
\end{align}
Ainsi, l'inversion de phase de $ a \ ket {0} + b \ ket {1} \ rightarrow a \ ket {0} -b \ ket {1} $ est
\begin{align}
& \frac{1}{2} (a+b) \ket{+} \frac{1}{2} (a-b) \ket{-} \\
& \rightarrow \frac{1}{2} (a+b) \ket{-} \frac{1}{2} (a-b) \ket{+} \tag{8}
\end{align}
Est exprimé comme. En d'autres termes, l'inversion de phase n'est rien d'autre qu'une inversion de bits à la base de $ \ {\ ket {+}, \ ket {-} \} $. Par conséquent, dans le circuit d'inversion de bits mentionné précédemment, il suffit d'appliquer Adamal après le codage, de le placer dans le canal de bruit et d'appliquer Adamal juste avant le décodage pour le restaurer.
|psi> --*--*--H-- ... --H--*--*--X-- |psi>
| | | | |
|0> --X-----H-- ... --H-----X--*--
| | |
|0> -----X--H-- ... --H--X-----*--
Ceci termine la correction d'erreur pour l'inversion de phase.
"Shor code" réalise une correction d'erreur de l'inversion de bit et de l'inversion de phase en même temps. Dans la correction d'erreur de l'inversion de phase, 1 bit quantique dans l'état initial est rendu redondant à 3 bits quantiques, et Adamal est appliqué à chacun. Puisque la correction d'erreur d'inversion de bit est également effectuée pour chaque bit quantique, elle est rendue redondante à 3 bits quantiques chacun. En conséquence, un total de 9 bits quantiques est requis. Dans le schéma de circuit,
|psi> --*--*--H----*--*-- ... --*--*--X--H--*--*--X---- |psi>
| | | | | | | | | |
| | |0> --X----- ... -----X--*-- | | |
| | | | | | | | |
| | |0> -----X-- ... --X-----*-- | | |
| | | | |
|0> --X-----H----*--*-- ... --*--*--X--H-----X--*--
| | | | | | | |
| |0> --X----- ... -----X--*-- | |
| | | | | |
| |0> -----X-- ... --X-----*-- | |
| | |
|0> -----X--H----*--*-- ... --*--*--X--H--X-----*--
| | | | |
|0> --X----- ... -----X--*--
| | |
|0> -----X-- ... --X-----*--
Ce sera. Vous pouvez maintenant récupérer l'état d'origine contre l'erreur d'inversion de bits et d'inversion de phase (bien sûr, nous supposons actuellement qu'un seul des bits quantiques est inversé par le bruit. est). Cependant, en fait, le code court construit de cette manière a un effet encore plus fort. Non seulement les erreurs discrètes faciles à comprendre telles que l'inversion de bits et l'inversion de phase, mais également les changements continus arbitraires (erreurs) peuvent être corrigés correctement.
Par exemple, supposons que l'état encodé soit $ \ ket {\ psi} $. Si seul ce premier bit quantique recevait le bruit décrit par l'opérateur Kraus $ \ {E_ {i} \} $, le changement serait:
\ket{\psi}\bra{\psi} \rightarrow \sum_{i} E_{i} \ket{\psi}\bra{\psi} E_{i}^{\dagger} \tag{9}
Vous pouvez écrire comme ça. Ici, $ E_i $ utilise les opérateurs Pauli $ X_1, Z_1 $ qui travaillent sur le premier bit quantique et le coefficient complexe $ \ {e_ {ij} \} $,
E_i = e_{i0} I + e_{i1} X_1 + e_{i2} Z_1 + e_{i3} X_1 Z_1 \tag{10}
Peut être développé avec [^ 5].
[^ 5]: Ici, $ X_1 Z_1 $ est égal à $ Y_1 $ sans le coefficient, donc $ E_i $ peut être développé à l'aide de l'opérateur Pauli. Cette expansion est possible pour toute matrice bidimensionnelle.
En se concentrant uniquement sur un terme $ i $ dans l'équation (9), les états quantiques sont $ \ ket {\ psi}, X_ {1} \ ket {\ psi}, Z_ {1} \ ket {\ psi} , X_ {1} Z_ {1} \ ket {\ psi} $ passera à l'état superposé. Autrement dit, l'état $ \ ket {\ psi} $ lui-même, l'inversion de bit de l'état $ \ ket {\ psi} $, l'inversion de phase de l'état $ \ ket {\ psi} $, le bit de l'état $ \ ket {\ psi} $ -C'est une superposition de quatre états appelée inversion de phase. Un diagnostic de syndrome peut être appliqué à cela pour savoir lequel des quatre était. Une fois trouvé, l'étape suivante consiste à restaurer l'état quantique en passant par la porte selon le modèle d'erreur. L'équation (9) est la somme de tous les $ i $, mais le même argument permet la correction d'erreur pour les autres $ i $, et le même argument pour les nombres de bits quantiques autres que le premier. Permet la correction des erreurs.
Maintenant, simulons le schéma de circuit de correction d'erreur par le code de Short. Voici l'intégralité du code Python.
import random
from qlazypy import DensOp
def create_densop():
de_ini = DensOp(qubit_num=9).h(0)
de_fin = de_ini.clone()
return de_ini, de_fin
def noise(self, kind='', prob=0.0, qid=[]):
qchannel = {'bit_flip':self.bit_flip,
'phase_flip':self.phase_flip,
'bit_phase_flip':self.bit_phase_flip,
'depolarize':self.depolarize,
'amp_dump':self.amp_dump,
'phase_dump':self.phase_dump}
[qchannel[kind](i,prob=prob) for i in qid]
return self
def code(self):
self.cx(0,3).cx(0,6)
self.h(0).h(3).h(6)
self.cx(0,1).cx(0,2)
self.cx(3,4).cx(3,5)
self.cx(6,7).cx(6,8)
return self
def correct(self):
self.cx(0,2).cx(0,1)
self.cx(3,5).cx(3,4)
self.cx(6,8).cx(6,7)
self.ccx(2,1,0).ccx(5,4,3).ccx(8,7,6)
self.h(0).h(3).h(6)
self.cx(0,3).cx(0,6)
self.ccx(6,3,0)
return self
if __name__ == '__main__':
# add custom gate
DensOp.add_method(code)
DensOp.add_method(noise)
DensOp.add_method(correct)
# settings
kind = 'depolarize' # bit_flip,phase_flip,bit_phase_flip,depolarize,amp_dump,phase_dump
prob = 1.0
qid = [0]
print("== settings ==")
print("* kind of noise =", kind)
print("* probability of noise =", prob)
print("* noisy channels =", qid)
# error correction (shor code)
de_ini, de_fin = create_densop()
de_fin.code()
de_fin.noise(kind=kind, prob=prob, qid=qid)
de_fin.correct()
# evaluate fidelity
fid = de_fin.fidelity(de_ini, qid=[0])
print("== result ==")
print("* fidelity = {:.6f}".format(fid))
# free all densops
DensOp.free_all(de_ini, de_fin)
Je vais vous expliquer ce que vous faites dans l'ordre. Tout d'abord, regardez la section de traitement principale.
# add custom gate
DensOp.add_method(code)
DensOp.add_method(noise)
DensOp.add_method(correct)
Maintenant, enregistrez le traitement requis en tant que porte personnalisée. Les fonctions code, noise et correct sont définies en haut afin de pouvoir être utilisées comme méthodes de la classe QState.
# settings
kind = 'depolarize' # bit_flip,phase_flip,bit_phase_flip,depolarize,amp_dump,phase_dump
prob = 1.0
qid = [0]
Dans, les paramètres de la simulation sont définis. kind représente le modèle de bruit que vous souhaitez appliquer. In'bit_flip '(inversion de bit),' phase_flip '(inversion de phase),' bit_phase_flip '(inversion de phase de bit),' depolarize '(dépolarisation),' amp_dump '(amplitude dumping),' phase_dump '(amortissement de phase) Sélectionnez le nom du motif à partir duquel vous souhaitez appliquer. Les canaux quantiques typiques décrits dans l'article précédent (https://qiita.com/SamN/items/9d86224a35c4b6c031b8) peuvent être appliqués à l'opérateur de densité (l'application de canal quantique à l'opérateur de densité est v0.0.34). Ajoutée). prob représente la probabilité (intensité) d'ajouter du bruit dans chaque canal quantique. qid est une liste qui définit les bits quantiques auxquels appliquer le bruit. Dans l'exemple ci-dessus, il est appliqué au 0ème bit quantique. Vous pouvez également spécifier plusieurs numéros de bits.
de_ini, de_fin = create_densop()
Ensuite, créez un état quantique (opérateur de densité) de manière appropriée. Comme vous pouvez le voir dans la définition de la fonction, un total de 9 bits quantiques sont initialisés à $ \ ket {0} $, et seul le 0ème est ouvert par Adamal. Ce n'est pas forcément Adamar, mais c'est approprié ici. Vous pouvez le modifier de manière appropriée en fonction du type d'état d'entrée attendu. De plus, ici, deux états quantiques (opérateurs de densité) exactement identiques, de_ini et de_fin, sont affichés, mais après cela, seul de_fin est traité, et finalement il est comparé à l'état d'origine de_ini. J'essaye d'en sortir un.
de_fin.code()
Ensuite, encodez-le. Si vous regardez la définition de la fonction, ce sera évident. Le circuit quantique juste avant l'entrée du bruit est honnêtement implémenté.
de_fin.noise(kind=kind, qid=qid, prob=prob)
Ensuite, le canal quantique défini par kind est appliqué au nombre quantique défini par qid avec l'intensité de probabilité prob. Le contenu de la définition de la fonction peut sembler déroutant à première vue, mais en réalité, il effectue juste l'opération de_ini.depolarize (0, prob = 1.0). Dans le schéma quantique, cela correspond aux parties en pointillés.
dde_fin.correct()
Ainsi, la correction des erreurs et le décryptage se font ensemble. Comme vous pouvez le voir en regardant la définition de la fonction (encore une fois, c'est juste une implémentation simple).
fid = de_fin.fidelity(de_ini, qid=[0])
print("== result ==")
print("* fidelity = {:.6f}".format(fid))
Maintenant, calculez et affichez la fidélité du 0ème bit quantique pour comparer l'état initial avec l'état corrigé des erreurs.
DensOp.free_all(de_ini, de_fin)
Enfin, libérez la mémoire utilisée. Vous pouvez libérer l'argument spécifié par la méthode de classe free_all à la fois (ajouté dans la v0.0.33).
Cela permet d'effectuer une simulation de correction d'erreur pour le 0ème bit quantique lorsque la dépolarisation est effectuée avec une probabilité de 1 (c'est-à-dire qu'un bruit est ajouté qui déplace complètement la direction).
Le résultat de l'exécution est affiché.
== settings ==
* kind of noise = depolarize
* probability of noise = 1.0
* noisy channels = [0]
== result ==
* fidelity = 1.000000
Donc, en ce qui concerne le bruit de 1 bit quantique, j'ai pu corriger complètement l'erreur.
De plus, la correction d'erreur était possible même pour les canaux quantiques autres que l'élimination de polarisation, et il était normal que n'importe quel bit quantique contienne du bruit. Ce qui suit est un exemple.
== settings ==
* kind of noise = amp_dump
* probability of noise = 1.0
* noisy channels = [5]
== result ==
* fidelity = 1.000000
Cependant, cela ne fonctionnait pas lorsqu'il y avait deux canaux de bruit ou plus. C'est comme suit.
== settings ==
* kind of noise = depolarize
* probability of noise = 1.0
* noisy channels = [0, 2]
== result ==
* fidelity = 0.866025
Que diriez-vous de fixer la probabilité à 0,5?
== settings ==
* kind of noise = depolarize
* probability of noise = 0.5
* noisy channels = [0, 2]
== result ==
* fidelity = 0.968246
C'était également inutile. Comme expliqué ci-dessus, une seule erreur de bit quantique peut être complètement corrigée avec le code court. Je comprends que.
Cette fois, j'ai repris et expliqué le "code de Shor", qui est la méthode la plus simple et la plus accessible parmi les diverses méthodes proposées pour la correction d'erreur quantique. Il est intéressant de noter que j'aurais dû créer un circuit de correction d'erreur qui prend en charge l'inversion de bits et l'inversion de phase, mais pour une raison quelconque, c'était un circuit capable de gérer toutes les erreurs continues. Je pense qu'il est efficace que des opérations continues sur l'état quantique puissent en fait être exprimées en superposant des opérateurs de Pauli discrets.
C'était donc une introduction aux bases de la correction d'erreur quantique. Pour le moment, je prévois de continuer à comprendre les bases tout en appréciant les différents aspects de la correction d'erreur quantique.
c'est tout
Recommended Posts