Vai al contenuto principale
Questo progetto è in fase beta. Hai trovato un bug? Apri una issue su GitHub. Hai una domanda o un'idea? Chiedi su GitHub Discussions — apprezziamo il tuo feedback!
Com'è la qualità della traduzione su questa pagina?

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 This minimize function has several arguments, but the most relevant arguments for quantum chemistry are:

  • The cost function (cost_func). This is related to the Hamiltonian, but also includes some complexities, such as determining the expectation value by using Estimator, and in the case of excited state calculations, might include orthogonality conditions.
  • An initial state (x0) for the system, often the Hartree Fock state
  • Other arguments, including arguments of the cost function itself
  • The method set to the classical optimizer you select
  • Options for the classical optimizer (not to be confused with Session options discussed in the next section)

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

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

La documentazione di SciPy descrive 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 Optimization BY Linear Approximation (COBYLA).
  • slsqp: Sequential Least Squares Programming (SLSQP).
  • nelder-mead algoritmo Nelder-Mead.

La maggior parte degli algoritmi di ottimizzazione classica disponibili sono minimizzatori locali, in quanto usano vari metodi per trovare minimi locali, ma non garantiscono di trovare minimi globali. Alcuni ottimizzatori classici stimano esplicitamente i gradienti e li usano per trovare minimi locali. Altri possono usare approssimazioni lineari o quadratiche successive della funzione obiettivo per trovare i minimi.

Questi algoritmi hanno diverse opzioni in comune, ma con sottili differenze. Per esempio, tutti hanno l'opzione di specificare un numero massimo di iterazioni usando la notazione 'maxiter': 200 mostrata sopra. Tutti hanno qualche opzione che specifica un diverso criterio di arresto basato su valori di funzione o di variabile, sebbene questi criteri siano leggermente diversi per algoritmi diversi. COBYLA, per esempio, ti permette di specificare una tolleranza (per esempio, 'tol': 0.0001) che è il limite inferiore su una "trust region". In confronto, SLSQP ti permette di fissare la precisione desiderata sul valore della funzione usata come criterio di arresto ('ftol'). Nelder-Mead ti permette di specificare una tolleranza nella differenza tra stime successive dei parametri (xx) (xatol) o una tolleranza nella differenza tra valori successivi ottenuti per la funzione di costo f(x)f(x) (fatol) (o entrambi). Per un elenco completo degli algoritmi e delle opzioni disponibili, visita la documentazione minimize di SciPy.