Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Revisione #1

Open
wants to merge 11 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
44 changes: 22 additions & 22 deletions 01-ok/my-01.ipynb

Large diffs are not rendered by default.

6 changes: 3 additions & 3 deletions 02-ok/my-02.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,9 @@
"I = \\int_0^1 \\frac{\\pi}{2}\\cos(\\pi x/2) dx = 1\n",
"$$\n",
"\n",
"Utilizzeremo innanzitutto il metodo della media, con **campionamento uniforme** nell'intervallo $[0,1)$. Poi eseguiamo lo stesso calcolo usando il metodo dell'**importance sampling**, che permette di estrarre numeri casuali secondo una distribuzione di probabilità $p(x)$ fissata (e potenzialmente intelligente...): in questo modo vengono campionate più intensamente zone del dominio in cui la funzione ha valori significativamente diversi da $0$.\n",
"Utilizzeremo innanzitutto il metodo della media, con **campionamento uniforme** nell'intervallo $[0,1)$. Poi eseguiamo lo stesso calcolo usando il metodo dell'**importance sampling**, che permette di estrarre numeri casuali secondo una distribuzione di probabilità $p(x)$ fissata (più simile possibile all'integranda): in questo modo vengono campionate più intensamente zone del dominio in cui la funzione ha valori significativamente diversi da $0$.\n",
"\n",
"In linea di principio, se sapessimo campionare con $p(x)$ proprio uguale all'integranda, il risultato può essere trovato con varianza che tende a $0$ (e... saremmo ricchi); di fatto, utilizzando una $p(x)$ *simile* all'integranda, siamo i grado di ridurre notevolmente la varianza delle stime dell'integrale.\n",
"In linea di principio, se sapessi campionare con $p(x)$ proprio uguale all'integranda, il risultato potrebbe essere trovato con varianza che tende a $0$; di fatto, utilizzando una $p(x)$ *simile* all'integranda, siamo in grado di ridurre notevolmente la varianza delle stime dell'integrale.\n",
"\n",
"Un limite nella ricerca della $p(x)$ sta nel fatto che essa dev'essere **positiva** nel dominio, **finita** (eccetto in punti a misura nulla), **normalizzata**: $\\int_0^1 p(x) dx =1$. Soprattutto però dobbiamo essere in grado di invertirne analiticamente la CDF [Es-1.2](https://github.com/martinozanetti/LSN-Martino-Zanetti/blob/master/01-ok/my-01.ipynb).\n",
"\n",
Expand Down Expand Up @@ -374,7 +374,7 @@
"### Conclusioni\n",
"\n",
"Entrambi i grafici mostrano una discreta compatibilità con il fit $\\propto \\sqrt{N}$.\n",
"Questo conferma che su scale termodinamiche il processo di RW può essere considerato un processo diffusivo, con $k=\\sqrt{2D}$ dove $D$ è la costante di diffusione."
"Questo conferma che su scale di tempo lunghe il processo di RW può essere considerato un processo diffusivo, con $k=\\sqrt{2D\\tau}$ dove $D$ è la costante di diffusionee $\\tau$ l'intervallo di tempo."
]
},
{
Expand Down
4 changes: 2 additions & 2 deletions 03-ok/my-03.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
"source": [
"### <span id=\"ex-3.0\"> Option Pricing </span>[^](#toc)\n",
"\n",
"In questa esercitazione voglio verificare numericamente la soluzione analitica al problema dell'Option Pricing fornita dalla teoria di Black-Scholes per il corretto prezzamento delle opzioni europee di tipo Call e Put. Questa teoria assume che l'evoluzione nel tempo del prezzo di un *asset* sia stocastica e che mostri un comportamento analogo a quello di un Moto Browniano Geometrico (GBM) con rate di interesse *risk-free* costante $r$ (equivalente del *drift* browniano) e volatilità $\\sigma$."
"In questa esercitazione voglio verificare numericamente la soluzione analitica al problema dell'Option Pricing fornita dalla teoria di Black-Scholes per il corretto prezzamento delle opzioni europee di tipo Call e Put. Mostriamo inoltre che la soluzione discretizzata del GMB è *esatta*, nel senso che non introduce errori legati alla discretizzazione. La teoria B.-S. assume che l'evoluzione nel tempo del prezzo di un *asset* sia stocastica e che mostri un comportamento analogo a quello di un Moto Browniano Geometrico (GBM) con rate di interesse *risk-free* costante $r$ (equivalente del *drift* browniano) e volatilità $\\sigma$."
]
},
{
Expand Down Expand Up @@ -57,7 +57,7 @@
"Per entrambi i casi voglio calcolare i prezzi delle opzioni Call e Put, antiesponenziando per tornare al tempo iniziale dopo aver simulato il prezzo finale $S(T)$. Essi sono\n",
"$$\n",
"C[S(0),0] = e^{-rT} max(0,S-K)\\\\ \n",
"P(S(0),0) = e^{-rT} max(0,K-S)\n",
"P[S(0),0] = e^{-rT} max(0,K-S)\n",
"$$\n",
"dove l'operazione di ```max(0,X)``` indica la libertà di **B** di esercitare o meno l'opzione e il fattore esponenziale tiene conto del confronto con il tasso di interesse applicato da una banca a un ipotetico deposito versato al tempo iniziale $t_0=0$ (come alternativa all'acquisto dell'opzione).\n"
]
Expand Down
15 changes: 11 additions & 4 deletions 04-ok/my-04.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -124,11 +124,11 @@
"source": [
"## <span id=\"ex-4.2.0\"> Equilibrazione </span>[^](#toc)\n",
"\n",
"Come anticipato, al momento della prima inizializzazione si pone un problema: possiamo scegliere come configurazione quella di un cristallo, ma come velocità? La scelta più semplice è generarle casualmente secondo la distribuzione di Maxwell-Boltzmann.\n",
"Questo viene fatto quando tra i parametri di input si pone `restart=0`: il programma carica la configurazione cristallina salvata in `input/config.in` ed estrae le velocità secondo secondo la distribuzione di Maxwell-Boltzmann (e correggendo un effetto di drift indesiderato). \n",
"Tuttavia, anche questa inizializzazione non garantisce un perfetto equilibrio al sistema: la temperatura infatti non si mantiene al valore richiesto ma tende a derivare verso un altro valore, attorno al quale poi si stabilizza.\n",
"Come anticipato, al momento della prima inizializzazione si pone un problema: possiamo scegliere come configurazione quella di un cristallo, ma come velocità? La scelta più semplice è generarle casualmente secondo una gaussian centrata in $0$.\n",
"Questo viene fatto quando tra i parametri di input si pone `restart=0`: il programma carica la configurazione cristallina salvata in `input/config.in` ed estrae le velocità in modo normale (e correggendo un effetto di drift indesiderato). \n",
"Questa inizializzazione non garantisce un perfetto equilibrio al sistema: la temperatura infatti non si mantiene al valore richiesto ma tende a derivare verso un altro valore, attorno al quale poi si stabilizza.\n",
"\n",
"Questo è dovuto forse al fatto che il codice estrae le probabilità secondo una Maxwelliana, ma successivamente le collisioni redistribuiscono l'energia cinetica diversamente. In effetti, per definizione nell'ensemble microcanonico la temperatura non è fissata.\n",
"Questo è dovuto al fatto che il codice estrae le probabilità secondo una gaussiana, ma successivamente le collisioni redistribuiscono l'energia cinetica diversamente, con le velocità che tendono a una Mawelliana.\n",
"\n",
"Modificando la temperatura iniziale in modo che il valore di stabilizzazione sia quello desiderato è comuque possibile salvare posizioni e velocità, da dare poi in ingresso alle simulazioni vere e proprie.\n",
"\n",
Expand Down Expand Up @@ -505,6 +505,13 @@
"cell_type": "markdown",
"metadata": {},
"source": []
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
Expand Down
4 changes: 2 additions & 2 deletions 05-ok/my-05.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@
"Y_l^m(\\theta,\\phi)\n",
"$$\n",
"\n",
"dove $a_0=4\\pi\\epsilon_0\\hbar^2/m_e e^2=0.0529$ è il raggio di Bohr, $n=1,2,...$ è il numero quantico principale, $l=0,1, ..., n-1$ è quello secondario, $m=-l, -l+1, ..., l-1, l$ quello magnetico.\n",
"dove $a_0=4\\pi\\epsilon_0\\hbar^2/m_e e^2=0.0529\\times 10^{-9}$ è il raggio di Bohr, $n=1,2,...$ è il numero quantico principale, $l=0,1, ..., n-1$ è quello secondario, $m=-l, -l+1, ..., l-1, l$ quello magnetico.\n",
"\n",
"In questa esercitazione vado a studiare in particolare il Ground State (GS) e il primo Stato Eccitato (ES), con rispettive funzioni d'onda:\n",
"$$\n",
Expand Down Expand Up @@ -65,7 +65,7 @@
"source": [
"### Algoritmo di Metropolis\n",
"\n",
"Per sondare le possibili posizioni di un elettrone nello spazio circostante il nucleo, usiamo l'algoritmo di Metropolis.\n",
"Per sondare le possibili posizioni di un elettrone nello spazio circostante il nucleo, usiamo l'algoritmo di Metropolis. In generale l'algoritmo di metropolis è un algoritmo *rejection-realted* che permette di **campionare qualsiasi distribuzione di probabilità**. \n",
"In questo problema esso funziona nel seguente modo:\n",
"- prende la posizione attuale $y$\n",
"- propone un passo casuale nello spazio 3D (lungo al massimo $L$), che porta in posizione $x$\n",
Expand Down
8 changes: 4 additions & 4 deletions 06-ok/my-06.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@
"L'algoritmo di Gibbs funziona invece così:\n",
"- prende una configurazione $a := \\{s_1, ..., s_n\\}$\n",
"- calcola la probabilità associata a un *nuovo stato casuale* (indipendente da quello precedente) dell'*i-esimo spin* estratto a caso: $p(s_i\\rightarrow -s_i) = \\frac{1}{1+exp(-\\beta \\Delta E)}$;\n",
"- **impone** il nuovo con la probabilità calcolata, altrimenti il suo opposto\n",
"- **impone** il nuovo spin con la probabilità calcolata, altrimenti il suo opposto\n",
"\n",
"Per il fatto di *imporre* il flip, l'algoritmo di Gibbs è più efficiente, siccome non rigetta alcun tentativo."
]
Expand All @@ -86,7 +86,7 @@
"### Note sul codice\n",
"\n",
"Ogni step Monte Carlo consiste nel provare a modificare la configurazione ciclando su tutti gli spin e provando a ribaltarli uno per uno.\n",
"Per ogni spin flip non è stato necessario ricalcolare tutta l'hamiltoniana, perché vengono modificate solo 3 interazioni: 2 con i primi vicini e una con l'eventuale campo esterno.\n",
"Per ogni spin flip non è stato necessario ricalcolare tutta l'hamiltoniana, perché vengono modificate al massimo 3 interazioni: 2 con i primi vicini e una con l'eventuale campo esterno.\n",
"\n",
"Siccome era farraginoso fare ogni volta le simulazioni a mano per ciascuna temperatura, ho creato un semplice bash script che modifica la linea del file `input.dat` relativa alla temperatura ed esegue in automatico (per 9 diverse temperature: 0.1, 0.3, 0.5, 0.7, 1, 1.5, 2, 2.5, 3).\n",
"\n",
Expand All @@ -99,7 +99,7 @@
"\n",
"con algoritmo di Metropolis e di Gibbs, quindi in totale 6 volte (modificando di volta in volta il file `input.dat`). Nota: quando $h\\neq 0$ i file per i plot di energia, suscettività e capacità termica non vengono scritti; viceversa, quando $h=0$, non vengono scritti solo quelli della magnetizzazione.\n",
"\n",
"Automatizzare i processi è molto divertente.\n"
"Automatizzare i processi è molto appagante.\n"
]
},
{
Expand Down Expand Up @@ -194,7 +194,7 @@
"\n",
"Osservo che la magnetizzazione \"cade\" in +1 se siamo al di sotto della temperatura di transizione: in effetti la configurazione di partenza mostra una magnetizzazione iniziale casualmente diversa da zero; mi aspetto che modificando i *seed* del GNC questa sia a volte positiva, a volte negativa.\n",
"\n",
"Ho provato inoltre a forzare il sistema verso magnetizzazione negativa ponendo $h=-0.02$ e in effetti così assume magnetizzazione $M=_1$. L'energia viene leggermente ridotta dalla presenza del campo esterno, coerentemente con la teoria.\n",
"Ho provato inoltre a forzare il sistema verso magnetizzazione negativa ponendo $h=-0.02$ e in effetti così assume magnetizzazione $M=-1$. L'energia viene leggermente ridotta dalla presenza del campo esterno, coerentemente con la teoria.\n",
"\n",
"A temperature maggiori la magnetizzazione oscilla attorno a $0$, e l'energia aumenta, come ci aspettavamo.\n",
"\n",
Expand Down
6 changes: 3 additions & 3 deletions 07-ok/my-07.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -457,12 +457,12 @@
"\n",
"Nel seguito ho incluso nel codice il calcolo della Funzione di Distribuzione Radiale $g(r)$ (nel codice: `gdr`) nell'intervallo $r \\in \\left[ 0; L/2\\right]$, dove $r$ è la distanza tra coppie di particelle.\n",
"\n",
"La $g(r)$ descrive la probabilità di trovare una particella a distanza $r$ da una particella di riferimento. L'espressione analitica della $g(r)$ è:\n",
"La $g(r)$ descrive la probabilità di trovare due particelle a distanza $r$. L'espressione analitica della $g(r)$ è:\n",
"$$\n",
"g(r) =\\frac{1}{\\rho N\\Delta V(r)} \n",
" \\left\\langle \\sum_{i=1}^N \\sum_{j=1,\\neq i}^N \\delta(r-|\\vec r_i-\\vec r_j |) \\right\\rangle\n",
"$$\n",
"dove $\\Delta V(r) = \\frac{4\\pi}{3}\\left[(r+dr)^3-r^3\\right]$ è il volume di un guscio sferico in cui viene cercata la particella.\n",
"dove $\\Delta V(r) = \\frac{4\\pi}{3}\\left[(r+dr)^3-r^3\\right]$ è il volume di un guscio sferico in cui viene cercata una particella. avendo fissato la particella di riferimento nell'origine.\n",
"\n",
"All'interno del codice ho stimato $g(r)$ dividendo l'intervallo suddetto in $100$ sottointervalli (perciò $dr = L/200$), e ciclando sulle coppie di particelle: ogni volta che la distanza corrisponde al bin i-esimo ho incrementato il bin di 2, per considerare entrambe le particelle. La normalizzazione è applicata solo alla fine del conto.\n",
"I dati sono salvati in forma di istogramma di $100$ bin: ho scritto in un file il valore di ciascun bin (media di blocco) per ogni blocco; totale: $100$ colonne per $50$ righe.\n",
Expand Down Expand Up @@ -567,7 +567,7 @@
"source": [
"## <span id=\"ex-7.4\"> Esercizio 7.4 - Modello di Lennard-Jones </span>[^](#toc)\n",
"\n",
"Come anticipato, uso il codice aggiornato per simulate simulazioni Monte Carlo di un sistema di Argon ($\\sigma = 0.34$ nm, $\\epsilon/k_B = 120$ K, $m=39.948$ amu) in condizioni canoniche NVT, con potenziale di Lennard-Jones, coi soliti parametri:\n",
"Come anticipato, uso il codice aggiornato per simulazioni Monte Carlo di un sistema di Argon ($\\sigma = 0.34$ nm, $\\epsilon/k_B = 120$ K, $m=39.948$ amu) in condizioni canoniche NVT, con potenziale di Lennard-Jones, coi soliti parametri:\n",
"\n",
"1. fase solida: $\\rho^\\star = 1.1$, $T^\\star = 0.8$ (raggio di cut-off: $r_c = 2.2$)\n",
"2. fase liquida: $\\rho^\\star = 0.8$, $T^\\star = 1.1$ (raggio di cut-off: $r_c = 2.5$)\n",
Expand Down
18 changes: 9 additions & 9 deletions 08-ok/my-08.ipynb

Large diffs are not rendered by default.

10 changes: 5 additions & 5 deletions 09-ok/my-09.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@
"$$\n",
"j= \\text{int}(M \\cdot (1- r^p))+1\n",
"$$ \n",
"dove $r$ è un numero random nell'intervallo $[0,1)$ e $p$ un opportuno esponente;\n",
"dove $r$ è un numero random nell'intervallo $[0,1)$ e $p$ un opportuno esponente; \n",
"3. salva in una **nuova generazione** i figli degli individui mutati e riparte dal punto 1, ciclicamente, finchè non incontra una condizione di stop (io ho semplicemente fissato il numero di cicli).\n",
"\n",
"Per ridurre a $2$ (percorso orario e antiorario) la degenerazione della soluzione, ho fatto in modo che il primo elemento dell'array fosse sempre $1$.\n",
Expand Down Expand Up @@ -108,7 +108,7 @@
"source": [
"### <span id=\"main\"> Il [main](ex9/main.cpp) </span>[^](#codice-TSP)\n",
"\n",
"Il main è diviso in due parti: una di **inizializzazione** del problema, l'altra di esecuzione vera e propria, corrispondende all'**evoluzione** della popolazione.\n",
"Il main è diviso in due parti: una di **inizializzazione** del problema, l'altra di esecuzione vera e propria, corrispondente all'**evoluzione** della popolazione.\n",
"\n",
"Nella **prima parte** si inizializzano il generatore di numeri casuali e il Problemset (si generano le città, distribuite su una circonferenza o in un quadrato), si *dà vita* alla prima generazione di individui, e, sulla base dei criteri stabiliti dal Problemset, la si valuta e mette in ordine.\n",
"\n",
Expand All @@ -123,7 +123,7 @@
"### <span id=\"TSP\"> La [libreria TSP](../tsplib/tsplib.cpp) </span>[^](#codice-TSP)\n",
"\n",
"La libreria TSP contiene i principali ingredienti per risolvere il problema del commesso viaggiatore, ed è il cuore di questa esercitazione. \n",
"Ho progettato questa libreria in modo da renderla il più possibile flessibile: l'obiettivo è che volendo risolvere *un problema diverso* da quello del commesso viaggiatore, ma riconducibile allo stesso algoritmo genetico, sia sufficiente in futuro *modificare solo la classe `Problemset`* (in verità escludo di essere riuscito al $100%$ in questo obiettivo, ma lo scoprirò eventualmente quando mi toccherà provarci).\n",
"Ho progettato questa libreria in modo da renderla il più possibile flessibile: l'obiettivo è che volendo risolvere *un problema diverso* da quello del commesso viaggiatore, ma riconducibile allo stesso algoritmo genetico, sia sufficiente in futuro *modificare solo la classe `Problemset`* (in verità escludo di essere riuscito al $100\\%$ in questo obiettivo, ma lo scoprirò eventualmente quando mi toccherà provarci).\n",
"\n",
"La libreria infatti è costituita da **tre classi** (più un paio di funzioni di cui avevo bisogno):\n",
"- `Problemset`: rappresenta il problema reale che vogliamo risolvere. In essa uso quindi termini associati al problema del commesso viaggiatore, come *city* e *length*.\n",
Expand Down Expand Up @@ -166,7 +166,7 @@
"$$\n",
"h = \\text{int}\\left(N_{pop}\\cdot\\left(1-r^{p}\\right)\\right)-1\n",
"$$\n",
"dove $r$ è un numero casuale in $[0,1)$ ed $p$ è un parametro libero (io ho posto $p=6$, che tende a far estrarre $h$ più vicini al limite superiore.\n",
"dove $r$ è un numero casuale in $[0,1)$ ed $p$ è un parametro libero (io ho posto $p=6$, che tende a far estrarre $h$ più vicini al limite superiore rispetto alla prima scelta, 3).\n",
"Le mutazioni avvengono secondo rispettive probabilità e sono metodi della classe `Chromosome`."
]
},
Expand Down Expand Up @@ -336,7 +336,7 @@
"source": [
"## <span id=\"ex-9.2\"> Esercizio 9.2 - Disposizione in un quadrato </span>[^](#toc)\n",
"\n",
"Adesso applico il codice all'ottimizzazione di un percorso tra $34$ città piazzate casualmente all'interno di un quadrato. Al contrario di prima in linea di principio **non potrò mai sapere se ho trovato il percorso migliore** (a meno di provare tutte le $2.95\\times 10^{38}$ permutazioni...).\n"
"Adesso applico il codice all'ottimizzazione di un percorso tra $34$ città piazzate casualmente all'interno di un quadrato. Al contrario di prima in linea di principio **non potrò mai sapere se ho trovato il percorso migliore** (a meno di provare tutte le $4.34\\times 10^{36}$ permutazioni...).\n"
]
},
{
Expand Down
20 changes: 18 additions & 2 deletions 10-ok/my-10.ipynb

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion 12-ok/my-12.1.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -458,7 +458,7 @@
"- **optimizer**: `Adadelta(learning_rate=1)`\n",
"- **numero di epoche**: $20$ \n",
"\n",
"Il risultato non è realmente migliore del precedente, quindi scelgo come impostazioni finali quelle di prima. \n",
"Il risultato non è realmente migliore del precedente (ho finito per overfittare i dati di training, infatti la test loss è in salita nella seconda metà del grafico), quindi scelgo come impostazioni finali quelle di prima. \n",
"<img src=\"imgs/1/train20adadelta(lr1).png\" width=\"500\"/> \n",
"<img src=\"imgs/1/pred20adadelta(lr1).png\" width=\"500\"/>\n"
]
Expand Down
15 changes: 14 additions & 1 deletion 12-ok/my-12.2-12.3.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@
},
{
"cell_type": "code",
"execution_count": 48,
"execution_count": 5,
"metadata": {},
"outputs": [
{
Expand Down Expand Up @@ -165,11 +165,24 @@
" model.compile(loss=keras.losses.categorical_crossentropy, # note that model uses **LOSS TO OPTIMIZE** ...\n",
" optimizer=Adadelta(learning_rate=1), # Galli first setting: SGD()\n",
" metrics=['acc']) # ... and metrics only to **TEST PERFORMANCE**\n",
" print(model.summary())\n",
"\n",
" return model\n",
" \n",
"\n",
"print('Model created and compiled successfully! Ready to train.')\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": [
"model_CDNN = create_CDNN()\n",
"print(model_CDNN.summary())"
]
},
{
"cell_type": "markdown",
"metadata": {},
Expand Down