Skip to main content
IBM Quantum Platform

Funciones de coste

qiskit_addon_mpf.costs

Funciones de coste para los coeficientes MPF.

Este módulo proporciona una serie de funciones generadoras de problemas de optimización, cada una de las cuales implementa una función de coste diferente como objetivo del problema. Todas las funciones proporcionadas por este módulo toman como primer argumento un sistema lineal de ecuaciones (LSE) que codifica los parámetros del problema de optimización como primer argumento.

LSE

class LSE(A, b)

GitHub

Bases: NamedTuple

Un namedtuple que representa un sistema lineal de ecuaciones.

Ax=bA x = b

Crear nueva instancia de LSE(A, b)

Parámetros

A

Tipo: ndarray

La parte izquierda de la LSE.

b

Tipo: ndarray

La parte derecha de la LSE.

count

count(value, /)

Devuelve el número de apariciones del valor.

index

index(value, start=0, stop=9223372036854775807, /)

Devuelve el primer índice del valor.

Lanza ValueError si el valor no está presente.

solve

solve()

GitHub

Devuelve la solución a esta LSE: x=A1bx=A^{-1}b.

Devuelve

La solución a este LSE.

Eleva

  • ValueError - si este LSE está parametrizado con valores no asignados.
  • ValueError - si este LSE no incluye una fila que garantice que ixi==1\sum_i x_i == 1 que es un requisito para los coeficientes MPF válidos.

Tipo de retorno

ndarray

x

Tipo: Variable

Devuelve el $x$ Variable.


Constructores de problemas de optimización

setup_exact_problem

setup_exact_problem(lse)

GitHub

Construya un cvxpy.Problem para encontrar los coeficientes MPF exactos.

Nota

Los coeficientes hallados mediante este problema de optimización serán idénticos a los analíticos obtenidos con el LSE.solve() método. Esta interfaz adicional existe para resaltar el paralelismo con las demás funciones de coste que ofrece este módulo. También tiene fines didácticos sobre cómo enfocar los problemas de optimización centrados en los coeficientes MPF.

El problema de optimización construido por esta función se define como sigue:

  • la función de coste minimiza la L1-norm (norm1) de las variables (LSE.x)

  • las restricciones corresponden a cada ecuación del LSE:

jAijxj=bi\sum_j A_{ij} x_j = b_i

A continuación se muestra un ejemplo:

>>> from qiskit_addon_mpf.costs import setup_exact_problem
>>> from qiskit_addon_mpf.static import setup_static_lse
>>> lse = setup_static_lse([1,2,3], order=2, symmetric=True)
>>> problem, coeffs = setup_exact_problem(lse)
>>> print(problem)
minimize norm1(x)
subject to Sum([1. 1. 1.] @ x, None, False) == 1.0
           Sum([1. 0.25   0.11111111] @ x, None, False) == 0.0
           Sum([1. 0.0625 0.01234568] @ x, None, False) == 0.0

A continuación, puedes resolver el problema y acceder a los coeficientes de expansión de la siguiente manera:

>>> final_cost = problem.solve()
>>> print(coeffs.value)  
[ 0.04166667 -1.06666667  2.025     ]

Parámetros

lse (LSE) – el sistema lineal de ecuaciones a partir del cual construir el modelo.

Devuelve

El problema de optimización y la variable coeficientes.

Tipo de retorno

tupla [*Problema*, Variable ]

Referencias

[1] : A. Carrera Vazquez et al., Quantum 7, 1067 (2023).

https://quantum-journal.org/papers/q-2023-07-25-1067/

setup_sum_of_squares_problem

setup_sum_of_squares_problem(lse, *, max_l1_norm=10.0)

GitHub

Construir un cvxpy.Problem para encontrar coeficientes MPF aproximados.

El problema de optimización construido por esta función se define como sigue:

  • la función de coste minimiza la suma de cuadrados (sum_squares()) de las distancias a una solución exacta para todas las ecuaciones del LSE:
i(jAijxjbi)2\sum_i \left( \sum_j A_{ij} x_j - b_i \right)^2
  • se establecen dos restricciones:

    1. las variables deben sumar 1: ixi==1\sum_i x_i == 1
    2. el L1-norm (norm1) de las variables está limitada por max_l1_norm

A continuación se muestra un ejemplo:

>>> from qiskit_addon_mpf.costs import setup_sum_of_squares_problem
>>> from qiskit_addon_mpf.static import setup_static_lse
>>> lse = setup_static_lse([1,2,3], order=2, symmetric=True)
>>> problem, coeffs = setup_sum_of_squares_problem(lse, max_l1_norm=3.0)
>>> print(problem)  
minimize quad_over_lin(Vstack([1. 1.     1.]         @ x + -1.0,
                              [1. 0.25   0.11111111] @ x + -0.0,
                              [1. 0.0625 0.01234568] @ x + -0.0), 1.0)
subject to Sum(x, None, False) == 1.0
           norm1(x) <= 3.0

A continuación, puedes resolver el problema y acceder a los coeficientes de expansión de la siguiente manera:

>>> final_cost = problem.solve()
>>> print(coeffs.value)  
[ 0.03513467 -1.          1.96486533]

Parámetros

  • lse (LSE) – el sistema lineal de ecuaciones a partir del cual construir el modelo.
  • max_l1_norm (float) – el límite superior a utilizar para la restricción de la L1-norm de las variables.

Devuelve

El problema de optimización y la variable coeficientes.

Tipo de retorno

tupla [*Problema*, Variable ]

Referencias

[1] : S. Zhuk et al., Física. Rev. Research 6, 033309 (2024).

https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.6.033309

setup_frobenius_problem

setup_frobenius_problem(lse, *, max_l1_norm=10.0)

GitHub

Construir un cvxpy.Problem para encontrar coeficientes MPF aproximados.

El problema de optimización construido por esta función se define como sigue:

  • la función de coste minimiza la siguiente expresión cuadrática:
1+xTAx2xTb1 + x^T A x - 2 x^T b

Como se muestra en [1] y [2], esta expresión surge de la norma de Frobenius del error entre un estado de evolución temporal exacto y un MPF dinámico. Como tal, tomando la LSE construida por setup_dynamic_lse() e introduciéndola en esta función se obtiene la Ec. (20) de [1] (que es idéntica a la Ec. (2) de [2] ), que repetimos a continuación

1+i,jAij(t)xi(t)xj(t)2ibi(t)xi(t),1 + \sum_{i,j} A_{ij}(t) x_i(t) x_j(t) - 2 \sum_i b_i(t) x_i(t) \, ,

donde $A$ y $b$ de nuestros LSE corresponden a la matriz de Gram ($M$ en [1] y [2] ) y al vector de superposición ($L$ en [1] y [2] ), respectivamente. Además, utilizamos $x(t)$ para denotar las variables MPF (o coeficientes) en lugar de $c$ en [1] y [2].

  • se establecen dos restricciones:

    1. las variables deben sumar 1: ixi==1\sum_i x_i == 1
    2. el L1-norm (norm1) de las variables está limitada por max_l1_norm

A continuación se muestra un ejemplo que utiliza el objeto lse construido en el ejemplo de setup_dynamic_lse().

>>> from qiskit_addon_mpf.costs import setup_frobenius_problem
>>> problem, coeffs = setup_frobenius_problem(lse, max_l1_norm=3.0)
>>> print(problem)  
minimize 1.0 + QuadForm(x, [[1.00 1.00]
                            [1.00 1.00]]) + -[2.00003171 1.99997911] @ x
subject to Sum(x, None, False) == 1.0
           norm1(x) <= 3.0

A continuación, puedes resolver el problema y acceder a los coeficientes de expansión de la siguiente manera:

>>> final_cost = problem.solve()
>>> print(coeffs.value)  
[0.50596416 0.49403584]

Parámetros

  • lse (LSE) – el sistema lineal de ecuaciones a partir del cual construir el modelo.
  • max_l1_norm (float) – el límite superior a utilizar para la restricción de la L1-norm de las variables.

Devuelve

El problema de optimización y la variable coeficientes.

Tipo de retorno

tupla [*Problema*, Variable ]

Referencias

[1] : S. Zhuk et al., Física. Rev. Research 6, 033309 (2024).

https://journals.aps.org/prresearch/abstract/10.1103/PhysRevResearch.6.033309

[2] : N. Robertson et al., arXiv:2407.17405v2 (2024).

https://arxiv.org/abs/2407.17405v2

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