Skip to main content
IBM Quantum Platform

Especificar opciones del estimador

  • 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
    

Puedes utilizar las opciones para personalizar la primitiva «Estimator». Aunque la interfaz del método run() de las primitivas es común a todas las implementaciones, sus opciones no lo son. Consulte las referencias de la API para obtener información sobre las opciones qiskit.primitives.BaseEstimatorV2 qiskit_aer.BaseEstimatorV2 y.

Notas:

Notas sobre la especificación de opciones en las primitivas del Estimador
  • Puedes consultar las opciones disponibles y actualizar los valores de las opciones durante o después de la inicialización del Estimador.
  • Utiliza el update() método para aplicar los cambios al options atributo.
  • Si no se especifica un valor para una opción, se le asigna un valor especial de Unset y se utilizan los valores predeterminados del servidor.
  • El options atributo es de dataclass tipo « Python ». Puedes utilizar el método integrado asdict para convertirlo en un diccionario.

Configurar las opciones del estimador

Puedes configurar las opciones al inicializar Estimator, después de inicializar Estimator o (solo en precision este caso) en el run() método.

Inicialización primitiva

Al inicializar Estimator, puedes pasar una instancia de la clase de opciones o un diccionario, y el programa creará una copia de esas opciones. Por lo tanto, modificar el diccionario original o la instancia de opciones no afecta a las opciones asociadas a la primitiva.

Clase de opciones

Al crear una instancia de la EstimatorV2 clase, puedes pasarle una instancia de la clase de opciones. Esas opciones se aplicarán cuando utilices run() para realizar el cálculo. Especifica las opciones con este formato: options.option.sub-option.sub-sub-option = choice. Por ejemplo: options.dynamical_decoupling.enable = True

Ejemplo:

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit_ibm_runtime.options import EstimatorOptions

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

options = EstimatorOptions(
    resilience_level=2,
    resilience={"zne_mitigation": True, "zne": {"noise_factors": [1, 3, 5]}},
)

# or...
options = EstimatorOptions()
options.resilience_level = 2
options.resilience.zne_mitigation = True
options.resilience.zne.noise_factors = [1, 3, 5]

estimator = Estimator(mode=backend, options=options)

Diccionario

Puedes especificar las opciones en forma de diccionario al inicializar Estimator.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator

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

# Setting options during initialization
estimator = Estimator(
    backend,
    options={
        "resilience_level": 2,
        "resilience": {
            "zne_mitigation": True,
            "zne": {"noise_factors": [1, 3, 5]},
        },
    },
)

Opciones de actualización tras la inicialización

Puedes especificar las opciones en este formato: estimator.options.option.sub-option.sub-sub-option = choice para aprovechar la función de autocompletado, o utilizar el update() método para realizar actualizaciones masivas.

No es necesario instanciar la clase de EstimatorV2 opciones (EstimatorOptions) si se configuran las opciones tras inicializar el objeto primitivo.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator

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

estimator = Estimator(mode=backend)

# Setting options after initialization
# This uses auto-complete.
estimator.options.default_precision = 0.01
# This does bulk update.
estimator.options.update(
    default_precision=0.02, resilience={"zne_mitigation": True}
)

Método Run()

Los únicos valores que se run() pueden pasar son los definidos en la interfaz. Es decir, precision para Estimator. Esto sobrescribe cualquier valor establecido para default_precision en la ejecución actual.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp

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

circuit1 = random_iqp(3)
circuit1.measure_all()
circuit2 = random_iqp(3)
circuit2.measure_all()

observable = SparsePauliOp("Z" * 3)

pass_manager = generate_preset_pass_manager(
    optimization_level=3, backend=backend
)

transpiled1 = pass_manager.run(circuit1)
transpiled2 = pass_manager.run(circuit2)
isa_observable1 = observable.apply_layout(transpiled1.layout)
isa_observable2 = observable.apply_layout(transpiled2.layout)

estimator = Estimator(mode=backend)
# Default precision to use if not specified in run()
estimator.options.default_precision = 0.01
# Run two circuits, requiring a precision of .02 for both.
estimator.run(
    [(transpiled1, isa_observable1), (transpiled2, isa_observable2)],
    precision=0.02,
)

Output:

<RuntimeJobV2('d9bjitvu62qs738pbiig', 'estimator')>

Caso especial: precisión

El EstimatorV2.run método admite dos argumentos: una lista de PUB, cada uno de los cuales puede especificar un valor de precisión específico de « PUB », y un argumento de palabra clave de precisión. Estos valores de precisión forman parte de la interfaz de ejecución del Estimador y son independientes de las opciones del Estimador en tiempo de ejecución. Tienen prioridad sobre cualquier valor especificado como opción para cumplir con la abstracción del Estimador.

Sin embargo, si no precision se especifica mediante ninguna opción de PUB ni en el argumento de la palabra clave run (o si todos son 0 None), se utiliza el valor de precisión de las opciones, en particular 0.0001 default_precision``.

Note

Estos parámetros de precisión sirven únicamente para especificar la precisión deseada, y no se garantiza que los resultados alcancen la precisión especificada.

Ten en cuenta que las opciones de Estimator incluyen tanto default_shots como default_precision. Sin embargo, dado que la función «gate-twirling» está activada por defecto, el producto de num_randomizations y shots_per_randomization tiene prioridad sobre esas dos opciones.

En concreto, para cualquier Estimator PUB :

  1. Si el archivo « PUB » especifica la precisión, utilice ese valor.
  2. Si se especifica el argumento de palabra clave «precision» en run, utilice ese valor.
  3. Si twirling está habilitado (True por defecto), se utiliza el producto de num_randomizations y shots_per_randomization, tal y como se especifica en las twirling opciones.
  4. Si estimator.options.default_shots se especifica, utilice ese valor para controlar la cantidad de datos.
  5. Si estimator.options.default_precision se especifica, utilice ese valor.

Por ejemplo, si se especifica la precisión en los cuatro lugares, se utiliza la que tiene mayor prioridad (la precisión especificada en el PUB).

Note

Aunque la precisión especificada en el archivo « PUB » y en run tiene mayor prioridad, el trabajo falla si twirling está activado y el producto de num_randomizations y shots_per_randomization es menor que el número de disparos necesarios para alcanzar dicha precisión. num_randomizationsEn este caso, EstimatorV2 no es posible distribuir los disparos entre los especificados.

Note

La precisión es inversamente proporcional al uso. Es decir, cuanto menor sea la precisión, más tiempo de procesamiento de la QPU se necesitará para ejecutarlo.

from qiskit_ibm_runtime import QiskitRuntimeService
from qiskit_ibm_runtime import EstimatorV2 as Estimator
from qiskit.circuit.library import random_iqp
from qiskit.transpiler import generate_preset_pass_manager
from qiskit.quantum_info import SparsePauliOp

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

observable = SparsePauliOp("Z" * 3)

circuit = random_iqp(3)
circuit.measure_all()

pass_manager = generate_preset_pass_manager(
    optimization_level=3, backend=backend
)

isa_circuit = pass_manager.run(circuit)
isa_observable = observable.apply_layout(isa_circuit.layout)

# Setting precision during primitive initialization
estimator = Estimator(mode=backend, options={"default_precision": 0.05})

# Run with precision=0.02, overwriting the default.
estimator.run(
    [(isa_circuit, isa_observable1)],
    precision=0.02,
)

Output:

<RuntimeJobV2('d9bjj03v6alc73ct56lg', 'estimator')>

Desactiva todas las funciones de mitigación y supresión de errores

Puedes desactivar todas las funciones de mitigación y supresión de errores si, por ejemplo, estás investigando tus propias técnicas de mitigación. Para ello, configura resilience_level = 0.

Ejemplo:

from qiskit_ibm_runtime import EstimatorV2 as Estimator, QiskitRuntimeService

# Define the service.  This allows you to access an IBM QPU.
service = QiskitRuntimeService()

# Get a backend
backend = service.least_busy(operational=True, simulator=False)

# Define Estimator
estimator = Estimator(backend)

options = estimator.options

# Turn off all error mitigation and suppression
options.resilience_level = 0

Opciones disponibles

La siguiente tabla recoge las opciones de la última versión de qiskit-ibm-runtime. Para ver versiones anteriores de las opciones, visita la qiskit-ibm-runtime referencia de la API y selecciona una versión anterior.

  • El número total de disparos que se utilizarán por circuito y por configuración.

    Opciones : número entero >= 0

    Valor predeterminado : Ninguno

    default_shots Documentación de la API

  • La precisión predeterminada que se utilizará en cualquier llamada a PUBrun() que no especifique una.

    Opciones : Float > 0

    Valor predeterminado : 0.015625 (1 / √4096)

    default_precision Documentación de la API

  • Controlar los ajustes de mitigación de errores de desacoplamiento dinámico.

    dynamical_decoupling Documentación de la API

    • Opciones : True, False

      Por defecto : False

    • Opciones : middle, edges

      Por defecto : middle

    • Opciones: asap, alap Predeterminado: alap

    • Opciones: XX, XpXm, XY4 Predeterminado: XX

    • Opciones: True, False Predeterminado: False

  • environment Documentación de la API

    • Función invocable que recibe Job ID y Job result.

      Opciones : Ninguna

      Valor predeterminado : Ninguno

    • Lista de etiquetas.

      Opciones : Ninguna

      Valor predeterminado : Ninguno

    • Opciones : DEBUG, INFO, WARNING, ERROR, CRITICAL

      Por defecto : ADVERTENCIA

    • Opciones : True, False

      Por defecto : False

  • execution Documentación de la API

    • Si se deben restablecer los qubits al estado fundamental en cada disparo.

      Opciones : True, False

      Por defecto : True

    • El intervalo de tiempo entre una medición y el circuito cuántico posterior.

      Opciones : Valor dentro del rango proporcionado por backend.rep_delay_range

      Por defecto : lo establece backend.default_rep_delay

  • Limita la duración de un trabajo, en segundos. Consulte la guía sobre el tiempo máximo de ejecución para obtener más información.

    Opciones : número entero de segundos comprendido entre [1 y 10 800]

    Valor predeterminado : 10800 (3 horas)

  • Opciones avanzadas de resiliencia para ajustar con precisión la estrategia de resiliencia.

    resilience Documentación de la API

    • Opciones para el aprendizaje del ruido de capa.

      resilience.layer_noise_learning Documentación de la API

    • Opciones : [lista] de entre 2 y 10 valores comprendidos entre [0 y 200]

      Por defecto : (0, 1, 2, 4, 16, 32)

    • Opciones : Ninguna, número entero >= 1

      Por defecto : 4

    • Opciones : número entero >= 1

      Por defecto : 32

    • Opciones : número entero >= 1

      Por defecto : 128

    • Opciones : NoiseLearnerResult, Sequence[LayerError]

      Valor predeterminado : Ninguno

    • Opciones : True, False

      Por defecto : True

    • Opciones para el aprendizaje del ruido de medición.

      resilience.measure_noise_learning Documentación de la API

    • Opciones : número entero >= 1

      Por defecto : 32

    • Opciones : Entero, auto

      Por defecto : auto

    • Opciones : True, False

      Por defecto : False

    • Opciones de mitigación de la cancelación probabilística de errores.

      resilience.pec Documentación de la API

    • Opciones : None, número entero >= 1

      Por defecto : 100

    • Opciones : auto, número real comprendido entre [0 y 1]

      Por defecto : auto

    • Opciones : True, False

      Por defecto : False

    • Opciones : gate_folding, gate_folding_front, gate_folding_back, pea

      Por defecto : gate_folding

    • Opciones : Lista de flotadores

      Por defecto : [0, *noise_factors]

    • Opciones : Una o varias de las siguientes: exponential, linear, double_exponential, polynomial_degree_(1 <= k <= 7), fallback

      Por defecto : (exponential, linear)

    • Opciones : Lista de números flotantes; cada número flotante es mayor o igual a 1

      Por defecto : (1, 1.5, 2) para PEA, y (1, 3, 5) en los demás casos

  • ¿Qué grado de resiliencia hay que desarrollar frente a los errores? Los niveles más altos generan resultados más precisos, aunque a costa de tiempos de procesamiento más largos. Consulte la sección sobre niveles de resiliencia en el tema «Gestión del ruido» para obtener más información.

    Opciones : 0, 1, 2

    Por defecto : 1

    resilience_level Documentación de la API

  • Opciones : Número entero

    Valor predeterminado : Ninguno

    seed_estimator

  • Opciones que se deben pasar al simular un backend

    simulator Documentación de la API

    • Opciones : Lista de nombres de puertas básicas a las que se va a desarrollar

      Por defecto : el conjunto de todas las puertas básicas compatibles con el simulador Qiskit Aer

    • Opciones : Lista de interacciones dirigidas entre dos qubits

      Valor predeterminado : Ninguno, lo que implica que no hay restricciones de conectividad (conectividad total).

    • Opciones : Qiskit Aer NoiseModel o su representación

      Valor predeterminado : Ninguno

    • Opciones : Número entero

      Valor predeterminado : Ninguno

  • Opciones de giro

    twirling Documentación de la API

    • Opciones : Verdadero, Falso

      Valor predeterminado : False

    • Opciones : Verdadero, Falso

      Valor predeterminado : True

    • Opciones : auto, número entero >= 1

      Por defecto : auto

    • Opciones : auto, número entero >= 1

      Por defecto : auto

    • Opciones : active, active-circuit, active-accum, all

      Por defecto : active-accum

  • Opciones experimentales, cuando estén disponibles.


Compatibilidad de características

Algunas funciones de tiempo de ejecución no se pueden utilizar conjuntamente en un mismo trabajo. Haga clic en la pestaña correspondiente para ver una lista de las funciones que son incompatibles con la función seleccionada:

  • Incompatible con:

    • Giro de la puerta
    • PEA
    • Pec
  • Es posible que no funcione si se utilizan puertas personalizadas. Incompatible con:

    • PEA
    • Pec
  • Incompatible con:

    • Puertas fraccionarias
    • Estiramientos

    Otras observaciones:

    • La rotación de mediciones solo se puede aplicar a las mediciones de terminales.
    • No funciona con enredadores que no sean Clifford.
  • Incompatible con:

    • Puertas fraccionarias
    • ZNE con pliegue en forma de puerta
    • Pec
  • Incompatible con:

    • Puertas fraccionarias
    • ZNE con pliegue en forma de puerta
    • PEA

Próximos pasos

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