Qiskit es un SDK de código abierto para trabajar con computadoras cuánticas a nivel de circuitos, operadores y primitivas cuánticos extendidos.
Esta biblioteca es el componente central de Qiskit, que contiene los componentes básicos para crear y trabajar con circuitos cuánticos, operadores cuánticos y funciones primitivas (Sampler y Estimator). También contiene un transpilador que admite la optimización de circuitos cuánticos y una caja de herramientas de información cuántica para crear operadores avanzados.
Para obtener más detalles sobre cómo utilizar Qiskit, consulte la documentación que se encuentra aquí:
https://docs.quantum.ibm.com/
Advertencia
No intente actualizar un entorno Qiskit 0.* existente a Qiskit 1.0 localmente. Leer más.
Recomendamos instalar Qiskit a través de pip
:
pip install qiskit
Pip manejará todas las dependencias automáticamente y siempre instalará la versión más reciente (y bien probada).
Para instalar desde la fuente, siga las instrucciones de la documentación.
Ahora que Qiskit está instalado, es hora de comenzar a trabajar con Qiskit. Las partes esenciales de un programa cuántico son:
sampler
de funciones primitivas para muestrear resultados o el estimator
para estimar valores. Cree un circuito cuántico de ejemplo utilizando la clase 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
Este simple ejemplo hace que un estado entrelazado se conozca como estado GHZ. h
), puerta de fase ( p
) y puerta CNOT ( cx
).
Una vez que hayas creado tu primer circuito cuántico, elige qué función primitiva usarás. Comenzando con sampler
, usamos measure_all(inplace=False)
para obtener una copia del circuito en el que se miden todos los qubits:
# 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 () } " )
Ejecutar esto dará un resultado similar a {'000': 497, '111': 503}
que es 000
el 50% del tiempo y 111
el 50% del tiempo hasta fluctuaciones estadísticas. Para ilustrar el poder del Estimador, ahora usamos la caja de herramientas de información cuántica para crear el operador. run()
, junto con nuestro circuito cuántico. Tenga en cuenta que el Estimador requiere un circuito sin medición, por lo que usamos el circuito qc_example
que creamos anteriormente.
# 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 } " )
Ejecutar esto dará el resultado 4
. Por diversión, intente asignar un valor de +/- 1 a cada operador X e Y de un solo qubit y vea si puede lograr este resultado. (Alerta de spoiler: ¡esto no es posible!)
Usar qiskit.primitives.StatevectorSampler
y qiskit.primitives.StatevectorEstimator
proporcionados por Qiskit no lo llevará muy lejos. El poder de la computación cuántica no se puede simular en computadoras clásicas y es necesario utilizar hardware cuántico real para escalar a circuitos cuánticos más grandes. Sin embargo, ejecutar un circuito cuántico en hardware requiere reescribir las puertas básicas y la conectividad del hardware cuántico. La herramienta que hace esto es el transpilador, y Qiskit incluye pases de transpilador para síntesis, optimización, mapeo y programación. Sin embargo, también incluye un compilador predeterminado, que funciona muy bien en la mayoría de los ejemplos. El siguiente código asignará el circuito de ejemplo basis_gates = ['cz', 'sx', 'rz']
y una cadena lineal 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 proporciona una capa de abstracción que permite a los usuarios ejecutar circuitos cuánticos en hardware de cualquier proveedor que proporcione una interfaz compatible. La mejor manera de utilizar Qiskit es con un entorno de ejecución que proporcione implementaciones optimizadas de sampler
y estimator
para una plataforma de hardware determinada. Este tiempo de ejecución puede implicar el uso de procesamiento previo y posterior, como pases de transpilador optimizados con supresión de errores, mitigación de errores y, eventualmente, corrección de errores integrada. Un tiempo de ejecución implementa las interfaces qiskit.primitives.BaseSamplerV2
y qiskit.primitives.BaseEstimatorV2
. Por ejemplo, algunos paquetes que proporcionan implementaciones de una implementación primitiva en tiempo de ejecución son:
Qiskit también proporciona una interfaz abstracta de nivel inferior para describir backends cuánticos. Esta interfaz, ubicada en qiskit.providers
, define una clase abstracta BackendV2
que los proveedores pueden implementar para representar su hardware o simuladores en Qiskit. La clase backend incluye una interfaz común para ejecutar circuitos en los backends; sin embargo, en esta interfaz cada proveedor puede realizar diferentes tipos de preprocesamiento y posprocesamiento y resultados de devolución que están definidos por el proveedor. Algunos ejemplos de paquetes de proveedores publicados que interactúan con hardware real son:
Puede consultar la documentación de estos paquetes para obtener más instrucciones sobre cómo acceder y utilizar estos sistemas.
Si desea contribuir a Qiskit, consulte nuestras pautas de contribución. Al participar, se espera que respete nuestro código de conducta.
Usamos problemas de GitHub para rastrear solicitudes y errores. Únase a la comunidad Qiskit Slack para debates, comentarios y preguntas. Para preguntas relacionadas con la ejecución o el uso de Qiskit, Stack Overflow tiene un qiskit
. Si tiene preguntas sobre computación cuántica con Qiskit, use la etiqueta qiskit
en Quantum Computing Stack Exchange (lea primero las pautas sobre cómo hacer preguntas en ese foro).
Qiskit es el trabajo de muchas personas que contribuyen al proyecto a diferentes niveles. Si utiliza Qiskit, cite según el archivo BibTeX incluido.
El registro de cambios para una versión particular se genera dinámicamente y se escribe en la página de lanzamiento en Github para cada versión. Por ejemplo, puede encontrar la página de la versión 0.46.0
aquí:
https://github.com/Qiskit/qiskit/releases/tag/0.46.0
El registro de cambios de la versión actual se puede encontrar en la pestaña de versiones: El registro de cambios proporciona una descripción general rápida de los cambios notables para una versión determinada.
Además, como parte de cada versión, se escriben notas de versión detalladas para documentar en detalle lo que ha cambiado como parte de una versión. Esto incluye cualquier documentación sobre posibles cambios importantes en la actualización y nuevas funciones. Vea todas las notas de la versión aquí.
Reconocemos el apoyo parcial para el desarrollo de Qiskit de los Centros Nacionales de Investigación de Ciencias de la Información Cuántica de la Oficina de Ciencias del DOE, Centro de Codiseño para Ventajas Cuánticas (C2QA) bajo el número de contrato DE-SC0012704.
Licencia Apache 2.0