Skip to main content
IBM Quantum Platform

Kostenfunktionen

qiskit_addon_mpf.costs

Kostenfunktionen für MPF-Koeffizienten.

Dieses Modul bietet eine Reihe von Generatorfunktionen für Optimierungsprobleme, die jeweils eine andere Kostenfunktion als Ziel des Problems implementieren. Alle von diesem Modul bereitgestellten Funktionen nehmen ein lineares Gleichungssystem (LSE), das die Parameter des Optimierungsproblems kodiert, als ihr erstes Argument.

LSE

class LSE(A, b)

GitHub

Basen: NamedTuple

Eine namedtuple , die ein lineares Gleichungssystem darstellt.

Ax=bA x = b

Neue Instanz von LSE(A, b) erstellen

Parameter

A

Typ: ndarray

Die linke Seite der LSE.

b

Typ: ndarray

Die rechte Seite der LSE.

count

count(value, /)

Gibt die Anzahl der Vorkommen des Wertes zurück.

index

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

Gibt den ersten Index des Wertes zurück.

Gibt ValueError aus, wenn der Wert nicht vorhanden ist.

solve

solve()

GitHub

Geben Sie die Lösung für diese LSE zurück: x=A−1bx=A^{-1}b.

Rückgabe

Die Lösung für diese LSE.

Erhöht

  • ValueError - wenn diese LSE mit nicht zugewiesenen Werten parametriert ist.
  • ValueError - wenn diese LSE keine Zeile enthält, die diese ∑ixi==1\sum_i x_i == 1 gewährleistet, was eine Voraussetzung für gültige MPF-Koeffizienten ist.

Rückgabetyp

ndarray

x

Typ: Variable

Liefert die $x$ Variable.


Konstruktoren für Optimierungsprobleme

setup_exact_problem

setup_exact_problem(lse)

GitHub

Konstruieren Sie eine cvxpy.Problem zur Ermittlung der genauen MPF-Koeffizienten.

Anmerkung

Die durch dieses Optimierungsproblem gefundenen Koeffizienten sind identisch mit den analytischen Koeffizienten, die mit der LSE.solve() methode. Diese zusätzliche Schnittstelle dient dazu, die Parallele zu den anderen von diesem Modul bereitgestellten Kostenfunktionen hervorzuheben. Sie dient auch als Lehrbeispiel für die Herangehensweise an Optimierungsprobleme, die auf MPF-Koeffizienten abzielen.

Das durch diese Funktion konstruierte Optimierungsproblem ist wie folgt definiert:

  • die Kostenfunktion minimiert die L1-norm (norm1) der Variablen (LSE.x)

  • die Nebenbedingungen entsprechen jeder Gleichung der LSE:

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

Beispiel:

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

Sie können dann das Problem lösen und die Expansionskoeffizienten wie folgt abrufen:

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

Parameter

lse (LSE) – das lineare Gleichungssystem, aus dem das Modell aufgebaut werden soll.

Rückgabe

Das Optimierungsproblem und die variablen Koeffizienten.

Rückgabetyp

tupel [*Problem*, Variable ]

Referenzen

[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

Konstruieren Sie eine cvxpy.Problem zur Ermittlung der ungefähren MPF-Koeffizienten.

Das durch diese Funktion konstruierte Optimierungsproblem ist wie folgt definiert:

  • die Kostenfunktion minimiert die Summe der Quadrate (sum_squares()) der Abstände zu einer exakten Lösung für alle Gleichungen der LSE:
∑i(∑jAijxj−bi)2\sum_i \left( \sum_j A_{ij} x_j - b_i \right)^2
  • werden zwei Beschränkungen festgelegt:

    1. die Summe der Variablen muss 1 ergeben: ∑ixi==1\sum_i x_i == 1
    2. die L1-norm (norm1) der Variablen wird begrenzt durch max_l1_norm

Beispiel:

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

Sie können dann das Problem lösen und die Expansionskoeffizienten wie folgt abrufen:

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

Parameter

  • lse (LSE) – das lineare Gleichungssystem, aus dem das Modell aufgebaut werden soll.
  • max_l1_norm (float) – die Obergrenze, die für die Einschränkung der L1-norm der Variablen zu verwenden ist.

Rückgabe

Das Optimierungsproblem und die variablen Koeffizienten.

Rückgabetyp

tupel [*Problem*, Variable ]

Referenzen

[1] : S. Zhuk et al, Phys. Rev. Forschung 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

Konstruieren Sie eine cvxpy.Problem zur Ermittlung der ungefähren MPF-Koeffizienten.

Das durch diese Funktion konstruierte Optimierungsproblem ist wie folgt definiert:

  • die Kostenfunktion minimiert den folgenden quadratischen Ausdruck:
1+xTAx−2xTb1 + x^T A x - 2 x^T b

Wie in [1] und [2] gezeigt, ergibt sich dieser Ausdruck aus der Frobenius-Norm des Fehlers zwischen einem exakten Zeitentwicklungszustand und einem dynamischen MPF. Als solches wird die LSE konstruiert durch setup_dynamic_lse() und setzt sie in diese Funktion ein, so ergibt sich Gl. (20) von [1] (was identisch ist mit Gl. (2) von [2] ), die wir im Folgenden wiederholen

1+∑i,jAij(t)xi(t)xj(t)−2∑ibi(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) \, ,

wobei $A$ und $b$ unserer LSE der Gram-Matrix ($M$ in [1] und [2] ) bzw. dem Überlappungsvektor ($L$ in [1] und [2] ) entsprechen. Außerdem verwenden wir $x(t)$ zur Bezeichnung der MPF-Variablen (oder Koeffizienten) anstelle von $c$ in [1] und [2].

  • werden zwei Beschränkungen festgelegt:

    1. die Summe der Variablen muss 1 ergeben: ∑ixi==1\sum_i x_i == 1
    2. die L1-norm (norm1) der Variablen wird begrenzt durch max_l1_norm

Nachfolgend finden Sie ein Beispiel, das das lse Objekt verwendet, das im Beispiel für 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

Sie können dann das Problem lösen und die Expansionskoeffizienten wie folgt abrufen:

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

Parameter

  • lse (LSE) – das lineare Gleichungssystem, aus dem das Modell aufgebaut werden soll.
  • max_l1_norm (float) – die Obergrenze, die für die Einschränkung der L1-norm der Variablen zu verwenden ist.

Rückgabe

Das Optimierungsproblem und die variablen Koeffizienten.

Rückgabetyp

tupel [*Problem*, Variable ]

Referenzen

[1] : S. Zhuk et al, Phys. Rev. Forschung 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

War diese Seite hilfreich?
Melden Sie auf GitHub einen Fehler, einen Tippfehler oder fordern Sie Inhalte an.