Qiskit est un SDK open source permettant de travailler avec des ordinateurs quantiques au niveau de circuits quantiques étendus, d'opérateurs et de primitives.
Cette bibliothèque est le composant principal de Qiskit, qui contient les éléments de base permettant de créer et d'utiliser des circuits quantiques, des opérateurs quantiques et des fonctions primitives (échantillonneur et estimateur). Il contient également un transpileur prenant en charge l'optimisation des circuits quantiques et une boîte à outils d'informations quantiques pour créer des opérateurs avancés.
Pour plus de détails sur l'utilisation de Qiskit, reportez-vous à la documentation située ici :
https://docs.quantum.ibm.com/
Avertissement
N'essayez pas de mettre à niveau un environnement Qiskit 0.* existant vers Qiskit 1.0 sur place. En savoir plus.
Nous encourageons l'installation de Qiskit via pip
:
pip install qiskit
Pip gérera automatiquement toutes les dépendances et vous installerez toujours la dernière version (et bien testée).
Pour installer à partir des sources, suivez les instructions de la documentation.
Maintenant que Qiskit est installé, il est temps de commencer à travailler avec Qiskit. Les parties essentielles d’un programme quantique sont :
sampler
de fonctions primitives pour échantillonner les résultats ou l' estimator
pour estimer les valeurs. Créez un exemple de circuit quantique à l'aide de la classe QuantumCircuit
:
import numpy as np
from qiskit import QuantumCircuit
# 1. A quantum circuit for preparing the quantum state |000> + i |111>
qc_example = QuantumCircuit ( 3 )
qc_example . h ( 0 ) # generate superpostion
qc_example . p ( np . pi / 2 , 0 ) # add quantum phase
qc_example . cx ( 0 , 1 ) # 0th-qubit-Controlled-NOT gate on 1st qubit
qc_example . cx ( 0 , 2 ) # 0th-qubit-Controlled-NOT gate on 2nd qubit
Cet exemple simple rend un état intriqué connu sous le nom d'état GHZ. h
), porte de phase ( p
) et porte CNOT ( cx
).
Une fois que vous avez réalisé votre premier circuit quantique, choisissez quelle fonction primitive vous utiliserez. En commençant par sampler
, nous utilisons measure_all(inplace=False)
pour obtenir une copie du circuit dans lequel tous les qubits sont mesurés :
# 2. Add the classical output in the form of measurement of all qubits
qc_measured = qc_example . measure_all ( inplace = False )
# 3. Execute using the Sampler primitive
from qiskit . primitives import StatevectorSampler
sampler = StatevectorSampler ()
job = sampler . run ([ qc_measured ], shots = 1000 )
result = job . result ()
print ( f" > Counts: { result [ 0 ]. data [ "meas" ]. get_counts () } " )
L'exécution de cette opération donnera un résultat similaire à {'000': 497, '111': 503}
qui est 000
50 % du temps et 111
50 % du temps jusqu'aux fluctuations statistiques. Pour illustrer la puissance d'Estimator, nous utilisons maintenant la boîte à outils d'information quantique pour créer l'opérateur run()
, avec notre circuit quantique. Notez que l'estimateur nécessite un circuit sans mesure, nous utilisons donc le circuit qc_example
que nous avons créé précédemment.
# 2. Define the observable to be measured
from qiskit . quantum_info import SparsePauliOp
operator = SparsePauliOp . from_list ([( "XXY" , 1 ), ( "XYX" , 1 ), ( "YXX" , 1 ), ( "YYY" , - 1 )])
# 3. Execute using the Estimator primitive
from qiskit . primitives import StatevectorEstimator
estimator = StatevectorEstimator ()
job = estimator . run ([( qc_example , operator )], precision = 1e-3 )
result = job . result ()
print ( f" > Expectation values: { result [ 0 ]. data . evs } " )
L'exécuter donnera le résultat 4
. Pour vous amuser, essayez d'attribuer une valeur de +/- 1 à chaque opérateur X et Y à un seul qubit et voyez si vous pouvez atteindre ce résultat. (Alerte spoiler : ce n'est pas possible !)
L’utilisation de qiskit.primitives.StatevectorSampler
et qiskit.primitives.StatevectorEstimator
fournis par Qiskit ne vous mènera pas très loin. La puissance de l’informatique quantique ne peut pas être simulée sur des ordinateurs classiques et vous devez utiliser du matériel quantique réel pour évoluer vers des circuits quantiques plus grands. Cependant, l’exécution d’un circuit quantique sur du matériel nécessite une réécriture des portes de base et une connectivité du matériel quantique. L'outil qui fait cela est le transpileur, et Qiskit inclut des passes de transpileur pour la synthèse, l'optimisation, le mappage et la planification. Cependant, il inclut également un compilateur par défaut, qui fonctionne très bien dans la plupart des exemples. Le code suivant mappera l'exemple de circuit sur basis_gates = ['cz', 'sx', 'rz']
et une chaîne linéaire de qubits coupling_map =[[0, 1], [1, 2]]
.
from qiskit import transpile
qc_transpiled = transpile ( qc_example , basis_gates = [ 'cz' , 'sx' , 'rz' ], coupling_map = [[ 0 , 1 ], [ 1 , 2 ]] , optimization_level = 3 )
Qiskit fournit une couche d'abstraction qui permet aux utilisateurs d'exécuter des circuits quantiques sur du matériel de n'importe quel fournisseur fournissant une interface compatible. La meilleure façon d'utiliser Qiskit est d'utiliser un environnement d'exécution qui fournit des implémentations optimisées de sampler
et estimator
pour une plate-forme matérielle donnée. Ce runtime peut impliquer l'utilisation de pré- et post-traitements, tels que des passes de transpileur optimisées avec suppression des erreurs, atténuation des erreurs et, éventuellement, correction d'erreurs intégrée. Un runtime implémente les interfaces qiskit.primitives.BaseSamplerV2
et qiskit.primitives.BaseEstimatorV2
. Par exemple, certains packages qui fournissent des implémentations d'une implémentation primitive d'exécution sont :
Qiskit fournit également une interface abstraite de niveau inférieur pour décrire les backends quantiques. Cette interface, située dans qiskit.providers
, définit une classe abstraite BackendV2
que les fournisseurs peuvent implémenter pour représenter leur matériel ou leurs simulateurs auprès de Qiskit. La classe backend comprend une interface commune pour exécuter des circuits sur les backends ; cependant, dans cette interface, chaque fournisseur peut effectuer différents types de pré- et post-traitement et renvoyer des résultats définis par le fournisseur. Voici quelques exemples de packages de fournisseurs publiés qui s'interfacent avec du matériel réel :
Vous pouvez vous référer à la documentation de ces packages pour plus d'instructions sur la façon d'accéder et d'utiliser ces systèmes.
Si vous souhaitez contribuer à Qiskit, veuillez consulter nos directives de contribution. En participant, vous êtes censé respecter notre code de conduite.
Nous utilisons les problèmes GitHub pour suivre les demandes et les bugs. Veuillez rejoindre la communauté Qiskit Slack pour des discussions, des commentaires et des questions. Pour les questions liées à l'exécution ou à l'utilisation de Qiskit, Stack Overflow dispose d'un qiskit
. Pour des questions sur l'informatique quantique avec Qiskit, utilisez la balise qiskit
dans Quantum Computing Stack Exchange (veuillez lire d'abord les directives sur la façon de poser des questions sur ce forum).
Qiskit est l'œuvre de nombreuses personnes qui contribuent au projet à différents niveaux. Si vous utilisez Qiskit, veuillez citer selon le fichier BibTeX inclus.
Le journal des modifications d'une version particulière est généré dynamiquement et est écrit sur la page de version sur Github pour chaque version. Par exemple, vous pouvez trouver la page de la version 0.46.0
ici :
https://github.com/Qiskit/qiskit/releases/tag/0.46.0
Le journal des modifications de la version actuelle se trouve dans l'onglet versions : Le journal des modifications fournit un aperçu rapide des modifications notables pour une version donnée.
De plus, dans le cadre de chaque version, des notes de version détaillées sont rédigées pour documenter en détail ce qui a changé dans le cadre d'une version. Cela inclut toute documentation sur les modifications potentielles lors de la mise à niveau et les nouvelles fonctionnalités. Voir toutes les notes de version ici.
Nous reconnaissons le soutien partiel au développement de Qiskit de la part du DOE Office of Science National Quantum Information Science Research Centers, Co-design Center for Quantum Advantage (C2QA) sous le numéro de contrat DE-SC0012704.
Licence Apache 2.0