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)
Bases: NamedTuple
Um namedtuple que representa um sistema linear de equações.
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()
Retorne a solução para esse LSE: .
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 , que é um requisito para coeficientes MPF válidos.
Tipo de retorno
x
Tipo: Variable
Retorna o $x$ Variable.
Construtores de problemas de otimização
setup_exact_problem
setup_exact_problem(lse)
Construa um cvxpy.Problem para encontrar os coeficientes exatos do MPF.
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:
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.0Em 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
Referências
[1] : A. Carrera Vazquez et al, Quantum 7, 1067 (2023).
setup_sum_of_squares_problem
setup_sum_of_squares_problem(lse, *, max_l1_norm=10.0)
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 modeloLSE:
-
duas restrições são definidas:
- as variáveis devem somar 1:
- o L1-norm (
norm1) das variáveis é limitado pormax_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.0Em 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
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)
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:
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
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:
- as variáveis devem somar 1:
- o L1-norm (
norm1) das variáveis é limitado pormax_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.0Em 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
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).