Skip to main content
IBM Quantum Platform

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)

GitHub

Basi: NamedTuple

namedtuple che rappresenta un sistema di equazioni lineari.

Ax=bA x = b

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

GitHub

Restituire la soluzione a questo LSE: x=A1bx=A^{-1}b.

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 ixi==1\sum_i x_i == 1 che è un requisito per la validità dei coefficienti MPF.

Tipo di restituzione

ndarray

x

Tipo: Variable

Restituisce il valore $x$ Variable.


Costruttori di problemi di ottimizzazione

setup_exact_problem

setup_exact_problem(lse)

GitHub

Costruire un cvxpy.Problem per trovare i coefficienti esatti della MPF.

Nota

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:

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

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

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

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 formula LSE:
i(jAijxjbi)2\sum_i \left( \sum_j A_{ij} x_j - b_i \right)^2
  • sono impostati due vincoli:

    1. le variabili devono sommarsi a 1: ixi==1\sum_i x_i == 1
    2. la L1-norm (norm1) delle variabili è delimitato da max_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)

GitHub

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:
1+xTAx2xTb1 + x^T A x - 2 x^T b

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

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

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:

    1. le variabili devono sommarsi a 1: ixi==1\sum_i x_i == 1
    2. la L1-norm (norm1) delle variabili è delimitato da max_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).

https://arxiv.org/abs/2407.17405v2

Questa pagina è stata utile?
Segnala un bug, un errore di battitura o richiedi contenuti su GitHub.