Qiskit
Aperçu
Qiskit est le framework de calcul quantique open-source le plus populaire au monde avec 13M+ téléchargements. Construisez des circuits quantiques, optimisez pour le matériel, exécutez sur des simulateurs ou des ordinateurs quantiques réels, et analysez les résultats. Supporte IBM Quantum (systèmes 100+ qubits), IonQ, Amazon Braket et d'autres fournisseurs.
Caractéristiques clés :
- Transpilation 83x plus rapide que les concurrents
- 29 % moins de portes à deux qubits dans les circuits optimisés
- Exécution agnostique du backend (simulateurs locaux ou matériel cloud)
- Bibliothèques d'algorithmes complètes pour l'optimisation, la chimie et le ML
Démarrage rapide
Installation
uv pip install qiskit
uv pip install "qiskit[visualization]" matplotlib
Premier circuit
from qiskit import QuantumCircuit
from qiskit.primitives import StatevectorSampler
# Create Bell state (entangled qubits)
qc = QuantumCircuit(2)
qc.h(0) # Hadamard on qubit 0
qc.cx(0, 1) # CNOT from qubit 0 to 1
qc.measure_all() # Measure both qubits
# Run locally
sampler = StatevectorSampler()
result = sampler.run([qc], shots=1024).result()
counts = result[0].data.meas.get_counts()
print(counts) # {'00': ~512, '11': ~512}
Visualisation
from qiskit.visualization import plot_histogram
qc.draw('mpl') # Circuit diagram
plot_histogram(counts) # Results histogram
Capacités principales
1. Configuration et installation
Pour une installation détaillée, l'authentification et la configuration du compte IBM Quantum :
- Voir
references/setup.md
Sujets couverts :
- Installation avec uv
- Configuration de l'environnement Python
- Configuration du compte IBM Quantum et du token API
- Exécution locale vs cloud
2. Construction de circuits quantiques
Pour construire des circuits quantiques avec des portes, des mesures et de la composition :
- Voir
references/circuits.md
Sujets couverts :
- Création de circuits avec QuantumCircuit
- Portes à un qubit (H, X, Y, Z, rotations, portes de phase)
- Portes multi-qubits (CNOT, SWAP, Toffoli)
- Mesures et barrières
- Composition de circuits et propriétés
- Circuits paramétrés pour les algorithmes variationnels
3. Primitives (Sampler et Estimator)
Pour exécuter des circuits quantiques et calculer les résultats :
- Voir
references/primitives.md
Sujets couverts :
- Sampler : Obtenir les mesures de chaînes de bits et les distributions de probabilité
- Estimator : Calculer les valeurs d'espérance des observables
- Interface V2 (StatevectorSampler, StatevectorEstimator)
- Primitives IBM Quantum Runtime pour le matériel
- Modes Sessions et Batch
- Liaison des paramètres
4. Transpilation et optimisation
Pour optimiser les circuits et préparer l'exécution sur le matériel :
- Voir
references/transpilation.md
Sujets couverts :
- Pourquoi la transpilation est nécessaire
- Niveaux d'optimisation (0-3)
- Six étapes de transpilation (init, layout, routing, translation, optimization, scheduling)
- Fonctionnalités avancées (élision de permutation virtuelle, annulation de portes)
- Paramètres courants (initial_layout, approximation_degree, seed)
- Meilleures pratiques pour les circuits efficaces
5. Visualisation
Pour afficher les circuits, les résultats et les états quantiques :
- Voir
references/visualization.md
Sujets couverts :
- Dessins de circuits (texte, matplotlib, LaTeX)
- Histogrammes de résultats
- Visualisation de l'état quantique (sphère de Bloch, state city, QSphere)
- Topologie du backend et cartes d'erreurs
- Personnalisation et style
- Enregistrement de figures de qualité publication
6. Backends matériels
Pour exécuter sur des simulateurs et des ordinateurs quantiques réels :
- Voir
references/backends.md
Sujets couverts :
- Backends IBM Quantum et authentification
- Propriétés et statut du backend
- Exécution sur du matériel réel avec les primitives Runtime
- Gestion des jobs et mise en queue
- Mode Session (algorithmes itératifs)
- Mode Batch (jobs parallèles)
- Simulateurs locaux (StatevectorSampler, Aer)
- Fournisseurs tiers (IonQ, Amazon Braket)
- Stratégies d'atténuation des erreurs
7. Workflow Qiskit Patterns
Pour implémenter le workflow de calcul quantique en quatre étapes :
- Voir
references/patterns.md
Sujets couverts :
- Map : Traduire les problèmes en circuits quantiques
- Optimize : Transpiler pour le matériel
- Execute : Exécuter avec les primitives
- Post-process : Extraire et analyser les résultats
- Exemple VQE complet
- Exécution Session vs Batch
- Patterns de workflow courants
8. Algorithmes et applications quantiques
Pour implémenter des algorithmes quantiques spécifiques :
- Voir
references/algorithms.md
Sujets couverts :
- Optimisation : VQE, QAOA, algorithme de Grover
- Chimie : États fondamentaux moléculaires, états excités, Hamiltoniens
- Machine Learning : Noyaux quantiques, VQC, QNN
- Bibliothèques d'algorithmes : Qiskit Nature, Qiskit ML, Qiskit Optimization
- Simulations de physique et benchmarking
Guide de décision du workflow
Si vous avez besoin de :
- Installer Qiskit ou configurer le compte IBM Quantum →
references/setup.md - Construire un nouveau circuit quantique →
references/circuits.md - Comprendre les portes et les opérations de circuit →
references/circuits.md - Exécuter les circuits et obtenir les mesures →
references/primitives.md - Calculer les valeurs d'espérance →
references/primitives.md - Optimiser les circuits pour le matériel →
references/transpilation.md - Visualiser les circuits ou les résultats →
references/visualization.md - Exécuter sur le matériel IBM Quantum →
references/backends.md - Se connecter à des fournisseurs tiers →
references/backends.md - Implémenter un workflow quantique de bout en bout →
references/patterns.md - Construire un algorithme spécifique (VQE, QAOA, etc.) →
references/algorithms.md - Résoudre des problèmes de chimie ou d'optimisation →
references/algorithms.md
Meilleures pratiques
Workflow de développement
-
Commencez par les simulateurs : Testez localement avant d'utiliser le matériel
from qiskit.primitives import StatevectorSampler sampler = StatevectorSampler() -
Toujours transpiler : Optimisez les circuits avant l'exécution
from qiskit import transpile qc_optimized = transpile(qc, backend=backend, optimization_level=3) -
Utiliser les primitives appropriées :
- Sampler pour les chaînes de bits (algorithmes d'optimisation)
- Estimator pour les valeurs d'espérance (chimie, physique)
-
Choisir le mode d'exécution :
- Session : Algorithmes itératifs (VQE, QAOA)
- Batch : Jobs parallèles indépendants
- Job unique : Expériences ponctuelles
Optimisation des performances
- Utiliser optimization_level=3 pour la production
- Minimiser les portes à deux qubits (source d'erreur majeure)
- Tester avec des simulateurs bruyants avant le matériel
- Enregistrer et réutiliser les circuits transpilés
- Surveiller la convergence dans les algorithmes variationnels
Exécution sur le matériel
- Vérifier le statut du backend avant soumission
- Utiliser least_busy() pour les tests
- Enregistrer les IDs de job pour récupération ultérieure
- Appliquer l'atténuation d'erreurs (resilience_level)
- Commencer avec moins de shots, augmenter pour les exécutions finales
Patterns courants
Pattern 1 : Exécution simple de circuit
from qiskit import QuantumCircuit, transpile
from qiskit.primitives import StatevectorSampler
qc = QuantumCircuit(2)
qc.h(0)
qc.cx(0, 1)
qc.measure_all()
sampler = StatevectorSampler()
result = sampler.run([qc], shots=1024).result()
counts = result[0].data.meas.get_counts()
Pattern 2 : Exécution sur le matériel avec transpilation
from qiskit_ibm_runtime import QiskitRuntimeService, SamplerV2 as Sampler
from qiskit import transpile
service = QiskitRuntimeService()
backend = service.backend("ibm_brisbane")
qc_optimized = transpile(qc, backend=backend, optimization_level=3)
sampler = Sampler(backend)
job = sampler.run([qc_optimized], shots=1024)
result = job.result()
Pattern 3 : Algorithme variationnel (VQE)
from qiskit_ibm_runtime import Session, EstimatorV2 as Estimator
from scipy.optimize import minimize
with Session(backend=backend) as session:
estimator = Estimator(session=session)
def cost_function(params):
bound_qc = ansatz.assign_parameters(params)
qc_isa = transpile(bound_qc, backend=backend)
result = estimator.run([(qc_isa, hamiltonian)]).result()
return result[0].data.evs
result = minimize(cost_function, initial_params, method='COBYLA')
Ressources supplémentaires
- Documentation officielle : https://quantum.ibm.com/docs
- Qiskit Textbook : https://qiskit.org/learn
- Référence API : https://docs.quantum.ibm.com/api/qiskit
- Guide Patterns : https://quantum.cloud.ibm.com/docs/en/guides/intro-to-patterns