Funzioni di costo
qiskit_addon_mpf.costs
Funzioni di costo per i coefficienti MPF.
Questo modulo fornisce una serie di funzioni di generazione di problemi di ottimizzazione, ognuna delle quali implementa una diversa funzione di costo come obiettivo del problema. Tutte le funzioni fornite da questo modulo prendono come primo argomento un sistema lineare di equazioni (LSE) che codifica i parametri del problema di ottimizzazione come primo argomento.
LSE
class LSE(A, b)
Basi: NamedTuple
namedtuple che rappresenta un sistema di equazioni lineari.
Creare una nuova istanza di LSE(A, b)
Parametri
A
Tipo: ndarray
Il lato sinistro dell'LSE.
b
Tipo: ndarray
Il lato destro dell'LSE.
count
count(value, /)
Restituisce il numero di occorrenze del valore.
index
index(value, start=0, stop=9223372036854775807, /)
Restituisce il primo indice del valore.
Solleva ValueError se il valore non è presente.
solve
solve()
Restituire la soluzione a questo LSE: .
Risultati
La soluzione a questa LSE.
Aumenti
- ValueError - se questo LSE è parametrizzato con valori non assegnati.
- ValueError - se questo LSE non include una riga che garantisca quel che è un requisito per la validità dei coefficienti MPF.
Tipo di restituzione
x
Tipo: Variable
Restituisce il valore $x$ Variable.
Costruttori di problemi di ottimizzazione
setup_exact_problem
setup_exact_problem(lse)
Costruire un cvxpy.Problem per trovare i coefficienti esatti della MPF.
I coefficienti trovati tramite questo problema di ottimizzazione saranno identici a quelli analitici ottenuti con il metodo LSE.solve() metodo. Questa interfaccia aggiuntiva esiste per evidenziare il parallelo con le altre funzioni di costo fornite da questo modulo. Ha anche una funzione educativa per quanto riguarda l'approccio ai problemi di ottimizzazione dei coefficienti MPF.
Il problema di ottimizzazione costruito da questa funzione è definito come segue:
-
la funzione di costo minimizza la L1-norm (
norm1) delle variabili (LSE.x) -
i vincoli corrispondono a ciascuna equazione della
LSE:
Di seguito è riportato un esempio:
>>> 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È quindi possibile risolvere il problema e accedere ai coefficienti di espansione in questo modo:
>>> final_cost = problem.solve()
>>> print(coeffs.value)
[ 0.04166667 -1.06666667 2.025 ]Parametri
lse (LSE) – il sistema di equazioni lineari da cui costruire il modello.
Risultati
Il problema di ottimizzazione e i coefficienti variabili.
Tipo di restituzione
tupla [*Problema*, Variabile ]
Riferimenti
[1] : A. Carrera Vazquez e altri, Quantum 7, 1067 (2023).
setup_sum_of_squares_problem
setup_sum_of_squares_problem(lse, *, max_l1_norm=10.0)
Costruire un cvxpy.Problem per trovare coefficienti MPF approssimativi.
Il problema di ottimizzazione costruito da questa funzione è definito come segue:
- la funzione di costo minimizza la somma dei quadrati (
sum_squares()) delle distanze da una soluzione esatta per tutte le equazioni della formulaLSE:
-
sono impostati due vincoli:
- le variabili devono sommarsi a 1:
- la L1-norm (
norm1) delle variabili è delimitato damax_l1_norm
Di seguito è riportato un esempio:
>>> 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È quindi possibile risolvere il problema e accedere ai coefficienti di espansione in questo modo:
>>> final_cost = problem.solve()
>>> print(coeffs.value)
[ 0.03513467 -1. 1.96486533]Parametri
- lse (LSE) – il sistema di equazioni lineari da cui costruire il modello.
- max_l1_norm (float) – il limite superiore da utilizzare per il vincolo di L1-norm delle variabili.
Risultati
Il problema di ottimizzazione e i coefficienti variabili.
Tipo di restituzione
tupla [*Problema*, Variabile ]
Riferimenti
[1] : S. Zhuk et al, Fisico. 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)
Costruire un cvxpy.Problem per trovare coefficienti MPF approssimativi.
Il problema di ottimizzazione costruito da questa funzione è definito come segue:
- la funzione di costo minimizza la seguente espressione quadratica:
Come mostrato in [1] e [2], questa espressione deriva dalla norma di Frobenius dell'errore tra uno stato di evoluzione temporale esatto e un MPF dinamico. Come tale, prendendo il LSE costruita da setup_dynamic_lse() e inserendola in questa funzione si ottiene l'Eq. (20) di [1] (che è identica all'Eq. (2) di [2] ), che ripetiamo qui di seguito
dove $A$ e $b$ del nostro LSE corrispondono rispettivamente alla matrice di Gram ($M$ in [1] e [2] ) e al vettore di sovrapposizione ($L$ in [1] e [2] ). Inoltre, usiamo $x(t)$ per indicare le variabili (o i coefficienti) della MPF anziché $c$ in [1] e [2].
-
sono impostati due vincoli:
- le variabili devono sommarsi a 1:
- la L1-norm (
norm1) delle variabili è delimitato damax_l1_norm
Di seguito è riportato un esempio che utilizza l'oggetto lse costruito nell'esempio di 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È quindi possibile risolvere il problema e accedere ai coefficienti di espansione in questo modo:
>>> final_cost = problem.solve()
>>> print(coeffs.value)
[0.50596416 0.49403584]Parametri
- lse (LSE) – il sistema di equazioni lineari da cui costruire il modello.
- max_l1_norm (float) – il limite superiore da utilizzare per il vincolo di L1-norm delle variabili.
Risultati
Il problema di ottimizzazione e i coefficienti variabili.
Tipo di restituzione
tupla [*Problema*, Variabile ]
Riferimenti
[1] : S. Zhuk et al, Fisico. 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).