Commencez à utiliser Qiskit en classe
Pour ce module Qiskit en classe, les étudiants doivent disposer d'un environnement Python fonctionnel avec les paquets suivants installés :
qiskitv2.1.0 ou plus récentqiskit-ibm-runtimev0.40.1 ou plus récentqiskit-aerv0.17.0 ou plus récentqiskit.visualizationnumpypylatexenc
Pour configurer et installer les paquets ci-dessus, voir le guide d' installation de Qiskit. Afin d'exécuter des tâches sur de véritables ordinateurs quantiques, les étudiants devront créer un compte sur IBM Quantum® en suivant les étapes du guide Configurer votre compte IBM Cloud®.
Ce module a été testé et a utilisé 2 secondes de temps QPU sur un processeur Heron v2. Il s'agit uniquement d'une estimation. L'utilisation réelle peut varier.
# Uncomment and modify this line as needed to install dependencies
#!pip install 'qiskit>=2.1.0' 'qiskit-ibm-runtime>=0.40.1' 'qiskit-aer>=0.17.0' 'numpy' 'pylatexenc'Présentation
Dans les modules Qiskit en classe, vous aurez l'occasion d'utiliser un ordinateur quantique pour explorer divers concepts de l'informatique quantique et des domaines connexes tels que la mécanique quantique, l'informatique, la chimie, etc. Ce module sert de prérequis aux autres - il présente les principes fondamentaux de l'informatique quantique et explique comment utiliser Qiskit pour exécuter des circuits quantiques.
Nous vous donnerons d'abord un bref aperçu du fonctionnement d'un ordinateur classique, puis nous vous montrerons comment ces concepts sont adaptés au paradigme de l'informatique quantique. Enfin, nous vous montrerons comment assembler ces concepts pour construire et exécuter votre premier circuit quantique.
Ordinateurs classiques
Vous connaissez sans doute les principes de base du fonctionnement des ordinateurs classiques, mais nous allons ici mettre en évidence quelques-unes de leurs principales caractéristiques, afin de pouvoir ensuite les comparer aux ordinateurs quantiques.
Les unités de base de l'information : les bits
Les ordinateurs classiques traitent des informations classiques, et l'unité fondamentale de l'information classique est le bit. Un seul bit peut stocker la réponse à une question "oui/non". Les deux états binaires d'un bit sont généralement représentés par "0" et "1".
Révision des nombres binaires
La combinaison de bits permet de stocker davantage d'informations. Par exemple, si vous voulez stocker un nombre de 0 à 15, vous pouvez le faire avec quatre bits de la manière suivante :
| 0 = 0000 | 4 = 0100 | 8 = 1000 | 12 = 1100 |
| 1 = 0001 | 5 = 0101 | 9 = 1001 | 13 = 1101 |
| 2 = 0010 | 6 = 0110 | 10 = 1010 | 14 = 1110 |
| 3 = 0011 | 7 = 0111 | 11 = 1011 | 15 = 1111 |
En général, pour convertir un nombre binaire de bits en un nombre familier, base-10, vous multipliez le bit le moins significatif (le plus à droite) par , le bit suivant à gauche par , puis le suivant par , et ainsi de suite, jusqu'à ce que vous atteigniez le bit le plus significatif (le plus à gauche), que vous multipliez par .
Cela signifie que bits peuvent se trouver dans l'un des états possibles.
Vérifiez votre compréhension
De combien de bits auriez-vous besoin pour représenter le nombre 86? Écrivez la chaîne de bits qui code ce nombre en binaire.
Rappelez-vous que bits vous permet de représenter les nombres à , de sorte que l'utilisation de six bits nous amènerait à . Ce n'est pas tout à fait suffisant. Nous ajoutons un bit supplémentaire pour atteindre . Décomposons maintenant 86 en puissances de 2 :
Opérations fondamentales : portes logiques
Or, un ordinateur doit être capable de faire quelque chose avec les bits pour pouvoir, eh bien, calculer. Les portes binaires sont les opérations qui constituent les éléments fondamentaux de tous les algorithmes et codes les plus compliqués.
Porte à un seul bit :
N'EST PAS
Lorsque vous n'avez qu'un seul bit, il n'y a qu'une seule façon de transformer son état : inverser l'état de 0 à 1 ou de 1 à 0. C'est ce que nous appelons la porte "NOT". L'effet de cette porte - et des autres portes dont nous parlerons plus loin - peut être représenté par une "table de vérité", avec des colonnes pour les états d'entrée et de sortie des qubits. La table de vérité pour la porte NOT est la suivante
Entrée | Sortie |
|---|---|
| 0 | 1 |
| 1 | 0 |
Portes à plusieurs bits :
ET
AND est une porte à deux bits qui prend deux bits en entrée et produit un seul bit en sortie. Il émet 1 si les deux bits d'entrée sont à 1, et 0 dans le cas contraire :
Entrée | Sortie |
|---|---|
| 00 | 0 |
| 01 | 0 |
| 10 | 0 |
| 11 | 1 |
OU
Le OU est une autre porte à deux bits avec un seul bit de sortie. Il émet 1 si l 'un des bits est à 1 :
Entrée | Sortie |
|---|---|
| 00 | 0 |
| 01 | 1 |
| 10 | 1 |
| 11 | 1 |
OU X
XOR signifie "OU exclusif" et ressemble à la porte OU, mais il produit 1 si un seul des bits d'entrée est à 1. Il produit 0 s'ils sont tous les deux 1 ou tous les deux 0 :
Entrée | Sortie |
|---|---|
| 00 | 0 |
| 01 | 1 |
| 10 | 1 |
| 11 | 0 |
Mesures :
En général, lorsque l'on apprend l'informatique classique, on n'accorde pas beaucoup d'attention au processus de lecture de l'état des bits. En effet, il n'est pas très complexe d'un point de vue conceptuel. Vous pouvez mesurer les bits à tout moment avant, pendant ou après un calcul, et cela n'affecte pas le résultat. Ce n'est pas le cas de l'informatique quantique, comme nous le verrons plus loin.
Circuits :
En combinant les portes ci-dessus, vous pouvez effectuer toutes les opérations que vous souhaitez sur un ordinateur. Prenons un exemple simple : En utilisant les portes AND et XOR, vous pouvez construire le circuit demi-ordre, qui calcule la somme de deux bits. Ceci est représenté dans un schéma de circuit logique, où les fils représentent les bits et les portes opérant sur les bits sont représentées par des symboles sur les fils correspondants :
Les deux bits sont donc copiés et passent à la fois par une porte ET et une porte XOR. Le résultat de la porte XOR est le "bit de somme" (S), qui reste à la place des uns du nombre binaire, et le résultat de la porte AND est le "bit de report" (C), qui est la valeur du chiffre le plus significatif suivant dans le nombre binaire. Voici la table de vérité :
Somme ( ) | Portage ( ) | ||
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
Vérifiez votre compréhension
Vérifiez que la table de vérité ci-dessus donne la solution correcte pour un circuit additionneur. Autrement dit, pour chacune des quatre options de A et B, vérifiez que .
Ordinateurs quantiques
Bits qubits
Tout comme les bits sont les unités fondamentales de l'information classique, les bits quantiques, ou "qubits", sont les unités fondamentales de l'information quantique. Comme le bit classique, l'état d'un qubit peut être soit 0, soit 1, ce que nous désignons généralement par et . Mais contrairement au bit classique, un bit quantique peut également se trouver dans une superposition de l'état et de l'état en même temps. En général, un qubit peut être dans n'importe quel état de la forme :
où et sont des amplitudes complexes avec .
La phase quantique
Comme et sont complexes, ils peuvent tous deux être écrits sous la forme , où est appelé la phase. Si l'on multiplie l'ensemble de l'état par le même facteur de phase global, rien ne change physiquement - c'est ce que l'on appelle une phase globale, qui n'a aucune conséquence observable.
C'est pourquoi il est conventionnel de "factoriser" , en donnant :
où est la phase relative de l'état quantique, qui a des conséquences observables.
Cette phase joue un rôle très important dans l'informatique quantique, et vous explorerez ses différentes conséquences dans les modules suivants de Qiskit in the Classroom.
Qubits multiples
Alors que l'état de plusieurs bits peut simplement être exprimé comme une chaîne de 0s et 1s, l'état de plusieurs qubits est un peu plus compliqué en raison des principes de superposition et d' enchevêtrement.
Rappelons que bits peuvent se trouver dans l'un des états possibles, allant des nombres binaires 000...000 à 111...111. Mais aujourd'hui, grâce au principe de superposition, les qubits du site peuvent se trouver dans une superposition de tous ces états à la fois!
Cela peut s'exprimer comme suit
où, comme dans le cas classique, l'état correspond à l'état dans lequel chaque qubit se trouve dans la bonne combinaison de 0s et 1s pour donner le nombre binaire . C'est ce qu'on appelle les "états de base de calcul" du système quantique. Par exemple, un état à trois qubits peut être écrit comme une superposition de ses huit états de base de calcul :
Chaque qubit du système est désigné par un index allant de à . La convention consiste à lire les états des qubits de droite à gauche, de sorte que l'état du qubit est l'état le plus à droite et l'état du qubit est le plus à gauche. C'est ce que l'on appelle la notation "little-endian", qui peut sembler contre-intuitive à première vue, puisque nous avons l'habitude de lire de gauche à droite.
Vérifiez votre compréhension
À première vue, il peut sembler contre-intuitif d'ordonner les qubits de droite à gauche comme dans la notation little-endian, mais c'est en fait une chose très logique à faire! Expliquez pourquoi. (Rappelons notre discussion ci-dessus sur la conversion des nombres binaires en nombres base-10.)
Si l'on ordonne les qubits de droite à gauche, de sorte que le qubit 0 soit le plus à droite et le qubit N-1 le plus à gauche, il est logique d'associer le qubit au bit de poids faible, qui est multiplié par et le qubit au bit de poids fort, qui est multiplié par .
Enchevêtrement
Comme nous l'avons mentionné précédemment, une autre caractéristique clé des qubits est qu'ils peuvent être enchevêtrés les uns avec les autres. Prenons l'exemple d'un état à deux qubits, où et :
Ainsi, l'état du qubit 0 peut être ou avec la même probabilité, et il en va de même pour l'état du qubit 1. Mais ces probabilités ne sont plus indépendantes les unes des autres. Si nous constatons que l'état du qubit 0 est , nous savons que le qubit 1 sera également . Cela est vrai quelle que soit la distance qui sépare les deux qubits, c'est pourquoi la mesure d'un état intriqué est parfois qualifiée d'"action magique à distance"
L'enchevêtrement peut également prendre d'autres formes. Par exemple, l'État
produit des résultats opposés à chaque fois : si un qubit est mesuré à l'adresse , l'autre est garanti d'être trouvé dans l'état .
Vérifiez votre compréhension
L'état est-il enchevêtré? Pourquoi ?
Il n'est pas enchevêtré. Si les résultats sont toujours les mêmes lorsque vous mesurez les deux qubits, c'est uniquement parce que chaque qubit est toujours fixé dans l'état . Le résultat de la mesure d'un qubit ne dépend pas réellement de l'autre - les deux sont simplement toujours .
En général, si vous pouvez décrire l'état de chaque qubit séparément et les multiplier ensemble comme ceci :
On parle alors d'« état produit » et il n'est pas intriqué.
Notation vectorielle
Il est souvent utile d'utiliser des vecteurs et des matrices pour voir comment l'état quantique se transforme sous l'effet de différentes opérations. Dans cette représentation, nos états quantiques seront des vecteurs, et nos portes quantiques (discutées dans la section suivante) seront des matrices qui transforment les vecteurs.
Pour un qubit unique, la forme vectorielle des états est choisie comme suit : De cette manière, un état arbitraire peut être écrit comme suit
Pour un état qubitaire général, , nous aurons besoin d'un vecteur à dimensions, avec des états de base ordonnés, comme on peut s'y attendre, en valeurs binaires croissantes :
En gardant à l'esprit ce choix de notation vectorielle, nous pouvons présenter les portes quantiques dont nous avons besoin, leurs effets sur les états quantiques et leurs formes matricielles.
Vérifiez votre compréhension
Il existe quatre états de base de calcul pour un système à deux qubits. Écrivez chacun d'entre eux dans les notations ket et vectorielles.
Portes portes quantiques
Tout comme les portes classiques telles que NOT, AND, OR et XOR peuvent être combinées pour construire des circuits classiques arbitraires, les portes quantiques jouent le même rôle dans l'informatique quantique. Les qubits ayant des caractéristiques mécaniques quantiques supplémentaires, les portes quantiques sont d'autant plus riches. Bien que nous puissions encore décrire leur action sur la base des états et à l'aide d'une table de vérité, cela ne rend pas compte de l'ensemble de la situation. Pour les portes quantiques, il est souvent plus naturel d'utiliser une représentation matricielle, car elles agissent également sur des superpositions d'états de base.
Nous présentons ci-dessous les portes quantiques les plus courantes et la manière dont elles transforment les qubits avec lesquels elles interagissent. Le cas échéant, nous les relierons à des portes classiques familières.
Portes à un seul qubit
porte : C'est l'équivalent quantique d'une opération NOT. Sa table de vérité ressemble exactement à la porte NOT classique :
Entrée | Sortie |
|---|---|
Et la représentation matricielle :
Dans Qiskit, la création d'un circuit avec une porte ressemble à ceci :
from qiskit import QuantumCircuit
qc = QuantumCircuit(1)
qc.x(0)
qc.draw("mpl")Output:
Dans ce schéma très simple, le qubit est représenté par un fil, la ligne horizontale noire, et la porte est représentée par une boîte sur ce fil.
Porte de Hadamard : Crée un état de superposition. Table de vérité :
Entrée | Sortie |
|---|---|
Représentation matricielle :
Un circuit avec une porte de Hadamard est réalisé comme suit :
from qiskit import QuantumCircuit
qc = QuantumCircuit(1)
qc.h(0)
qc.draw("mpl")Output:
porte : Ajoute un déphasage de à l'état :
Entrée | Sortie |
|---|---|
Dans Qiskit, la création d'un circuit avec une porte ressemble à ceci :
qc = QuantumCircuit(1)
qc.z(0)
qc.draw("mpl")Output:
porte : Ajoute un déphasage de à l'état :
Entrée | Sortie |
|---|---|
Dans Qiskit, la création d'un circuit avec une porte ressemble à ceci :
qc = QuantumCircuit(1)
qc.t(0)
qc.draw("mpl")Output:
Portes multi-qubits
Les portes à deux qubits peuvent ressembler à des portes classiques à deux bits, mais avec une réserve importante : toutes les portes quantiques doivent être réversibles. En termes d'algèbre linéaire, cela signifie qu'ils sont représentés par des matrices unitaires. Ainsi, deux qubits d'entrée correspondent toujours à deux qubits de sortie, et l'opération peut, en principe, être annulée. Cela contraste avec les portes classiques que nous avons vues plus haut, telles que AND ou OR, qui perdent de l'information et sont irréversibles - étant donné une sortie, vous ne pouvez pas déterminer l'entrée de manière unique.
Porte CNOT (Controlled-NOT) : Les deux qubits d'entrée sont appelés qubits de contrôle et qubits cibles. Le qubit de contrôle reste inchangé, mais son état détermine ce qui arrive au qubit cible. Si le qubit de contrôle est dans l'état , une porte est appliquée à cette cible; si l'état du qubit de contrôle est , aucun changement n'est effectué. Dans la notation ci-dessous, on suppose que le qubit (qubit le plus à droite) est le contrôle et que le qubit (qubit le plus à gauche) est la cible. Ci-dessous, la notation utilisée est la suivante
Entrée | Sortie |
|---|---|
La matrice représentant cette action est donc la suivante :
qc = QuantumCircuit(2)
qc.cx(0, 1)
qc.draw("mpl")Output:
C'est le premier schéma de circuit que nous voyons avec deux qubits, qui sont représentés par les deux fils. La porte CNOT est mise en œuvre entre les deux qubits, avec comme contrôle et comme cible.
Vérifiez votre compréhension
La plupart des portes ont la même forme matricielle à Qiskit que partout ailleurs. Mais la porte CNOT agit sur deux qubits, et les conventions d'ordonnancement des qubits deviennent alors un problème. Les textes qui ordonnent les qubits présenteront une forme matricielle différente pour leurs portes CNOT. Vérifier par multiplication matricielle explicite que la matrice CNOT ci-dessus a l'action correcte sur l'état
Porte SWAP : Cette porte permute les états de deux qubits. Table de vérité :
Entrée | Sortie |
|---|---|
La matrice représentant cette action est donc la suivante :
qc = QuantumCircuit(2)
qc.swap(0, 1)
qc.draw("mpl")Output:
La porte SWAP peut en fait être construite à partir de trois CNOT. Pour voir comment, nous pouvons decompose() la porte avec Qiskit :
qc = QuantumCircuit(2)
qc.swap(0, 1)
qc.decompose().draw("mpl")Output:
Nous voyons ici pour la première fois comment plusieurs portes sont représentées dans un schéma de circuit. Nous le lisons de gauche à droite, de sorte que la porte la plus à gauche est appliquée en premier.
Vérifiez votre compréhension
Vérifier que la combinaison des CNOT ci-dessus aboutit à une porte SWAP. Vous pouvez le faire avec la multiplication matricielle ou toute autre méthode.
Avec la multiplication matricielle :
Utiliser une table de vérité pour voir comment les états changent avec chaque CNOT. Dans la dernière colonne, les états doivent être équivalents à la colonne "sortie" de la table de vérité SWAP :
EntréeCNOT(A,B)CNOT(B,A)CNOT(A,B)
Porte de Toffoli (ou "contrôlé-contrôlé-NOT" (CCNOT)) : Il s'agit d'une porte à trois qubits. Le nom "contrôlé-contrôlé-NOT" peut déjà vous indiquer comment il fonctionne : il y a deux qubits de contrôle et un qubit cible, et l'état du qubit cible n'est inversé que si les deux qubits de contrôle sont dans l'état . Nous conservons la convention d'ordre que nous avons utilisée avec le CNOT :
La table de vérité est donc la suivante :
Entrée | Sortie |
|---|---|
Et la matrice représentant cette action est :
qc = QuantumCircuit(3)
qc.ccx(0, 1, 2)
qc.draw("mpl")Output:
La porte de Toffoli peut elle aussi être décomposée en CNOT, de même que d'autres portes. Cependant, elle est beaucoup plus compliquée que la décomposition de la porte SWAP, c'est pourquoi l'exploration et la vérification de cette décomposition feront l'objet d'un exercice facultatif à la fin du module.
Mesures
Les mesures jouent un rôle particulier dans l'informatique quantique, qui n'a pas d'analogue dans l'informatique classique. Alors qu'en informatique classique, vous pouvez vérifier vos bits à n'importe quel moment de votre choix au cours d'un algorithme, en informatique quantique, vous devez être très sélectif quant au moment où vous regardez vos qubits, car la mesure effondre leur état et détruit la superposition qui confère aux qubits leur complexité de calcul.
En particulier, étant donné un état quantique -bit , une mesure réduira l'état à l'une des fonctions de base avec une probabilité égale à .
Mais cet effet destructeur d'une mesure n'est pas toujours un obstacle. Il s'agit en fait d'une ressource clé dans certains algorithmes et protocoles, tels que la téléportation quantique et la distribution quantique de clés.
Dans Qiskit, lorsqu'une mesure est effectuée, elle est envoyée à un registre classique où elle est stockée sous la forme d'un bit classique. La création d'un circuit avec une mesure se présente comme suit :
qc = QuantumCircuit(
1, 1
) # the second number is the number of classical bits in the circuit
qc.measure(0, 0)
qc.draw("mpl")Output:
Circuits
Maintenant que nous savons comment fonctionnent les qubits, les portes et les mesures, fabriquons et exécutons notre propre circuit quantique! Pour ce faire, nous allons vous présenter un flux de travail utile appelé Qiskit patterns.
Cadre de modèles Qiskit
Le cadre des modèles Qiskit est une procédure générale permettant d'aborder et de résoudre des problèmes avec un ordinateur quantique. Il se compose de quatre étapes :
- Cartographier notre problème à l'aide de circuits et d'opérateurs quantiques
- Optimisation du circuit pour le matériel cible
- Exécution sur le matériel cible
- Post-traitement des résultats
Pour illustrer ces étapes, nous allons mettre en œuvre une version quantique du circuit demi-additionnel présenté ci-dessus.
1. Cartographie
Le circuit additionneur classique utilise une porte XOR et une porte AND pour calculer les bits de somme et de retenue, respectivement. Nous pouvons adapter ces portes au contexte quantique pour réaliser le demi-additionneur quantique. Tout d'abord, si l'on se souvient que les portes quantiques sont réversibles, on ne peut pas simplement écraser les entrées. Au lieu de cela, nous introduisons deux qubits auxiliaires initialisés à pour stocker les résultats de la somme et de la retenue. Ainsi, notre état quantique complet sera constitué des qubits et , ainsi que des qubits de somme et de report, que nous appellerons et :
Il nous faut maintenant des portes quantiques qui accomplissent ce que les portes XOR et AND faisaient dans le circuit classique.
Somme :
Pour le XOR, nous appliquons deux CNOT, chacun avec les qubits de contrôle et et le qubit cible pour les deux. Si et sont différents, l'une des portes CNOT fera basculer dans l'état . Si et sont tous deux , rien n'arrive à et il reste dans l'état . Si et sont tous deux , l'état de sera inversé deux fois, ce qui le ramènera à l'état .
Porter :
Pour le bit de report, nous avons besoin de quelque chose qui fonctionne comme une porte ET classique.
Vérifiez votre compréhension
Reprenez les portes que nous avons étudiées et essayez de deviner quelle porte quantique nous utiliserons à la place de la porte ET classique :
C'est la porte Toffoli! Rappelons que la porte de Toffoli, ou porte contrôlé-contrôlé-NOT, inverse l'état de la cible si et seulement si le qubit de contrôle 0 ET le qubit de contrôle 1 sont tous les deux . Ainsi, si le qubit cible commence dans l'état , il a la même action que la porte ET.
Nous disposons maintenant de tous les ingrédients nécessaires à la réalisation du circuit quantique :
# qubits: a, b, sum, carry
qc = QuantumCircuit(4)
# Choose values for A and B:
a = 0
b = 0
# Prepare A and B qubits according to selected values:
if a:
qc.x(0)
if b:
qc.x(1)
# XOR (sum) into qubit 2
qc.cx(0, 2)
qc.cx(1, 2)
# AND (carry) into qubit 3
qc.ccx(0, 1, 3) # a AND b
# measure
qc.measure_all()
qc.draw("mpl")Output:
Ci-dessus figure le schéma du circuit demi-additionneur quantique. Comme indiqué précédemment, les fils représentent les qubits à ordonnés de haut en bas, et le registre de bits classique est le fil à double ligne du bas. Ensuite, en lisant de gauche à droite, nous voyons comment les portes sont appliquées à chaque qubit en observant où les cases apparaissent sur les fils correspondants. Enfin, les mesures sont indiquées à la fin. Les mesures réduisent les états des qubits à des valeurs définies ou , et les résultats sont envoyés à un registre classique.
Une subtilité : bien que le schéma soit dessiné de gauche à droite, l'expression matricielle correspondante doit être lue de droite à gauche. En effet, dans la multiplication matricielle, l'opérateur le plus proche du vecteur d'état agit en premier. Ainsi, par exemple, le circuit ci-dessus (sans tenir compte des mesures) s'écrirait comme suit :
2. Optimisation :
Ensuite, nous devons optimiser le circuit pour qu'il fonctionne sur le matériel quantique. Cette optimisation est réalisée par le transpileur, qui traduit le circuit abstrait présenté ci-dessus en instructions compréhensibles par l'ordinateur quantique. Il assigne les qubits logiques ci-dessus à des qubits physiques réels sur le processeur et réécrit les portes en fonction de son propre ensemble de portes optimisées pour fonctionner sur l'ordinateur quantique. Enfin, le transpileur met également en œuvre ce que l'on appelle la "suppression et l'atténuation des erreurs" pour tenter de minimiser l'effet des erreurs sur le résultat. Cela n'est pas très important pour notre circuit très simple, mais si vous poursuivez votre voyage dans l'informatique quantique en exécutant des circuits plus compliqués, vous verrez rapidement la valeur de la suppression et de l'atténuation des erreurs. Pour en savoir plus, consultez le cours d'Olivia Lane, Quantum Computing in Practice (L'informatique quantique en pratique).
Tout d'abord, nous chargeons les paquets nécessaires pour communiquer avec les ordinateurs quantiques IBM® et nous sélectionnons un backend pour l'exécuter. Nous pouvons soit choisir le backend le moins occupé, soit sélectionner un backend spécifique dont nous connaissons les propriétés.
Le code ci-dessous vous permet de sauvegarder vos données d'identification lors de la première utilisation. Veillez à supprimer ces informations du bloc-notes après l'avoir enregistré dans votre environnement, afin que vos informations d'identification ne soient pas accidentellement partagées lorsque vous partagez le bloc-notes. Voir Configurer votre compte IBM Cloud et Initialiser le service dans un environnement non fiable pour plus d'informations.
# Load IBM Quantum Compute Service
from qiskit_ibm_runtime import QiskitRuntimeService
# Load IBM Quantum Compute Service
# Syntax for first saving your token. Delete these lines after saving your credentials.
# QiskitRuntimeService.save_account(channel='ibm_quantum_platform',
# instance = '<YOUR_IBM_INSTANCE_CRN>', token='<YOUR-API_KEY>', overwrite=True, set_as_default=True)
# service = QiskitRuntimeService(channel='ibm_quantum_platform')
# Load saved credentials
service = QiskitRuntimeService()
# Use the least busy backend, or uncomment the loading of a specific backend like "ibm_brisbane".
backend = service.least_busy(operational=True, simulator=False, min_num_qubits=127)
# backend = service.backend("ibm_brisbane")
print(backend.name)Output:
ibm_fez
Nous utilisons maintenant le transpileur pour optimiser le circuit. Nous pouvons choisir le niveau d'optimisation de 0 (aucune optimisation) à 3 (optimisation maximale). Pour savoir ce qu'implique chaque niveau, consultez le guide des niveaux d'optimisation de Set transpiler. Le circuit qui en résultera sera sensiblement différent du circuit logique que nous avons créé lors de notre étape de mise en correspondance.
# Transpile the circuit and optimize for running on the quantum computer selected
# Step 2: Transpile
from qiskit.transpiler.preset_passmanagers import generate_preset_pass_manager
target = backend.target
pm = generate_preset_pass_manager(target=target, optimization_level=3)
qc_isa = pm.run(qc)
qc_isa.draw("mpl")Output:
Un « échantillonneur » est une primitive conçue pour échantillonner les états possibles résultant d'un circuit quantique et pour recueillir des statistiques sur les états susceptibles d'être mesurés et sur leur probabilité respective. Nous importons ici l'échantillon « IBM Quantum » :
# Load the IBM Quantum primitive and session
from qiskit_ibm_runtime import SamplerV2 as Sampler
sampler = Sampler(mode=backend)Si vous avez épuisé le temps qui vous était imparti sur des ordinateurs quantiques réels ou si vous n'avez pas de connexion internet, vous pouvez préférer utiliser un simulateur. Pour ce faire, exécutez la cellule ci-dessous et décompressez la ligne associée dans l'étape "Exécuter".
# Load the backend sampler
from qiskit.primitives import BackendSamplerV2
# Load the Aer simulator and generate a noise model based on the currently-selected backend.
from qiskit_aer import AerSimulator
from qiskit_aer.noise import NoiseModel
noise_model = NoiseModel.from_backend(backend)
# Define a simulator using Aer, and use it in Sampler.
backend_sim = AerSimulator(noise_model=noise_model)
sampler_sim = BackendSamplerV2(backend=backend_sim)
# Alternatively, load a fake backend with generic properties and define a simulator.
# backend_gen = GenericBackendV2(num_qubits=18)
# sampler_gen = BackendSamplerV2(backend=backend_gen)3. Exécution
Après avoir préparé le circuit, nous pouvons maintenant le faire fonctionner sur l'ordinateur quantique!
job = sampler.run([qc_isa], shots=100)
# job = sampler_sim.run([qc_isa]) # uncomment if you want to run on a simulator
res = job.result()
counts = res[0].data.meas.get_counts()4. Post-traitement
Nous sommes maintenant prêts à consulter nos résultats! Nous afficherons un histogramme des 100 échantillons du circuit.
from qiskit.visualization import plot_histogram
print("counts = ", counts)
plot_histogram(counts)Output:
counts = {'0000': 90, '0100': 4, '1100': 3, '0010': 3}
L'histogramme ci-dessus montre les résultats des mesures des quatre qubits à la fin du circuit. Un ordinateur quantique idéal sans bruit aurait mesuré les qubits pour qu'ils aient les mêmes valeurs à chaque fois, mais en réalité, le bruit provoquera des erreurs lors de certains passages.
Vérifiez votre compréhension
En utilisant la chaîne de bits ayant le plus grand nombre de comptes comme valeurs pour , , , et , vérifiez que le circuit de l'additionneur quantique a fonctionné.
Nous devons vérifier que . Rappelez-vous que l'ordre de la chaîne de bits suit la notation little-endian, et qu'elle est donc lue
CSBA.L'histogramme ci-dessus montre que la chaîne de bits
0000est dominante.
Revenez en arrière et changez les valeurs de et en et et suivez à nouveau les étapes des modèles Qiskit pour réexécuter le circuit. Vérifiez que le circuit de l'additionneur fonctionne à nouveau.
Vous devriez obtenir un histogramme dont la chaîne de bits dominante est
1011:
L'une des caractéristiques supplémentaires du demi-additionneur quantique par rapport au demi-additionneur classique est qu'il peut fonctionner avec des entrées quantiques. En d'autres termes, il peut "ajouter" les qubits et même s'ils sont dans des états de superposition. Dans la section Questions du défi ci-dessous, il vous sera demandé de préparer les qubits dans des superpositions et de voir ce qui se passe!
Conclusion
Ce module a été conçu pour vous donner une solide compréhension des principes de base de l'informatique quantique en la comparant à l'informatique classique. Nous avons étudié le circuit classique à demi-addition et nous avons montré comment adapter le circuit pour qu'il fonctionne avec des qubits sur un ordinateur quantique. Vous êtes maintenant prêt à explorer les autres modules de Qiskit dans la salle de classe!
Concepts essentiels :
- Contrairement aux bits classiques qui ne peuvent prendre que les valeurs 0 et 1, les qubits peuvent également se trouver dans des états de superposition de 0 et de 1.
- Plusieurs qubits peuvent être en superposition sur les chaînes de bits classiquement autorisées, appelées états de base de calcul.
- Plusieurs qubits peuvent être intriqués de sorte que l'état de l'un dépende de l'état de l'autre.
- La convention Qiskit consiste à utiliser la notation little-endian, qui place le qubit le moins significatif, , dans la position la plus à droite et le qubit le plus significatif, , dans la position la plus à gauche.
- Les portes quantiques sont des opérations réversibles représentées par des matrices unitaires qui agissent sur les vecteurs d'état quantique. Dans cette notation, la matrice la plus proche du vecteur (qui est la plus à droite) agit en premier.
- Les mesures effondrent un état de superposition quantique dans l'un de ses états autorisés classiquement, avec une probabilité égale au carré de l'amplitude de l'état de base de calcul correspondant dans la superposition.
- Les circuits quantiques sont souvent représentés à l'aide de schémas de circuits quantiques, où les qubits sont représentés par des fils horizontaux et les portes quantiques apparaissent le long de ces fils, de gauche à droite.
- Pour exécuter un circuit quantique, nous utilisons les quatre étapes du flux de travail des modèles Qiskit : Map, Optimize, Execute, Post-process.
Questions
Questions vrai/faux
-
Dans un ordinateur classique, un bit ne peut contenir que la valeur 0 ou 1.
-
L'intrication signifie que l'état d'un qubit est indépendant de l'état d'un autre.
-
Les portes quantiques sont généralement des opérations irréversibles.
-
La convention Qiskit place le qubit le moins significatif, , à la position la plus à gauche.
-
La mesure d'un état quantique donne toujours exactement le même résultat si elle est répétée plusieurs fois.
-
La porte de Hadamard crée une superposition dans un seul qubit.
-
Les circuits quantiques peuvent inclure des opérations de mesure qui réduisent l'état de superposition à l'un des états classiquement autorisés.
-
Le nombre d'états classiques possibles pour bits est .
-
Les probabilités de résultat des mesures quantiques sont données par le carré des amplitudes des états de base classiquement mesurables.
Questions à réponse courte
-
Quelles sont les principales différences entre un bit et un qubit?
-
Qu'arrive-t-il à un état quantique lorsqu'il est mesuré?
-
Pourquoi utilise-t-on la notation little-endian dans Qiskit?
-
Quelles sont les quatre étapes du flux de travail des modèles Qiskit?
Questions de défi :
-
Dans le module, nous n'avons utilisé l'additionneur que pour ajouter des états classiquement autorisés pour et . Mais nous pouvons aussi préparer et en superpositions! Modifiez le code pour préparer chaque qubit dans une superposition égale de 0 et de 1, puis exécutez le nouveau circuit et obtenez un nouvel histogramme. Que voyez-vous? Expliquez ce qui se passe.
-
Décomposition de la porte de Toffoli. Utilisez
decompose()pour montrer comment la porte de Toffoli est décomposée en portes à un et deux qubits, puis vérifiez cette construction à l'aide de la multiplication de matrices. N'oubliez pas que si les schémas de circuits se lisent de gauche à droite, les matrices s'appliquent aux états quantiques de droite à gauche!