El nuevo entorno de desarrollo cuántico de Qiskit

Qiskit ha evolucionado y es uno de los entornos preferidos para diseñar y ejecutar programas en computadores cuánticos. La herramienta más conocida de este entorno es el entorno de desarrollo Qiskit SDK y el entorno para ejecutar trabajos en los QPUs (QPU, Quantum Processing Unit) de IBM, Qiskit Runtime.

A estas se une la herramienta de Transpiler, que reescribe y optimiza un circuito cuántico abstracto para que sea compatible con el hardware cuántico específico y lo optimiza para su ejecución, y multitud de proyectos y aplicaciones de código abierto que complementan el ecosistema.

Qiskit SDK es el componente principal de desarrollo y está compuesto de:

  • qiskit.circuit: El bloque básico, el circuito cuántico que sirve para inicializar y manipular circuitos, puertas e instrucciones. Este tiene la famosa clase QuantumCircuit para crear circuitos cuánticos.
# Crear un circuito con un registro de 3 qubtis 
qc = QuantumCircuit(3)
  • qiskit.circuit.library: Tiene una gran cantidad de bloques básicos y circuitos desde puertas estándar, oracles, cambios de base. Por ejemplo, PauliEvolutionGate, operador de evolución temporal a base de operadores de Pauli.
  • qiskit.quantum_info: Funciones para trabajar con estados, operadores y canales. A continuación, se ve el uso de la clase statevector y densitymatrix para crear una matriz de densidad a partir de un estado.
from qiskit import QuantumCircuit
from qiskit.quantum_info import Statevector, DensityMatrix

# Crear un estado puro |+> = (|0> + |1>)/sqrt(2)
qc_pure = QuantumCircuit(1)
qc_pure.h(0)  # Hadamard gate

# Obtener el estado y la matriz de densidad
state = Statevector.from_instruction(qc_pure)
rho_pure = DensityMatrix(state)
  • qiskit.transpiler: Permite optimizar y transformar un circuito cuántico a una topología de hardware cuántico específica. A continuación, se ve un ejemplo de transformación de un circuito.
from qiskit.circuit import QuantumCircuit
from qiskit.transpiler import generate_preset_pass_manager
from qiskit_ibm_runtime import QiskitRuntimeService
 
# Cualquier circuito
abstract = QuantumCircuit(2)
abstract.h(0)
abstract.cx(0, 1)
 
# Obtenemos el backend con el que vamos a trabajar
backend = QiskitRuntimeService().backend("some-backend")
 
# Creamos el pass manager para la transpilación
pm = generate_preset_pass_manager(backend=backend)

# Realizamos la transpilación
physical = pm.run(abstract)
# Ya está el circuito optimizado y adaptado al hardware y lo podemos usar
  • qiskit.primitives: Contiene las definiciones e implementaciones base de las primtivas Sampler y Estimator que permiten muestrear la salida de un circuito y calcular el valor esperado del observable. Este permite abstraerse del detalle del hardware y de los simuladores para obtener muestreos y medidas.

Es importante Qiskit Runtime, que es un cliente del servicio IBM Quantum® hardware y nos permite realizar simulaciones y trabajos en los QPUs de IBM.

Destacar también Qiskit Aer (qiskit-aer), que es del ecosistema Qiskit y es el paquete para simuladores de computación cuántica con modelos de ruido realistas con interfaces para ejecutar circuitos cuánticos con o sin ruido utilizando diversos métodos de simulación.

Y es que cuando queremos simular un circuito cuántico y no implementarlo todavía en una QPU, tenemos las siguientes opciones: Usar el modelo de test de Qiskit Runtime; usar las primtivas Sampler y Estimator incluidas en Qiskit SDK; usar Qiskit Aer (qiskit-aer) para simular circuitos cuánticos con o sin ruido.

Por último, los complementos, que son una colección de capacidades de investigación desarrolladas sobre la base de Qiskit para mapeo, optimización, post-procesamiento, corrección de errores, etc.

Deja una respuesta

Orgullosamente ofrecido por WordPress | Tema: Baskerville 2 por Anders Noren.

Subir ↑