Qiskit ist ein Open-Source-SDK für die Arbeit mit Quantencomputern auf der Ebene erweiterter Quantenschaltkreise, Operatoren und Grundelemente.
Diese Bibliothek ist die Kernkomponente von Qiskit, die die Bausteine zum Erstellen und Arbeiten mit Quantenschaltungen, Quantenoperatoren und primitiven Funktionen (Sampler und Estimator) enthält. Es enthält außerdem einen Transpiler, der die Optimierung von Quantenschaltungen unterstützt, und eine Quanteninformations-Toolbox zur Erstellung erweiterter Operatoren.
Weitere Einzelheiten zur Verwendung von Qiskit finden Sie in der Dokumentation hier:
https://docs.quantum.ibm.com/
Warnung
Versuchen Sie nicht, eine vorhandene Qiskit 0.*-Umgebung direkt auf Qiskit 1.0 zu aktualisieren. Mehr lesen.
Wir empfehlen die Installation von Qiskit über pip
:
pip install qiskit
Pip verarbeitet alle Abhängigkeiten automatisch und Sie installieren immer die neueste (und am besten getestete) Version.
Befolgen Sie zur Installation von der Quelle die Anweisungen in der Dokumentation.
Nachdem Qiskit nun installiert ist, ist es an der Zeit, mit Qiskit zu arbeiten. Die wesentlichen Teile eines Quantenprogramms sind:
sampler
zum Abtasten der Ergebnisse oder den estimator
zum Schätzen von Werten. Erstellen Sie einen Beispiel-Quantenschaltkreis mit der QuantumCircuit
-Klasse:
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
Dieses einfache Beispiel macht einen verschränkten Zustand als GHZ-Zustand bekannt h
), Phasengatter ( p
) und CNOT-Gatter ( cx
).
Sobald Sie Ihren ersten Quantenschaltkreis erstellt haben, wählen Sie aus, welche Grundfunktion Sie verwenden möchten. Beginnend mit sampler
verwenden wir measure_all(inplace=False)
, um eine Kopie der Schaltung zu erhalten, in der alle Qubits gemessen werden:
# 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 () } " )
Wenn Sie dies ausführen, erhalten Sie ein Ergebnis ähnlich wie {'000': 497, '111': 503}
das bis zu statistischen Schwankungen 000
in 50 % der Fälle und 111
in 50 % der Fälle beträgt. Um die Leistungsfähigkeit von Estimator zu veranschaulichen, verwenden wir nun die Quanteninformations-Toolbox, um den Operator zu erstellen run()
. Beachten Sie, dass der Schätzer eine Schaltung ohne Messung erfordert, daher verwenden wir die zuvor erstellte qc_example
-Schaltung.
# 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 } " )
Wenn Sie dies ausführen, erhalten Sie das Ergebnis 4
. Versuchen Sie zum Spaß, jedem einzelnen Qubit-Operator X und Y einen Wert von +/- 1 zuzuweisen, und prüfen Sie, ob Sie dieses Ergebnis erzielen können. (Spoiler-Alarm: Das ist nicht möglich!)
Mit dem von Qiskit bereitgestellten qiskit.primitives.StatevectorSampler
und qiskit.primitives.StatevectorEstimator
kommen Sie nicht weit. Die Leistung des Quantencomputings kann nicht auf klassischen Computern simuliert werden und Sie müssen echte Quantenhardware verwenden, um auf größere Quantenschaltkreise zu skalieren. Der Betrieb einer Quantenschaltung auf Hardware erfordert jedoch ein Umschreiben der Basisgatter und der Konnektivität der Quantenhardware. Das Tool, das dies tut, ist der Transpiler, und Qiskit enthält Transpiler-Durchläufe für Synthese, Optimierung, Zuordnung und Planung. Es enthält jedoch auch einen Standard-Compiler, der in den meisten Beispielen sehr gut funktioniert. Der folgende Code ordnet die Beispielschaltung dem basis_gates = ['cz', 'sx', 'rz']
und einer linearen Kette von Qubits zu 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 bietet eine Abstraktionsschicht, die es Benutzern ermöglicht, Quantenschaltungen auf Hardware eines beliebigen Anbieters auszuführen, der eine kompatible Schnittstelle bietet. Qiskit lässt sich am besten mit einer Laufzeitumgebung nutzen, die optimierte Implementierungen von sampler
und estimator
für eine bestimmte Hardwareplattform bereitstellt. Diese Laufzeit kann die Verwendung von Vor- und Nachverarbeitungen umfassen, wie etwa optimierte Transpiler-Durchläufe mit Fehlerunterdrückung, Fehlerminderung und schließlich integrierter Fehlerkorrektur. Eine Laufzeit implementiert die Schnittstellen qiskit.primitives.BaseSamplerV2
und qiskit.primitives.BaseEstimatorV2
. Einige Pakete, die Implementierungen einer einfachen Laufzeitimplementierung bereitstellen, sind beispielsweise:
Qiskit bietet außerdem eine abstrakte Schnittstelle auf niedrigerer Ebene zur Beschreibung von Quanten-Backends. Diese Schnittstelle, die sich in qiskit.providers
befindet, definiert eine abstrakte BackendV2
Klasse, die Anbieter implementieren können, um ihre Hardware oder Simulatoren für Qiskit darzustellen. Die Backend-Klasse umfasst eine gemeinsame Schnittstelle zum Ausführen von Schaltkreisen auf den Backends; In dieser Schnittstelle kann jedoch jeder Anbieter unterschiedliche Arten der Vor- und Nachbearbeitung durchführen und vom Anbieter definierte Ergebnisse zurückgeben. Einige Beispiele für veröffentlichte Anbieterpakete, die eine Schnittstelle zu echter Hardware haben, sind:
Weitere Anweisungen zum Zugriff auf diese Systeme und zur Nutzung dieser Systeme finden Sie in der Dokumentation dieser Pakete.
Wenn Sie einen Beitrag zu Qiskit leisten möchten, werfen Sie bitte einen Blick auf unsere Beitragsrichtlinien. Durch Ihre Teilnahme wird von Ihnen erwartet, dass Sie unseren Verhaltenskodex einhalten.
Wir verwenden GitHub-Probleme zur Nachverfolgung von Anfragen und Fehlern. Bitte treten Sie der Qiskit Slack-Community für Diskussionen, Kommentare und Fragen bei. Bei Fragen zum Ausführen oder Verwenden von Qiskit bietet Stack Overflow ein qiskit
. Bei Fragen zum Quantencomputing mit Qiskit verwenden Sie das qiskit
Tag im Quantum Computing Stack Exchange (bitte lesen Sie zuerst die Richtlinien für Fragen in diesem Forum).
Qiskit ist die Arbeit vieler Menschen, die auf verschiedenen Ebenen zum Projekt beitragen. Wenn Sie Qiskit verwenden, zitieren Sie bitte gemäß der mitgelieferten BibTeX-Datei.
Das Änderungsprotokoll für ein bestimmtes Release wird dynamisch generiert und für jedes Release auf die Release-Seite auf Github geschrieben. Die Seite zur Version 0.46.0
finden Sie beispielsweise hier:
https://github.com/Qiskit/qiskit/releases/tag/0.46.0
Das Änderungsprotokoll für das aktuelle Release finden Sie auf der Registerkarte „Releases“: Das Änderungsprotokoll bietet einen schnellen Überblick über wichtige Änderungen für ein bestimmtes Release.
Darüber hinaus werden im Rahmen jeder Veröffentlichung ausführliche Versionshinweise verfasst, um detailliert zu dokumentieren, was sich im Rahmen einer Veröffentlichung geändert hat. Hierzu gehört auch die Dokumentation potenzieller Breaking Changes bei Upgrades und neuer Funktionen. Alle Versionshinweise finden Sie hier.
Wir bedanken uns für die teilweise Unterstützung der Qiskit-Entwicklung durch das DOE Office of Science National Quantum Information Science Research Centers, Co-design Center for Quantum Advantage (C2QA) unter der Vertragsnummer DE-SC0012704.
Apache-Lizenz 2.0