next up previous contents index
Next: Estrapolazioni necessarie nel DMC Up: Ottimizzazione Previous: Importanza della funzione d'onda   Indice   Indice analitico

Ottimizzazione della funzione d'onda

Per ottenere una funzione d'onda di qualità migliore, in modo da poter essere usata nel DMC, si è provveduto ad ottimizzare i parametri liberi dello pseudopotenziale (eq. 3.4) e del backflow (eq. 3.15). Esistono varie possibilità per ottimizzare i parametri: minimizzare l'energia, minimizzare la varianza dell'energia, oppure una combinazione lineare di entrambe. La minimizzazione della varianza si basa sulla considerazione che la varianza dell'energia è zero su qualunque autostato (vedi [45]), se $H\Psi = E \Psi$, allora:
\begin{displaymath}
\sigma_{\Psi}^2 (H) = \langle \Psi \mid (H - \langle H \rangle)^2 \mid \Psi \rangle = 0
\end{displaymath} (3.21)

Nell'ottimizzare la funzione d'onda con il VMC esiste però un problema, tipico delle ottimizzazioni fatte con il metodo Monte Carlo, cioè che l'errore statistico può mascherare il guadagno ottenuto per piccole variazioni dei parametri. Per risolvere questo problema è possibile utilizzare algoritimi di minimizzazione costruiti per minimizzare funzioni in presenza di rumore (ad esempio Stochastic Gradient Approximation), oppure ricorrere al ``campionamento correlato'' ed utilizzare poi algoritmi deterministici di minimizzazione [29]. Noi abbiamo optato per questa seconda possibilità: per ottimizzare i parametri, si sono salvate un certo numero di configurazioni rappresentative della funzione d'onda e su queste si è calcolata la nuova funzione d'onda con parametri diversi $\lambda'$. Per calcolare l'energia con i nuovi parametri possiamo scrivere:
$\displaystyle E(\lambda')$ $\textstyle =$ $\displaystyle \int \frac{\Psi^*(R,\lambda') \hat H}{ \Psi(R,\lambda')} \vert\Psi(R,\lambda')\vert^2 dR =\int E_{loc}(R,\lambda')\vert\Psi(R,\lambda')\vert^2 dR$  
  $\textstyle =$ $\displaystyle \int E_{loc}(R,\lambda') \frac{\vert\Psi(R,\lambda')\vert^2}{\vert\Psi(R,\lambda)\vert^2}\vert\Psi(R,\lambda)\vert^2 dR$ (3.22)

Dove $\Psi(R,\lambda')$ è la funzione d'onda con i nuovi parametri $\lambda'$ e $\Psi(R,\lambda)$ è la vecchia funzione d'onda che abbiamo campionato. Se:

\begin{displaymath}
w_{\lambda',\lambda}(R) = \frac{\vert\Psi(R,\lambda')\vert^2}{\vert\Psi(R,\lambda)\vert^2},
\end{displaymath}

possiamo calcolare l'energia con i nuovi parametri sulle vecchie configurazioni scrivendola come:

\begin{displaymath}
E(\lambda') =\int E_{loc}(R,\lambda') w_{\lambda',\lambda}(...
...,\lambda)\vert^2 dR =\frac{ \sum_i w_i E'_L(x_i)}{\sum_i w_i}
\end{displaymath}

Stesso discorso può essere fatto anche per la varianza. Questo ci permette di valutare il valor medio di energia e varianza sulla nuova funzione di prova $\Psi(\lambda',R)$ senza doverla ricampionare ad ogni cambio dei parametri. Inoltre risolve il problema del diverso errore statistico che ogni nuovo compionamento comporta. Infatti utilizzando sempre le stesse configurazioni, l'errore statistico rimane lo stesso per piccoli spostamenti dei parametri. Questo metodo ha anche il vantaggio di essere computazionalmente più efficiente, in quanto non c'è bisogno di ricampionare la funzione d'onda per ogni variazione dei parametri. Quando però i parametri della nuova funzione diventano molto diversi da quelli di $\Psi_0$, utilizzare il campionamento fatto con quest'ultima può diventare inefficiente: la nuova funzione potrebbe ormai esssre rappresentata solo da pochi punti con molto peso. Teniamo conto di questo fatto con un peso che ``misura'' la sovrapposizione di $\Psi(R,\lambda')$ e $\Psi(R,\lambda)$. Consideriamo la quantità:
\begin{displaymath}
A(\lambda_0,\lambda) = \frac{ \left(\sum^N_{i=1}w_{\lambda',\lambda}(R_i)\right)^2}{\sum^N_{i=1}w^2_{\lambda',\lambda}(R_i)}
\end{displaymath} (3.23)

Questa quantità è compresa tra 1 ed N; se tutti i pesi valgono 1 vale N. Abbiamo allora scelto una soglia da confrontare con $A$ in modo da poter capire quando il nostro campionamento diveniva inefficiente. In quel caso si è provveduto a salvare i parametri ottenuti ed a ricampionare la funzione d'onda.
Per ottimizzare i parametri abbiamo usato due algoritmi: il simplesso e l'algoritmo di Levenberg-Marquardt. Il primo è più stabile del secondo poichè non fa uso del gradiente della funzione, ma il secondo ha il vantaggio di essere molto più efficiente.
Per quanto riguarda la funzione da minimizzare, abbiamo utilizzato una combinazione lineare di varianza ed energia, che si è rivelata molto funzionale per quasi tutti gli $r_s$. Per $r_s = 1$ invece, si è preferito utilizzare solamente la varianza, poiché la sua minimizzazione è statisticamente più stabile e questo è molto evidente a bassi $r_s$. La minimizzazione della varianza è più robusta rispetto a quella dell'energia per i seguenti motivi: Ottimizzando la nostra funzione d'onda, attraverso i parametri della $u(r)$, siamo riusciti ad ottenere energie minori di quelle ottenute con gli pseudotenziali di tipo RPA.


next up previous contents index
Next: Estrapolazioni necessarie nel DMC Up: Ottimizzazione Previous: Importanza della funzione d'onda   Indice   Indice analitico
2001-09-28