Fonctions de coût
qiskit_addon_mpf.costs
Fonctions de coût pour les coefficients MPF.
Ce module fournit un certain nombre de fonctions génératrices de problèmes d'optimisation, chacune mettant en œuvre une fonction de coût différente en tant qu'objectif cible du problème. Toutes les fonctions fournies par ce module prennent comme premier argument un système linéaire d'équations (LSE) codant les paramètres du problème d'optimisation comme premier argument.
LSE
class LSE(A, b)
Bases : NamedTuple
namedtuple représentant un système linéaire d'équations.
Créer une nouvelle instance de LSE(A, b)
Paramètres
A
Type: ndarray
La partie gauche de la LSE.
b
Type: ndarray
Le côté droit de la LSE.
count
count(value, /)
Renvoie le nombre d'occurrences de la valeur.
index
index(value, start=0, stop=9223372036854775807, /)
Renvoie le premier indice de la valeur.
Lance ValueError si la valeur n'est pas présente.
solve
solve()
Renvoyez la solution à cette LSE : .
Retours
La solution à cette LSE.
Augmentations
- ValueError - si ce LSE est paramétré avec des valeurs non assignées.
- ValueError - si cet ESL ne comporte pas de ligne garantissant cette , ce qui est une condition pour que les coefficients MPF soient valables.
Type de retour
x
Type: Variable
Retourne la valeur $x$ Variable.
Constructeurs de problèmes d'optimisation
setup_exact_problem
setup_exact_problem(lse)
Construire un cvxpy.Problem pour trouver les coefficients MPF exacts.
Les coefficients trouvés via ce problème d'optimisation seront identiques aux coefficients analytiques obtenus à partir de la méthode LSE.solve() méthode. Cette interface supplémentaire a pour but de mettre en évidence le parallèle avec les autres fonctions de coût fournies par ce module. Il permet également d'apprendre comment aborder les problèmes d'optimisation ciblant les coefficients MPF.
Le problème d'optimisation construit par cette fonction est défini comme suit :
-
la fonction de coût minimise les L1-norm (
norm1) des variables (LSE.x) -
les contraintes correspondent à chaque équation de la
LSE:
Par exemple :
>>> 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.0Vous pouvez alors résoudre le problème et accéder aux coefficients de dilatation de la manière suivante :
>>> final_cost = problem.solve()
>>> print(coeffs.value)
[ 0.04166667 -1.06666667 2.025 ]Paramètres
lse (LSE) – le système d'équations linéaires à partir duquel le modèle est construit.
Retours
Le problème d'optimisation et les coefficients variables.
Type de retour
Références
[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)
Construire un cvxpy.Problem pour trouver des coefficients MPF approximatifs.
Le problème d'optimisation construit par cette fonction est défini comme suit :
- la fonction de coût minimise la somme des carrés (
sum_squares()) des distances à une solution exacte pour toutes les équations de la fonction de coûtLSE:
-
deux contraintes sont fixées :
- la somme des variables doit être égale à 1 :
- l'adresse L1-norm (
norm1) des variables est limitée parmax_l1_norm
Par exemple :
>>> 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.0Vous pouvez alors résoudre le problème et accéder aux coefficients de dilatation de la manière suivante :
>>> final_cost = problem.solve()
>>> print(coeffs.value)
[ 0.03513467 -1. 1.96486533]Paramètres
- lse (LSE) – le système d'équations linéaires à partir duquel le modèle est construit.
- max_l1_norm (float) – la limite supérieure à utiliser pour la contrainte de L1-norm des variables.
Retours
Le problème d'optimisation et les coefficients variables.
Type de retour
Références
[1] : S. Zhuk et al, Physique. 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)
Construire un cvxpy.Problem pour trouver des coefficients MPF approximatifs.
Le problème d'optimisation construit par cette fonction est défini comme suit :
- la fonction de coût minimise l'expression quadratique suivante :
Comme le montrent les points [1] et [2], cette expression découle de la norme de Frobenius de l'erreur entre un état d'évolution temporelle exact et un MPF dynamique. Ainsi, en prenant les LSE construit par setup_dynamic_lse() et en l'introduisant dans cette fonction, on obtient Eq. (20) de [1] (qui est identique à l'Eq. (2) de [2)], que nous reprenons ci-dessous
où $A$ et $b$ de notre LSE correspondent respectivement à la matrice de Gram ($M$ en [1] et [2] ) et au vecteur de chevauchement ($L$ en [1] et [2] ). En outre, nous utilisons $x(t)$ pour désigner les variables MPF (ou coefficients) plutôt que $c$ en [1] et [2].
-
deux contraintes sont fixées :
- la somme des variables doit être égale à 1 :
- l'adresse L1-norm (
norm1) des variables est limitée parmax_l1_norm
Voici un exemple qui utilise l'objet lse construit dans l'exemple 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.0Vous pouvez alors résoudre le problème et accéder aux coefficients de dilatation de la manière suivante :
>>> final_cost = problem.solve()
>>> print(coeffs.value)
[0.50596416 0.49403584]Paramètres
- lse (LSE) – le système d'équations linéaires à partir duquel le modèle est construit.
- max_l1_norm (float) – la limite supérieure à utiliser pour la contrainte de L1-norm des variables.
Retours
Le problème d'optimisation et les coefficients variables.
Type de retour
Références
[1] : S. Zhuk et al, Physique. 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).