Simulated Annealing
Annichilimento Analogia con il processo di solidificazione di un metallo fuso A partire dal metallo fuso, la temperatura viene abbassata lentamente e il sistema transita da uno stato energetico al successivo fino a quando il metallo solidifica nello stato di minima energia
Termodinamica L annichilamento (ricottura) avviene attraverso la diffusione di atomi in un materiale solido, che attraverso tale processo va verso uno stato di equilibrio. Temperatura elevata favorisce la diffusione rompendo i legami tra gli atomi. Il movimento degli atomi ha l effetto di ridistribuire o eliminare i difetti nella struttura. L eliminazione dei difetti e dello stress ad essi dovuto è un processo spontaneo, ma avviene molto lentamente. La temperatura facilita tale processo I tre stadi dell annealing: Fase di recupero in cui il metallo è riscaldato per rimuovere i difetti nella struttura cristallina ed elimnare gli stress ad essei dovuti Fase di ricristallizzzazione, in cui i nuclei cristallini si formano e crescono, rimpiazzando quelli che sono deformati da difetti nella struttura.
Transizione di stato il sistema viene portato alla temperatura di fusione T il sistema si trova in uno stato i e può transitare in uno stato j ottenuto perturbando (modificando) lo stato i la transizione da uno stato all altro avviene con probabilità P legata alle energie E degli stati i e j P = exp E i k E B T j la temperatura deve essere abbassata lentamente in modo che il solido raggiunga l equilibrio termico ad ogni temperatura
Raffreddamento Quando la temperatura T raggiunge la temperatura ambiente si avrà (idealmente), un metallo con una struttura cristallina priva di difetti e stress Stato a minima energia
Il processo fisico MAX Equilibrio alla temperatura T max STATO 1 STATO 2... STATO n 0... STATO n 1 Equilibrio a T 1 <T max Minima Energia MIN... STATO n c ENERGIA E Equilibrio a T min MAX MIN
Caratteristiche dell annealing Il processo consente localmente il passaggio da stati a bassa energia a stati a energia più elevata
Il processo simulato MAX Soluzione 1 Soluzione 2... Soluzione n 0 Equilibrio alla temperatura T max... Soluzione n 1 Equilibrio a T 1 <T max Minima globale di f() MIN... Soluzione n c Valore della funzione f() MAX MIN Equilibrio a T min
Processo simulato: cosa serve 1) Generare degli stati x n a partire da x 0 2) Valutare la probabilità P 3) Decidere se spostare la stima del minimo da x 0 a x n 4) Diminuire T
Funzione da studiare Moltissimi minimi locali Algoritmi classici convergono al minimo locale più vicino x 0
Generare nuovi stati Esploriamo la funzione vicino a x 0 Ci scostiamo dalla posizione iniziale in maniera casuale Scostamento massimo Δx
Generare nuovi stati Matlab: la funzione rand(1) genera un numero casuale nell intervallo [0,1] Per spostarsi nell intervallo [x 0 -Δx,x 0 +Δx]: x1=x0+dx*2*(rand(1)-0.5) Trasforma l intervallo da [-1,1] a [-Δx,Δx] Trasforma l intervallo da [0,1] a [-0.5,0.5] Trasforma l intervallo da [-0.5,0.5] a [-1,1]
Valutare la probabilità di ΔE Se ΔE è negativa, la funzione nel nuovo stato è minore di quella nel vecchio e dunque accetto la transizione ΔE = f ( x ) f ( x ) 1 0 Altrimenti: P = exp ΔE T
Valutare la probabilità di ΔE P è 1 per ΔE=0 P tende a 0 per ΔE molto grande Confronto il valore di P ottenuto con un numero casuale z fra 0 e 1: Se P>z accetto la transizione Se P<=z lo stato non cambia
Passo 1: T 0 =1000 f(x 0 )=491 f(x 1 )=30 ΔE= f(x 1 ) -f(x 0 ) =-461 x 0 x 1
Passo 1: T 1 =0.95*T 0 =950 f(x 0 )=491 f(x 1 )=30 f(x 2 )=220 x 0 ΔE= f(x 2 ) -f(x 1 ) =190 P=exp(ΔE/T)=0.81 x 2 x 1 z=rand(1)=0.8576 P<z: x 2 =x 1
Passo 1: T 2 =0.95*T 1 =902 f(x 0 )=491 f(x 1 )=30 f(x 2 )=30 f(x 3 )=-97 x 0 x 2 x 3
Passo 1: T 3 =0.95*T 2 =856 f(x 0 )=491 f(x 1 )=30 f(x 2 )=30 f(x 3 )=-97 f(x 4 )=111 x 0 ΔE= f(x 2 ) -f(x 1 ) =208 P=exp(ΔE/T)=0.78 x 4 x 2 x 3 z=rand(1)=0.6575 P>z: accetto la transizione
Passo 1: T 2 =0.95*T 1 =902 f(x 0 )=491 f(x 1 )=30 f(x 2 )=30 f(x 3 )=-97 x 0 x 4 x 2 x 3
Evoluzione del minimo trovato f(x i ) Iterazioni i
Punti esplorati f(x) x
SA in Matlab function [z,fz]=sa(f,x0, T0, dx,tol, maxiter, alpha) x=x0; T=T0; iter=1; fval=feval(inline(f),x0); xopt=x0; fopt=fval; z(iter)=xopt; fz(iter)=fopt; while(t>tol & iter<maxiter) fprintf('%f %f %f %i %i\n',x,fval,t,iter,ref)
SA in Matlab end; T=alpha*T; xnew=x+dx*2*(rand(1)-0.5); fnew=feval(inline(f),xnew); de=fnew-fopt; if(de<0) fval=fnew; x=xnew; if(fval<fopt) fopt=fval; xopt=xnew; end; else p=exp(-de/t); if(p>rand(1)) fval=fnew; x=xnew; end; end; iter=iter+1; z(iter)=xopt; fz(iter)=fopt; Diminuisce il valore di T, e dunque la probabilità di salti grand Calcola il nuovo stato, il valore di f in esso e la differenza di energia Se il nuovo stato dà un valore di f() più basso lo accetta, ed eventualmente aggiorna anche il valore minimo trovato Calcola P e verifica se è maggiore di un numero casuale z per accettare il nuovo stato