Skip to main content
IBM Quantum Platform

Referencia de la API de Kipu Quantum Iskay Quantum Optimizer

  • Qiskit Functions

    Qiskit Functions — Herramientas preconfiguradas creadas por organizaciones asociadas — que 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.


Entradas

problem

Tipo: Dict[str, float]

Los coeficientes del problema de optimización formulado como QUBO/HUBO o en formato de espín. Para obtener más información sobre la descripción del problema, consulta «Formatos de problemas aceptados ».

  • Obligatorio: Sí
  • Ejemplo:{"()": -21.0, "(0, 4)": 0.5,"(0, 2)": 0.5,"(0, 1)": 0.5,"(1, 3)": 0.5}

problem_type

Tipo: str

Especifica si los coeficientes del problema están en formato binario (QUBO/HUBO) o en formato de espín. Las dos posibilidades son "spin" o "binary". Para obtener más información sobre la descripción del problema, consulta «Formatos de problemas aceptados ».

  • Obligatorio: Sí
  • Ejemplo:"spin"

backend_name

Tipo: str

Nombre del backend al que se va a realizar la consulta

  • Obligatorio: Sí
  • Ejemplo:"ibm_fez"

Opciones

Tipo: Dict[str, Any]

Opciones para gestionar la configuración del hardware, como el número de disparos. Las opciones de esta función se especifican como un diccionario anidado. Consulte la lista completa de opciones y sus valores predeterminados.

  • Requisito: No
  • Ejemplo:{"shots": 5000, "num_iterations": 3, "use_session": True, "seed_transpiler": 42}
Formatos de problemas admitidos

Los argumentos problem problem_type y codifican un problema de optimización de la forma

min(x1,x2,,xn)DC(x1,x2,,xn)\begin{align} \min_{(x_1, x_2, \ldots, x_n) \in D} C(x_1, x_2, \ldots, x_n) \nonumber \end{align}

donde

C(x1,...,xn)=a+ibixi+i,jci,jxixj+...+k1,...,kmgk1,...,kmxk1...xkmC(x_1, ... , x_n) = a + \sum_{i} b_i x_i + \sum_{i, j} c_{i, j} x_i x_j + ... + \sum_{k_1, ..., k_m} g_{k_1, ..., k_m} x_{k_1} ... x_{k_m}
  • Al seleccionar problem_type = "binary", se especifica que la función de coste está en binary formato, lo que significa que D={0,1}nD = \{0, 1\}^{n}, es decir, que la función de coste está escrita en formulación QUBO/HUBO.
  • Por otro lado, al elegir problem_type = "spin", la función de coste se expresa en la formulación de Ising, donde D={1,1}nD = \{-1, 1\}^{n}.

Los coeficientes del problema deben codificarse en un diccionario de la siguiente manera:

{"()":a,"(i,)":bi,"(i, j)":ci,j,"(k1,...,km)":gk1,...,km,}\begin{align} \nonumber &\texttt{\{} \\ \nonumber &\texttt{"()"}&: \quad &a, \\ \nonumber &\texttt{"(i,)"}&: \quad &b_i, \\ \nonumber &\texttt{"(i, j)"}&: \quad &c_{i, j}, \\ \nonumber &\quad \vdots \\ \nonumber &\texttt{"(} k_1, ..., k_m \texttt{)"} &: \quad &g_{k_1, ..., k_m}, \\ \nonumber &\texttt{\}} \end{align}
  • Ten en cuenta que las claves del diccionario deben ser cadenas que contengan una tupla válida de números enteros no repetidos.

Lista de opciones

Iskay ofrece funciones de ajuste fino mediante parámetros opcionales. Aunque los valores predeterminados funcionan bien para la mayoría de los casos, puedes personalizar el comportamiento según tus necesidades específicas:

shots

Tipo: `int`

Valor predeterminado: 10000

Medidas cuánticas por iteración (cuanto mayor sea el valor, mayor será la precisión)

num_iterations

Tipo: `int`

Valor predeterminado: 10

Iteraciones del algoritmo (un mayor número de iteraciones puede mejorar la calidad de la solución)

use_session

Tipo: `bool`

Valor predeterminado: True

Utiliza las sesiones de « IBM » para reducir los tiempos de espera

seed_transpiler

Tipo: `int`

Valor predeterminado: None

Conjunto para la compilación de circuitos cuánticos reproducibles.

Optimización de semillas : Ten en cuenta que seed_transpiler está configurado en None de forma predeterminada. Esto permite que se active el proceso de optimización automática del transpilador. En ese caso None, el sistema iniciará una prueba con varias semillas y seleccionará la que produzca la mejor profundidad de circuito, aprovechando al máximo el potencial del max_trials parámetro en cada nivel de transpilación.

direct_qubit_mapping

Tipo: `bool`

Valor predeterminado: False

Asignar qubits virtuales directamente a num_qubits físicos

job_tags

Tipo: `List[str]`

Valor predeterminado: None

Etiquetas personalizadas para el seguimiento de tareas

preprocessing_level

Tipo: `int`

Valor predeterminado: 0

Intensidad del preprocesamiento del problema (0-3).

Niveles de preprocesamiento (0-3) : Especialmente importantes para problemas de gran envergadura que, en la actualidad, no caben en los tiempos de coherencia del hardware. Los niveles de preprocesamiento más altos permiten obtener circuitos de menor profundidad mediante aproximaciones en la transpilación del problema:

  • Nivel 0 : Circuitos exactos y más largos
  • Nivel 1 : Buen equilibrio entre precisión y aproximación, descartando únicamente las puertas cuyos ángulos se sitúan en el décimo percentil más bajo
  • Nivel 2 : Aproximación ligeramente más precisa, descartando las puertas con ángulos que se sitúan en el percentil 20 más bajo y utilizando approximation_degree=0.95 en la transpilación
  • Nivel 3 : Nivel máximo de aproximación, eliminando las puertas del percentil 30 más bajo y utilizando approximation_degree=0.90 en la transpilación
postprocessing_level

Tipo: `int`

Valor predeterminado: 2

Nivel de refinamiento de la solución (0-2).

Niveles de posprocesamiento (0-2) : controla el grado de optimización clásica, compensando los errores de inversión de bits mediante un número variable de pasadas «greedy» de búsqueda local:

  • Nivel 0 : 1 pase
  • Nivel 1 : 2 aprobados
  • Nivel 2 : 3 pases
transpilation_level

Tipo: `int`

Valor predeterminado: 0

Pruebas de optimización del transpilador (0-5).

Niveles de transpilación (0-5) : controlan los ajustes avanzados de optimización del transpilador para la compilación de circuitos cuánticos. Esto puede provocar un aumento de la sobrecarga clásica y, en algunos casos, es posible que no altere la profundidad del circuito. El valor 2 predeterminado suele dar lugar al circuito más pequeño y es relativamente rápido.

  • Nivel 0 : Optimización del circuito DCQO descompuesto (diseño, trazado, programación)
  • Nivel 1 : Optimización de PauliEvolutionGate y, a continuación, del circuito DCQO descompuesto ( max_trials=10 )
  • Nivel 2 : Optimización de PauliEvolutionGate y, a continuación, del circuito DCQO descompuesto ( max_trials=15 )
  • Nivel 3 : Optimización de PauliEvolutionGate y, a continuación, del circuito DCQO descompuesto ( max_trials=20 )
  • Nivel 4 : Optimización de PauliEvolutionGate y, a continuación, del circuito DCQO descompuesto ( max_trials=25 )
  • Nivel 5 : Optimización de PauliEvolutionGate y, a continuación, del circuito DCQO descompuesto ( max_trials=50 )
transpile_only

Tipo: `bool`

Valor predeterminado: False

Disponible para los usuarios que deseen analizar la optimización de circuitos sin ejecutar el algoritmo cuántico completo. Resulta útil para el análisis de circuitos, los estudios de optimización de profundidad y para comprender los efectos de la transpilación antes de pasar a la ejecución completa.

Rendimiento a nivel de transpilación

Aumentar el número de max_trials con valores más altos para transpilation_level incrementará inevitablemente el tiempo de transpilación, pero es posible que no siempre modifique el circuito final; esto depende en gran medida de la estructura y la complejidad específicas del circuito. Sin embargo, en algunos circuitos o problemas, la diferencia entre 10 intentos (nivel 1) y 50 intentos (nivel 5) puede ser considerable, por lo que explorar estos parámetros podría ser la clave para encontrar una solución con éxito.


Resultado

Tipo: `Dict[str, Any]`

Solución y metadatos. La estructura varía en función de transpile_only la opción.

Diccionario de resultados

La estructura del diccionario de resultados depende del modo de ejecución:

solution

Tipo: `Dict[str, int]`

La solución ordenada en forma de tabla, en la que las claves son índices de variables (en forma de cadenas) ordenados numéricamente y los valores son los valores correspondientes de las variables (1/-1 para problemas de espín, 1/0 para problemas binarios).

  • Modo: Estándar
  • Ejemplo:{'0': -1, '1': -1, '2': -1, '3': 1, '4': 1}

solution_info

Tipo: `Dict[str, Any]`

Información detallada sobre la solución.

  • Modo: Estándar
  • Ejemplo:{'bitstring': '11100', 'cost': -13.8, 'seed_transpiler': 42, 'mapping': {0: 0, 1: 1, 2: 2, 3: 3, 4: 4}}
  • Ejecución estándar : cuando el parámetro opcional transpile_only=False; véase el diccionario que figura a continuación.
bitstring

Tipo: `str`

La representación en forma de cadena de bits sin procesar de la solución.

cost

Tipo: `float`

La relación coste-eficiencia de la solución.

seed_transpiler

Tipo: `int`

La semilla aleatoria utilizada por el transpilador que generó este resultado.

mapping

Tipo: `Dict[int, int]`

La correspondencia original entre qubits y variables utilizada en el cálculo.

qpu_time

Tipo: `float`, optional

El tiempo de ejecución de la QPU en segundos.

Notas sobre la asignación de variables
  • El solution diccionario se obtiene a partir de la cadena de bits de la solución, utilizando el mapping objeto para indexar las variables.
  • Cuando problem_type=spin utilizamos la asignación « 11,011 \rightarrow -1, \quad 0 \rightarrow 1 ».
  • Las claves del diccionario de soluciones son índices de variables ordenados numéricamente como cadenas de caracteres.

prob_type

Tipo: `str`

El tipo de problema de optimización (spin o binary)

  • Modo: Estándar
  • Ejemplo:'spin'

transpilation_info

Tipo: `Dict[str, Any]`

Análisis del circuito y detalles de la transpilación.

  • Modo: Solo compilación
  • Ejemplo:{'best_seed': 42, 'transpilation_time_seconds': 50.06, 'transpiled_circuit': {'depth': 576, 'gate_count': 4177, 'num_qubits': 156, 'width': 176, 'operations': {'sx': 1325, 'rx': 891, 'cz': 783, 'rz': 650, 'rzz': 466, 'x': 42, 'measure': 20}}}
  • Análisis de transpilación : cuando se utiliza el parámetro opcional transpile_only=True, consulte el diccionario que figura a continuación:
best_seed

Tipo: `int`

La semilla óptima encontrada para la trasplantación.

transpilation_time_seconds

Tipo: `float`

Tiempo empleado en el proceso de transpilación.

transpiled_circuit

Tipo: `Dict`

Análisis de circuitos que incluye lo siguiente:

  • depth

Tipo: `int`

Profundidad del circuito (número de capas)

  • gate_count

Tipo: `int`

Número total de puertas del circuito.

  • num_qubits

Tipo: `int`

Número de qubits utilizados.

  • width

Tipo: `int`

Ancho del circuito.

  • operations

Tipo: `Dict[str, int]`

Recuento de cada tipo de puerta utilizada.

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