Simulateur d’ordinateur quantique
Écrivez un petit circuit quantique en JavaScript, simulez-le directement dans votre navigateur et observez son schéma, ses probabilités et son vecteur d’état. Vous pouvez aussi décrire un calcul de façon générale, par exemple une addition, et le voir transformé automatiquement en véritable circuit quantique réversible.
Modèle de bruit
Les véritables ordinateurs quantiques ne calculent pas parfaitement : les qubits sont extrêmement sensibles et perdent une partie de leur information, phénomène appelé décohérence, à chaque interaction indésirable avec leur environnement — chaleur, champs électromagnétiques ou qubits voisins. Les opérations de porte ne sont jamais parfaitement précises et même la lecture finale peut échouer. Le simulateur effectue par défaut un calcul idéal ; vous pouvez activer ici des modèles d’erreur courants et observer directement leurs effets dans les résultats.
Décrivez un calcul avec quantum.add, quantum.subtract, quantum.multiply, quantum.divide ou quantum.random. Ctrl+Entrée lance la simulation. La documentation complète est accessible avec le bouton « Documentation ».
Ce code a été généré automatiquement depuis le programme ci-dessus, puis simulé directement. Vous pouvez le modifier ici et le relancer.
Le circuit généré a été modifié manuellement. Le regroupement des registres est donc masqué dans le schéma ; une nouvelle exécution du programme ci-dessus écrasera ces modifications.
Maximum : 4 000 caractères. Méthodes QuantumCircuit disponibles : x, y, z, h, s, sdg, t, tdg, rx, ry, rz, cnot, cz, ccnot (alias : toffoli), swap, measureAll, run. Ctrl+Entrée lance la simulation.
Schéma du circuit
La vue par étapes affiche les probabilités et le vecteur d’état exactement après la porte sélectionnée. Les résultats des tirs ci-dessous se rapportent toujours au circuit complet.
OpenQASM 2.0
OpenQASM 2.0 est un format d’échange largement utilisé pour les circuits quantiques et lu notamment par Qiskit. Attention à l’ordre des bits : ce simulateur interprète q0 comme le bit de poids fort, à gauche, tandis que Qiskit interprète q[0] comme le bit de poids faible ; les chaînes mesurées y apparaissent donc inversées.
Probabilités
Probabilité de mesurer chaque chaîne de bits possible, calculée exactement à partir du vecteur d’état. Sens de lecture : q0 est le bit de gauche, de poids fort.
Sphères de Bloch
L’état de chaque qubit est représenté par une flèche dans la sphère de Bloch : pôle nord = |0⟩, pôle sud = |1⟩, équateur = superposition de poids égaux. Si la flèche est nettement plus courte que le rayon, le qubit n’a pas d’état pur propre : il est intriqué avec d’autres qubits. Une flèche courte peut aussi provenir du bruit ; avec un modèle actif, le qubit perd en cohérence et la flèche se contracte. Les sphères bruitées sont ici une approximation obtenue en moyennant le vecteur de Bloch sur les trajectoires de bruit. Dans la vue par étapes, les flèches se déplacent porte par porte, uniquement sans bruit.
Résultats des tirs
Nombre d’occurrences de chaque chaîne de bits dans les mesures simulées. Lorsque plusieurs résultats sont possibles, les nombres fluctuent aléatoirement autour des probabilités exactes.
Vecteur d’état
Amplitudes complexes à l’origine des probabilités : le carré du module d’une amplitude (partie réelle² + partie imaginaire²) donne la probabilité de son état.
| État | Partie réelle | Partie imaginaire |
|---|
Principes de base : comment cela fonctionne-t-il ?
Du programme au qubit physique
Un véritable ordinateur quantique ne se résume pas à une puce. Une électronique de contrôle classique traduit le circuit en impulsions précises. Dans l’exemple, des lasers de refroidissement, de repompage, de manipulation du qubit et de lecture façonnent ces signaux sur une table optique et les dirigent vers une chambre à vide protégée. Ils y modifient et mesurent l’état du qubit, puis le résultat revient à l’ordinateur classique.
Qubit et états de base
Un bit classique vaut 0 ou 1. Un qubit peut en plus exister dans une superposition des deux états de base |0⟩ et |1⟩. Avec plusieurs qubits, tous les états de base s’écrivent sous forme de chaîne de bits, par exemple |10⟩ pour 2 qubits ; dans ce simulateur, q0 est toujours le bit de poids fort, à gauche.
Superposition
Un qubit en superposition comporte simultanément des composantes de plusieurs états de base. Ces composantes sont décrites par des amplitudes complexes ; le carré du module d’une amplitude donne la probabilité d’obtenir l’état correspondant lors d’une mesure.
La sphère de Bloch
L’état d’un qubit peut être représenté par une flèche dans une sphère : le pôle nord représente |0⟩, le pôle sud |1⟩et tous les points de l’équateur des superpositions de poids égaux. La phase détermine la direction de la flèche le long de l’équateur. Les portes de rotation rx, ryet rz font tourner la flèche autour de l’axe correspondant ; les portes de phase comme S et T la font tourner autour de l’axe Z. Avec des qubits intriqués, la flèche se contracte vers le centre : le qubit individuel ne possède alors plus d’état pur propre, ce qui rend l’intrication visible.
Mesure et tirs
measureAll() mesure tous les qubits simultanément et termine le circuit. Comme une mesure unique ne donne qu’un résultat aléatoire, le circuit est conceptuellement mesuré autant de fois qu’indiqué par les « tirs » avec run({ shots }), afin que la distribution des probabilités apparaisse sous forme d’histogramme. Les probabilités exactes sont aussi calculées directement depuis le vecteur d’état, indépendamment du hasard des tirs.
Porte de Hadamard
La porte de Hadamard h(q) fait passer un qubit d’un état déterminé,|0⟩ ou |1⟩, à une superposition de poids égaux de |0⟩ et |1⟩ , soit environ 50 % / 50 % lors de la mesure.
Portes de phase S et T
Les portes s(q) et t(q) ne modifient pas les probabilités de mesure d’un qubit isolé ; elles font seulement tourner la phase de l’amplitude |1⟩ , de 90° pour S et de 45° pour T. Leur effet n’apparaît qu’avec une superposition : entre deux portes de Hadamard, la phase détermine comment les amplitudes s’additionnent ou s’annulent par interférence. Les variantes adjointes sdg(q) et tdg(q) tournent en sens inverse et annulent S et T. Deux T équivalent à une S, et deux S à une Z.
CNOT et intrication conditionnelle
La porte CNOT cnot(control, target) inverse le qubit cible exactement lorsque le qubit de contrôle est dans l’état |1⟩. Si le contrôle se trouve auparavant en superposition, cela peut créer une intrication : les deux qubits ne peuvent alors plus être décrits indépendamment, comme dans l’état de Bell. Si le contrôle est au contraire dans un état de base déterminé, CNOT réalise seulement une inversion conditionnelle sans intrication. Toute porte CNOT ne crée donc pas automatiquement une intrication.
CZ, parente symétrique de CNOT
La porte CZ cz(a, b) inverse le signe de l’amplitude uniquement lorsque les deux qubits sont dans l’état |1⟩. Contrairement à CNOT, elle ne distingue ni contrôle ni cible et agit de la même façon sur les deux qubits ; elle est donc représentée par deux points reliés. CZ et CNOT peuvent être converties l’une dans l’autre : une CNOT est une CZ dont le qubit cible traverse une porte de Hadamard avant et après. CZ est un élément central de nombreux algorithmes, notamment la recherche de Grover.
État GHZ : l’intrication à trois
L’état GHZ, nommé d’après Greenberger, Horne et Zeilinger, étend le principe de l’état de Bell à trois qubits : une porte de Hadamard suivie de deux CNOT intrique les trois qubits, de sorte que la mesure ne donne que |000⟩ ou |111⟩ , jamais une chaîne mixte. Aucun qubit ne possède plus son propre état ; l’information réside exclusivement dans la corrélation commune.
Algorithme de Deutsch : le plus petit avantage quantique
L’algorithme de Deutsch répond, avec une seule évaluation d’un oracle inconnu, à une question qui en demanderait deux à un ordinateur classique : la fonction est-elle constante ou équilibrée ? L’astuce consiste à envoyer l’entrée dans l’oracle en superposition ; grâce aux interférences, la réponse est ensuite encodée sans ambiguïté dans le qubit d’entrée. Ce principe, le retour de phase, est au cœur de presque tous les algorithmes quantiques.
Recherche de Grover : amplifier les amplitudes
La recherche de Grover trouve une entrée marquée dans un ensemble non trié avec beaucoup moins de requêtes qu’une méthode classique. Un oracle marque l’état recherché par une inversion de phase, ici avec une porte CZ, puis l’opérateur de diffusion amplifie cette amplitude au détriment des autres. Avec 2 qubits, une seule itération suffit pour mesurer la bonne réponse avec une probabilité de 100 %.
Addition réversible : de quantum.add() au circuit
L’éditeur de programme traduit quantum.add({ a, b }) en un circuit de portes X, CNOT et CCNOT (Toffoli) qui reproduit l’addition classique de façon entièrement réversible : chaque porte peut être annulée exactement, car aucune information n’est supprimée. Une CCNOT,ccnot(c1, c2, target), inverse la cible uniquement lorsque les deux contrôles valent |1⟩ . Ce composant suffit à reconstruire tout circuit classique de manière réversible, y compris un additionneur complet avec retenue. Les entrées A et B sont d’abord initialisées dans des états de base déterminés avec des portes X. Comme tout le circuit ne traverse ainsi que des états déterminés, la mesure finale produit un seul résultat avec une probabilité de 100 % : la somme classique correcte. Voilà pourquoi quantum.add() donne un résultat déterministe malgré la simulation quantique.
Soustraction : l’addition à l’envers
Chaque porte d’un circuit quantique étant exactement inversible, le circuit additionneur complet peut être exécuté à l’envers : l’addition devient alors une soustraction. quantum.subtract({ a, b }) utilise précisément les portes de l’additionneur dans l’ordre inverse et calcule ainsi a − b. Ce n’est pas un artifice, mais le principe fondamental du calcul réversible : aucune étape ne détruit d’information et chacune peut être annulée. Cette version exige a ≥ b afin d’éviter un résultat négatif.
Multiplication : quantum.multiply()
La multiplication utilise les mêmes composants réversibles que l’addition. Selon la méthode posée, le facteur a est ajouté plusieurs fois à des positions décalées correspondant aux bits à 1 du facteur b. Chaque addition partielle est le même additionneur réversible à propagation de retenue, laquelle passe chaque fois au bit suivant du produit. Comme le registre de résultat grandit avec le produit, les facteurs sont limités ici à 3 bits, de 0 à 7 ; ainsi seulement, facteur, produit et qubit de retenue tiennent ensemble dans les 10 qubits du simulateur.
Division : quantum.divide()
La division n’utilise elle aussi que des composants réversibles : quantum.divide({ a, b }) réalise une division posée à partir de soustractions réversibles et décalées du diviseur dans le registre du reste ; le résultat contient le quotient et le reste (a = quotient · b + remainder). Le dividende, le diviseur, le quotient et un qubit d’emprunt devant tenir dans 10 qubits, la division est l’opération la plus contrainte : bits(a) + bits(b) + bits(a÷b) + 1 ≤ 10 , avec un diviseur b ≥ 1. Si les données dépassent cette capacité, l’éditeur le signale au lieu de calculer.
Véritable hasard : quantum.random()
Les ordinateurs classiques ne peuvent pas produire de véritable hasard : leurs « nombres aléatoires » proviennent d’algorithmes déterministes, donc pseudo-aléatoires. Un ordinateur quantique le peut : quantum.random({ bits }) place chaque bit dans une superposition 50/50 au moyen d’une porte de Hadamard, et seule la mesure décide, de façon fondamentalement imprévisible, de la valeur obtenue. Sur un matériel quantique réel, le hasard est physique ; ce simulateur l’imite avec le générateur pseudo-aléatoire de votre navigateur.
Simulateur et matériel quantique réel
Ce simulateur calcule exactement l’état au moyen de nombres à virgule flottante classiques dans votre navigateur. Cela n’est possible que parce qu’il se limite à de très petits circuits de 10 qubits au maximum. Les véritables ordinateurs quantiques utilisent des qubits physiques, sont sujets aux erreurs, à la décohérence et au bruit, et ne montrent leur avantage qu’avec des circuits beaucoup plus grands qu’il devient impraticable de simuler classiquement. Cet outil est pédagogique, ce n’est pas un véritable processeur quantique.