Skip to main content
IBM Quantum Platform

Funções de custo

qiskit_addon_mpf.costs

Funções de custo para coeficientes MPF.

Esse módulo fornece várias funções geradoras de problemas de otimização, cada uma implementando uma função de custo diferente como objetivo-alvo do problema. Todas as funções fornecidas por esse módulo usam um sistema linear de equações (LSE) que codifica os parâmetros do problema de otimização como seu primeiro argumento.

LSE

class LSE(A, b)

GitHub

Bases: NamedTuple

Um namedtuple que representa um sistema linear de equações.

Ax=bA x = b

Criar uma nova instância de LSE(A, b)

Parâmetros

A

Tipo: ndarray

O lado esquerdo do LSE.

b

Tipo: ndarray

O lado direito do LSE.

count

count(value, /)

Retorna o número de ocorrências do valor.

index

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

Retorna o primeiro índice do valor.

Aumenta o endereço ValueError se o valor não estiver presente.

solve

solve()

GitHub

Retorne a solução para esse LSE: x=A1bx=A^{-1}b.

Retorna

A solução para esse LSE.

Aumentos

  • ValueError - se esse LSE for parametrizado com valores não atribuídos.
  • ValueError - se esse LSE não incluir uma linha que garanta esse ixi==1\sum_i x_i == 1, que é um requisito para coeficientes MPF válidos.

Tipo de retorno

ndarray

x

Tipo: Variable

Retorna o $x$ Variable.


Construtores de problemas de otimização

setup_exact_problem

setup_exact_problem(lse)

GitHub

Construa um cvxpy.Problem para encontrar os coeficientes exatos do MPF.

Nota

Os coeficientes encontrados por meio desse problema de otimização serão idênticos aos analíticos obtidos com o método LSE.solve() método. Essa interface adicional existe para destacar o paralelo com as outras funções de custo fornecidas por esse módulo. Ele também serve para fins didáticos sobre como abordar problemas de otimização que visam os coeficientes do MPF.

O problema de otimização construído por essa função é definido da seguinte forma:

  • a função de custo minimiza o L1-norm (norm1) das variáveis (LSE.x)

  • as restrições correspondem a cada equação do LSE:

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

Aqui está um exemplo:

>>> 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

Em seguida, você pode resolver o problema e acessar os coeficientes de expansão da seguinte forma:

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

Parâmetros

lse (LSE) – o sistema linear de equações a partir do qual se constrói o modelo.

Retorna

O problema de otimização e os coeficientes variáveis.

Tipo de retorno

tupla [*Problema*, Variável ]

Referências

[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

Construa um cvxpy.Problem para encontrar coeficientes MPF aproximados.

O problema de otimização construído por essa função é definido da seguinte forma:

  • a função de custo minimiza a soma dos quadrados (sum_squares()) das distâncias até uma solução exata para todas as equações do modelo LSE:
i(jAijxjbi)2\sum_i \left( \sum_j A_{ij} x_j - b_i \right)^2
  • duas restrições são definidas:

    1. as variáveis devem somar 1: ixi==1\sum_i x_i == 1
    2. o L1-norm (norm1) das variáveis é limitado por max_l1_norm

Aqui está um exemplo:

>>> 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

Em seguida, você pode resolver o problema e acessar os coeficientes de expansão da seguinte forma:

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

Parâmetros

  • lse (LSE) – o sistema linear de equações a partir do qual se constrói o modelo.
  • max_l1_norm (float) – o limite superior a ser usado para a restrição do L1-norm das variáveis.

Retorna

O problema de otimização e os coeficientes variáveis.

Tipo de retorno

tupla [*Problema*, Variável ]

Referências

[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

Construa um cvxpy.Problem para encontrar coeficientes MPF aproximados.

O problema de otimização construído por essa função é definido da seguinte forma:

  • a função de custo minimiza a seguinte expressão quadrática:
1+xTAx2xTb1 + x^T A x - 2 x^T b

Conforme mostrado em [1] e [2], essa expressão decorre da norma de Frobenius do erro entre um estado de evolução de tempo exato e um MPF dinâmico. Dessa forma, ao considerar o LSE construído por setup_dynamic_lse() e inserindo-o nessa função, obtém-se a Eq. (20) de [1] (que é idêntica à Eq. (2) de [2] ), que repetimos a seguir

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) \, ,

em que $A$ e $b$ do nosso LSE correspondem à matriz Gram ($M$ em [1] e [2] ) e ao vetor de sobreposição ($L$ em [1] e [2] ), respectivamente. Além disso, usamos $x(t)$ para denotar as variáveis (ou coeficientes) do MPF em vez de $c$ em [1] e [2].

  • duas restrições são definidas:

    1. as variáveis devem somar 1: ixi==1\sum_i x_i == 1
    2. o L1-norm (norm1) das variáveis é limitado por max_l1_norm

Abaixo está um exemplo que usa o objeto lse construído no exemplo para 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

Em seguida, você pode resolver o problema e acessar os coeficientes de expansão da seguinte forma:

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

Parâmetros

  • lse (LSE) – o sistema linear de equações a partir do qual se constrói o modelo.
  • max_l1_norm (float) – o limite superior a ser usado para a restrição do L1-norm das variáveis.

Retorna

O problema de otimização e os coeficientes variáveis.

Tipo de retorno

tupla [*Problema*, Variável ]

Referências

[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

Esta página foi útil?
Relate um bug, erro de digitação ou solicite conteúdo no GitHub.