Skip to main content
IBM Quantum Platform

Guía rápida de Sampler

La función principal del muestreador es tomar muestras del registro de salida tras la ejecución de uno o varios circuitos cuánticos. Se aceptan circuitos dinámicos y circuitos parametrizados como entrada (si se envían circuitos parametrizados, también deben indicarse los valores de los parámetros). Sampler también admite funciones integradas de desacoplamiento dinámico y «twirling» para la supresión de errores.

Los pasos de este tema describen cómo configurar Sampler, explorar las opciones disponibles para configurarlo y ejecutarlo en un programa.

  • El código de esta página se ha desarrollado teniendo en cuenta los siguientes requisitos. Recomendamos utilizar estas versiones o posteriores.

    qiskit[all]~=2.5.0
    qiskit-ibm-runtime~=0.47.0
    

Pasos para utilizar la primitiva «Sampler»

1. Inicializar la cuenta

Dado que Qiskit Runtime es un servicio gestionado, primero debe configurar su cuenta. A continuación, puedes seleccionar la QPU que deseas utilizar para calcular el valor esperado.

Sigue los pasos que se indican en el tema «Configurar tu cuenta de IBM Cloud » si aún no tienes una cuenta creada.

Puertas fraccionarias

Para utilizar las puertas fraccionarias, que ahora son compatibles, configúralas use_fractional_gates=True al solicitar un backend desde una QiskitRuntimeService instancia. Por ejemplo:

service = QiskitRuntimeService()
fractional_gate_backend = service.least_busy(use_fractional_gates=True)

Esta es una función experimental y podría cambiar en el futuro.

from qiskit_ibm_runtime import QiskitRuntimeService

service = QiskitRuntimeService()
backend = service.least_busy(
    operational=True, simulator=False, min_num_qubits=127
)

2. Crea un circuito

Necesitas al menos un circuito como entrada para la primitiva Sampler.

import numpy as np
from qiskit.circuit.library import efficient_su2

circuit = efficient_su2(127, entanglement="linear")
circuit.measure_all()
# The circuit is parametrized, so we will define the parameter values for execution
param_values = np.random.rand(circuit.num_parameters)

El circuito y la variable observable deben transformarse para que utilicen únicamente instrucciones compatibles con la QPU (lo que se conoce como circuitos de arquitectura de conjunto de instrucciones, o ISA ). Para ello, utiliza el transpilador.

from qiskit.transpiler import generate_preset_pass_manager

pm = generate_preset_pass_manager(optimization_level=1, backend=backend)
isa_circuit = pm.run(circuit)
print(f">>> Circuit ops (ISA): {isa_circuit.count_ops()}")

Output:

>>> Circuit ops (ISA): OrderedDict([('rz', 3036), ('sx', 1769), ('cz', 378), ('measure', 127), ('barrier', 1)])

3. Inicializar el muestreador « Qiskit Runtime »

Al inicializar Sampler, utiliza el mode parámetro para especificar el modo en el que deseas que se ejecute. Los valores posibles son batch, session, u backend objetos para los modos de ejecución por lotes, por sesión y por trabajo, respectivamente. Para obtener más información, consulte la sección «Introducción a los modos de ejecución de Qiskit Runtime ». Ten en cuenta que los usuarios de Open Plan no pueden enviar trabajos de sesión.

from qiskit_ibm_runtime import SamplerV2 as Sampler

sampler = Sampler(mode=backend)

4. Ejecuta Sampler y obtén los resultados

A continuación, invoca el run() método para generar el resultado. El circuito y los conjuntos de valores de parámetros opcionales se introducen como tuplas de bloques unificados primitivos ( PUB ).

job = sampler.run([(isa_circuit, param_values)])
print(f">>> Job ID: {job.job_id()}")
print(f">>> Job Status: {job.status()}")

Output:

>>> Job ID: d9bjioe6hjac73ffpt00
>>> Job Status: QUEUED
result = job.result()

# Get results for the first (and only) PUB
pub_result = result[0]
print(
    f"First ten results for the 'meas' output register: "
    f"{pub_result.data.meas.get_bitstrings()[:10]}"
)

Output:

First ten results for the 'meas' output register: ['1101010100010000110010011111001100111000110001001100000001111010010000110001000110011011001000011101010101011011011001100100011', '1010000011001001001010000000010011101110010000011010001001000010110000100010011010101110001100000100000011011111001000000000001', '1001100110001100100011000001000010000010011010100000000011010011110101001100001101100000001010000111010000011010010001100110011', '0101010101010101010100111011101110010110010101110000100010100010110011000010101000000110011001011101010000101011101001100001000', '0101011011101110110010101100100011111001001100001101001001101010000000110101001010011000010100100011000001000101010001100010011', '1101010101001111011111100111001001111110011010101000011100001110000101111010000011100110101010001101000011001100110011001010000', '0000000000000010001000111111100011101100011010101110011011110011100110011001010100011100101100100011100110011111001000110010000', '1010101000100110110100010100000000011100011010010110100000111011111001111011101010101111011100100111010010000110100000100000000', '0001111001000100110011110010011001101100001110111001100010101011001100001100110010001010001000010011010000101011110001110001100', '1100100011000011001010000011010101110110010101100111010111100101011110110110100010010001001100110011000100001010010101010010011']

Próximos pasos

Recomendaciones
¿Le ha resultado útil esta página?
Informe de un error, de una errata o solicite contenido en GitHub.