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)
Basen: NamedTuple
Eine namedtuple , die ein lineares Gleichungssystem darstellt.
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()
Geben Sie die Lösung für diese LSE zurück: .
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 gewährleistet, was eine Voraussetzung für gültige MPF-Koeffizienten ist.
Rückgabetyp
x
Typ: Variable
Liefert die $x$ Variable.
Konstruktoren für Optimierungsprobleme
setup_exact_problem
setup_exact_problem(lse)
Konstruieren Sie eine cvxpy.Problem zur Ermittlung der genauen MPF-Koeffizienten.
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:
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.0Sie 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
Referenzen
[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)
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 derLSE:
-
werden zwei Beschränkungen festgelegt:
- die Summe der Variablen muss 1 ergeben:
- die L1-norm (
norm1) der Variablen wird begrenzt durchmax_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.0Sie 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
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)
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:
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
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:
- die Summe der Variablen muss 1 ergeben:
- die L1-norm (
norm1) der Variablen wird begrenzt durchmax_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.0Sie 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
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).