Referencia de la API del optimizador cuántico con restricciones de Aqarios
Qiskit Functions — Las herramientas preconfiguradas creadas por organizaciones colaboradoras — abstraen partes del flujo de trabajo de desarrollo de software para simplificar y acelerar el descubrimiento de algoritmos y el desarrollo de aplicaciones a escala industrial. Haz clic aquí para ver la guía de esta función de Qiskit.
Guía del optimizador cuántico con restricciones Aqarios
El optimizador cuántico con restricciones de Aqarios resuelve problemas de optimización binaria con restricciones en hardware de IBM Quantum®. Acepta problemas en formato LP, MPS o Luna Model y gestiona internamente toda la reformulación, la síntesis de circuitos, la transpilación y el inicio en caliente iterativo mediante el uso de QAOA de ángulo fijo con mezcladores XY.
La función se carga y se invoca de la siguiente manera:
optimizer = catalog.load("aqarios/constrained-quantum-optimizer")
job = optimizer.run(model=lp_str, backend_name="ibm_phoenix")
result = job.result()El optimizador cuántico con restricciones de Aqarios solo está disponible para los usuarios de « IBM Quantum® Premium Plan », «Flex Plan» y « On-Prem Plan ». Se encuentra en fase de versión preliminar y está sujeto a cambios.
Entradas
Consulta la siguiente lista para ver todos los parámetros de entrada que admite esta API. Los parámetros obligatorios deben indicarse en cada llamada; el resto son opcionales.
model
Tipo: str
El modelo de optimización serializado que hay que resolver. Se admiten tres formatos:
- LP (
*.lp): Formato de archivo LP estándar exportado como una cadena de caracteres, por ejemplo, a través de DOcplex'sexport_as_lp_string() - MPS (
*.mps): Formato de archivo MPS estándar exportado como una cadena de caracteres, por ejemplo, a través de DOcplex'sexport_as_mps_string() - Modelo Luna : serialización de un objeto « Base64-encoded » del modelo Aqarios Luna, obtenido mediante
model.encode_b64()
El modelo debe representar un problema de optimización binaria, ya sea de maximización o de minimización. Las restricciones pueden ser desigualdades o igualdades sobre variables binarias. Las variables enteras solo se admiten cuando se especifican límites superior e inferior claros. El objetivo y las restricciones pueden ser de orden superior y no tienen por qué ser necesariamente lineales.
- Obligatorio: Sí
- Ejemplo de LP:
\Problem name: MIS
Minimize
obj: ...
Subject To
c1: ...
...
Binaries
x_0 x_1
End
backend_name
Tipo: str or None
Valor predeterminado: None
El nombre del backend de IBM Quantum en el que se va a ejecutar (por ejemplo "ibm_phoenix"). Cuando se configura en None, la función selecciona automáticamente el dispositivo disponible menos ocupado.
- Obligatorio: No
- Ejemplo:
"ibm_phoenix"
options
Tipo: dict or None
Valor predeterminado: None
Opciones de configuración del algoritmo que controlan el comportamiento del QAOA iterativo con arranque en caliente. Las opciones se especifican en forma de diccionario. Consulta la lista de opciones que figura a continuación para ver todas las claves disponibles y sus valores predeterminados.
- Obligatorio: No
- Ejemplo:
{"reps": 2, "num_parallel": 10, "postprocessing": "weak"}
Lista de opciones
reps
Tipo: int
Valor predeterminado: 1
Número de repeticiones de la capa QAOA (parámetro de profundidad del circuito ). Los valores más altos aumentan la calidad de la solución a costa de circuitos más profundos y un tiempo de ejecución más largo, lo que puede generar más ruido.
- Opciones: Número entero dentro de un intervalo
[1, 10]
num_parallel
Tipo: int
Valor predeterminado: 5
Número de cadenas independientes de arranque en caliente que se ejecutan en paralelo. Al aumentar este valor, mejora la probabilidad de encontrar soluciones de alta calidad, pero también aumenta el presupuesto total de intentos consumido.
- Opciones: Número entero dentro de un intervalo
[1, 100]
shots
Tipo: int
Valor predeterminado: 500
Número de mediciones por iteración y por cadena.
- Opciones: Número entero dentro de un intervalo
[1, 10000]
total_shots
Tipo: int
Valor predeterminado: 5000
Presupuesto total de tomas en todas las iteraciones para una sola cadena de «warm-start». El bucle de iteración de una cadena finaliza una vez que se agota este presupuesto.
- Opciones: Número entero dentro de un intervalo
[1, 1000000]
epsilon
Tipo: float
Valor predeterminado: 0.1
Parámetro de regularización para las probabilidades de arranque en caliente. Evita que la distribución de probabilidad se reduzca a un estado determinista, lo que permite mantener la exploración a lo largo de las iteraciones.
- Opciones: Flotante dentro del rango
(0.01, 1)
beta
Tipo: float
Valor predeterminado: 10
Temperatura inversa para la ponderación de Boltzmann utilizada para derivar nuevos estados de arranque en caliente a partir de muestras de medición. Los valores más altos concentran la masa de probabilidad en las muestras de menor energía.
- Opciones: Flotar satisfactoriamente
beta > 0
approximation_degree
Tipo: float
Valor predeterminado: 1.0
Controla el nivel de aproximación aplicado a la función de coste y durante la transpilación. Los valores más bajos reducen la profundidad del circuito al introducir aproximaciones, lo que puede afectar a la calidad de la solución.
- Opciones: Flotante dentro del rango
[0.0, 1.0]
postprocessing
Tipo: str
Valor predeterminado: "strong"
Estrategia clásica de posprocesamiento aplicada tras cada paso de muestreo para mejorar la calidad de la solución. Los niveles más altos aplican una búsqueda local más agresiva a costa de un mayor tiempo de cálculo clásico.
- Opciones:
"off"/"weak"/"medium"/"strong""off": Desactivar el posprocesamiento."weak": Búsqueda local de una sola pasada. Intenta invertir cada bit una vez en orden aleatorio y mantén las inversiones que reduzcan la energía."medium": Búsqueda local en tres pasadas. Aplica la estrategia débil tres veces con diferentes órdenes aleatorias."strong": Búsqueda local «glotona». Aplica repetidamente el cambio de bits que más reduzca el consumo de energía hasta que ya no sea posible mejorar más.
penalty_override
Tipo: float or None
Valor predeterminado: None
Anula manualmente el valor de penalización utilizado al convertir las restricciones en términos de penalización que se añaden al objetivo. Por defecto, la penalización se calcula automáticamente a partir de la estructura del problema. Utiliza esta opción únicamente si el valor automático da lugar a resultados inviables.
- Opciones: Introducir un valor flotante válido
penalty_override > 0oNoneutilizar el valor automático
use_session
Tipo: bool
Valor predeterminado: False
Si se debe utilizar el modo de sesión de « IBM Quantum Compute Service» para la ejecución de tareas. La activación de sesiones reduce la sobrecarga de ejecución del circuito al mantener abierta una conexión dedicada con la QPU a lo largo de las iteraciones, lo que puede reducir el tiempo total de reloj.
- Opciones:
True/False
Resultados
El resultado de esta API es un diccionario devuelto por job.result(), que contiene las mejores soluciones encontradas y los metadatos asociados.
Tipo: dict[str, Any]
Diccionario de resultados con las asignaciones de soluciones, el valor objetivo, el estado de viabilidad y los metadatos de ejecución.
- Ejemplo:
{"solutions": [{"x_0": 1, "x_1": 0}], "obj_value": 42.0, "feasible": True, "metadata": {...}}
Estructura de salida
solutions
Tipo: list[dict[str, int]]
Una lista de las mejores soluciones encontradas. Cada entrada es un diccionario que asocia nombres de variables (por ejemplo, "x_0") a sus asignaciones binarias (0 o 1). La lista solo contiene más de una entrada cuando se han identificado varios óptimos degenerados.
- Ejemplo:
[{"x_0": 1, "x_1": 0, "x_2": 1}]
obj_value
Tipo: float
El valor objetivo de la mejor solución encontrada, expresado en términos del problema original. En los problemas de maximización, este valor es mayor cuanto mejores son las soluciones; en los problemas de minimización, es menor.
- Ejemplo:
42.0
raw_energy
Tipo: float
La energía QAOA bruta de la mejor solución, expresada siempre como un valor de minimización. Esto incluye cualquier término de penalización añadido durante la reformulación del problema y resulta útil para diagnosticar incumplimientos de restricciones.
- Ejemplo:
-38.5
feasible
Tipo: bool
Si las soluciones obtenidas cumplen todas las restricciones del modelo de entrada original. Un resultado puede resultar inviable si los valores de penalización son insuficientes para garantizar el cumplimiento de todas las restricciones en el hardware.
- Ejemplo:
True
metadata
resource_usage
Tipo: dict
Consumo de recursos cuánticos y clásicos desglosado por fase del algoritmo (mapeo, optimización del hardware, ejecución en la QPU y posprocesamiento).
- Ejemplo:
{'RUNNING: MAPPING': {'CPU': 4.57},
'RUNNING: OPTIMIZING_FOR_HARDWARE': {'CPU': 0.177},
'RUNNING: WAITING_FOR_QPU': {'CPU': 9.238},
'RUNNING: EXECUTING_QPU': {'QPU': 30},
'RUNNING: POST_PROCESSING': {'CPU': 0.093}}circuit_metrics
Tipo: dict
Número medio de puertas y profundidad media de los circuitos en todos los circuitos enviados al dispositivo durante la ejecución de la optimización.
- Ejemplo:
{"depth": 48, "gate_count": 312, "num_qubits": 20}
Manejo de errores
Código | Descripción |
|---|---|
4710 | El modelo de entrada no es compatible. El modelo contiene variables enteras o continuas sin límites. |
4711 | La cadena de entrada no se puede analizar para convertirla en un modelo. Comprueba que la entrada sea una cadena válida del tipo LP, MPS o Luna Model. |
4712 | El modelo se resolvió de forma óptima durante el preprocesamiento y no se realizó ningún cálculo cuántico. El resultado sigue apareciendo. |
4719 | Error inesperado en una función interna. Escribe a [email protected] indicando tu número de referencia de la oferta. |
- Formato de modelo no válido : si la cadena
modelno se puede analizar como un modelo LP, MPS o Luna válido, la tarea falla con el código de error4711. - Errores de validación de opciones : Si las claves o los valores de las opciones se encuentran fuera de los rangos documentados, el trabajo fallará inmediatamente con el código de error
1221.