Vai al contenuto principale

Ottimizzatori classici

Che cos'è un ottimizzatore?​

Victoria Lipinska ci parla degli ottimizzatori classici e di come funzionano nell'ambito del VQE.

Scoprirai alcuni esempi di ottimizzatori e come si comportano in presenza o assenza di rumore.

Riferimenti​

I seguenti articoli sono citati nel video sopra.

Programmare un ottimizzatore classico​

Nelle lezioni precedenti hai imparato a costruire un Hamiltoniano adatto all'uso su un computer quantistico e a creare un circuito variazionale. Hai anche appreso che il circuito variazionale (o ansatz) contiene parametri da variare, e che la scelta ottimale dei parametri è quella che produce il valore più basso possibile della funzione di costo o dell'energia. Il problema si riduce quindi alla ricerca, nello spazio dei parametri, dell'insieme ottimale. Gran parte del lavoro sugli ottimizzatori classici è già stato fatto per noi: ottimi ottimizzatori sono disponibili da diverse fonti.

In questa lezione imparerai:

  • Come gli ottimizzatori classici si inseriscono in un calcolo VQE
  • Quali ottimizzatori classici sono disponibili da SciPy
  • Quali ottimizzatori non sono ancora disponibili tramite SciPy e come integrarli nel frattempo usando qiskit.algorithms
  • Quali opzioni sono disponibili per questi ottimizzatori e la loro rilevanza per il calcolo quantistico

SciPy è una libreria Python gratuita e open source con pacchetti rilevanti per molte aree del calcolo scientifico, inclusa l'ottimizzazione. In particolare, SciPy dispone di un pacchetto di ottimizzazione che include minimize:

from scipy.optimize import minimize Questa funzione minimize ha diversi argomenti, ma quelli più rilevanti per la chimica quantistica sono:

  • La funzione di costo (cost_func). È collegata all'Hamiltoniano, ma include anche alcune complessità, come la determinazione del valore atteso tramite Estimator e, nel caso di calcoli degli stati eccitati, potrebbe includere condizioni di ortogonalità.
  • Uno stato iniziale (x0) per il sistema, spesso lo stato di Hartree-Fock
  • Altri argomenti, inclusi gli argomenti della funzione di costo stessa
  • Il metodo impostato sull'ottimizzatore classico selezionato
  • Le opzioni per l'ottimizzatore classico (da non confondere con le opzioni di Session discusse nella sezione successiva)

Di seguito è mostrato del codice di esempio. Limitiamo la nostra discussione qui agli ultimi due argomenti.

    cost_func,
x0,
args=(ansatz, hamiltonian, estimator),
method="cobyla",
options={"maxiter": 200})

SciPy dispone di documentazione su tutti i metodi minimize disponibili. Ecco alcuni esempi degni di nota, tutti metodi per minimizzare una funzione scalare di una o più variabili:

  • cobyla: algoritmo di ottimizzazione per approssimazione lineare (COBYLA).
  • slsqp: Programmazione sequenziale ai minimi quadrati (SLSQP).
  • nelder-mead Algoritmo di Nelder-Mead.

La maggior parte degli algoritmi di ottimizzazione classica disponibili sono minimizzatori locali: utilizzano vari metodi per trovare minimi locali, ma non garantiscono di trovare il minimo globale. Alcuni ottimizzatori classici stimano esplicitamente i gradienti e li usano per trovare minimi locali. Altri possono ricorrere ad approssimazioni lineari o quadratiche successive della funzione obiettivo per trovare i minimi.

Questi algoritmi condividono diverse opzioni, ma con sottili differenze. Ad esempio, tutti consentono di specificare un numero massimo di iterazioni tramite la notazione 'maxiter': 200 vista sopra. Tutti dispongono di un'opzione per specificare un criterio di arresto alternativo basato sui valori della funzione o delle variabili, anche se questi criteri differiscono leggermente da un algoritmo all'altro. COBYLA, ad esempio, permette di specificare una tolleranza (per esempio 'tol': 0.0001) che rappresenta il limite inferiore di una "regione di fiducia". SLSQP, invece, consente di specificare un obiettivo nella precisione della funzione usata nel criterio di arresto ('ftol'). Nelder-Mead permette di specificare una tolleranza sulla differenza tra stime successive dei parametri (xx) (xatol) o una tolleranza sulla differenza tra i valori successivi ottenuti per la funzione di costo f(x)f(x) (fatol) (o entrambe). Per un elenco completo degli algoritmi e delle opzioni disponibili, consulta la documentazione di minimize di SciPy.