Saltar al contenido principal
Este proyecto está en fase beta. ¿Encontraste un error? Abre un issue en GitHub. ¿Tienes una pregunta o una idea? Pregunta en Discussions — ¡nos encantaría tu opinión!
¿Cómo es la calidad de la traducción en esta página?

Introducción a las opciones

Puedes usar opciones para personalizar las primitivas de IBM Quantum según tus necesidades.

Estructura​

Al llamar a las primitivas, puedes pasar opciones usando una clase de opciones o un diccionario. Las opciones de uso común, como resilience_level, se encuentran en el primer nivel. Otras opciones se agrupan en categorías, como execution. Especifica las opciones en este formato: options.option.sub-option.sub-sub-option = choice. Por ejemplo: options.dynamical_decoupling.enable = True.

Valores predeterminados​

Si no especificas un valor para una opción, se le asigna el valor especial Unset y se utilizan los valores predeterminados del servidor. Por lo tanto, el valor predeterminado será el mismo independientemente de la versión de tu código.

Las tablas de la sección "Resumen de clases de opciones" en la guía de "opciones" de cada primitiva listan los valores predeterminados.

Establecer opciones​

Las opciones pueden definirse antes de construir una primitiva y pasarse a ella como una instancia de la clase de opciones o un diccionario. La primitiva hace una copia de ellas, lo que significa que modificar el diccionario u la instancia de opciones original no afecta a las opciones que posee la primitiva.

Además, puedes cambiar las opciones después de construir la primitiva. Usa el flujo de trabajo que mejor se adapte a tu aplicación.

Notas sobre la especificación de opciones de primitivas
  • Puedes ver las opciones disponibles durante o después de la inicialización de la primitiva.
  • Si no especificas un valor para una opción, se le asigna el valor especial Unset y se usan los valores predeterminados del servidor.
  • El atributo options es del tipo Python dataclass. Puedes usar el método integrado asdict para convertirlo en un diccionario.

Clase options​

Al crear una instancia de la clase primitiva, puedes pasar una instancia de la clase options. Esas opciones se aplican cuando usas run() para realizar el cálculo. Especifica las opciones en este formato: options.option.sub-option.sub-sub-option = choice. Por ejemplo: options.dynamical_decoupling.enable = True.

Consulta SamplerOptions o EstimatorOptions para ver todos los detalles de la clase.

El siguiente ejemplo usa la primitiva Estimator, pero la sintaxis para otras primitivas es similar.

from qiskit_ibm_runtime import QiskitRuntimeService

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator
# from qiskit_ibm_runtime.options import EstimatorOptions

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import Estimator
from qiskit_ibm_runtime.options_models 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 opciones como un diccionario al inicializar una primitiva.

El siguiente ejemplo usa la primitiva Estimator, pero la sintaxis para otras primitivas es similar.

from qiskit_ibm_runtime import QiskitRuntimeService

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import 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]},
},
},
)

Actualizar opciones después de la inicialización​

Puedes especificar las opciones en este formato: _primitive_.options.option.sub-option.sub-sub-option = choice para aprovechar el autocompletado, o usar el método update() para realizar actualizaciones en bloque.

No es necesario instanciar la clase de opciones de la primitiva (EstimatorOptions o SamplerOptions) si estás estableciendo opciones después de inicializar la primitiva.

El siguiente ejemplo usa la primitiva Estimator, pero la sintaxis para otras primitivas es similar.

from qiskit_ibm_runtime import QiskitRuntimeService

# Legacy server-side primitive before qiskit-ibm-runtime 0.50.0
# from qiskit_ibm_runtime import Estimator

# Client-side primitive introduced in qiskit-ibm-runtime 0.50.0
from qiskit_ibm_runtime.executor_estimator import 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}
)

Próximos pasos​

Recomendaciones