• Non ci sono risultati.

funzioni Minimizzazione (e massimizzazione) di

N/A
N/A
Protected

Academic year: 2021

Condividi "funzioni Minimizzazione (e massimizzazione) di"

Copied!
17
0
0

Testo completo

(1)

Minimizzazione (e massimizzazione) di funzioni

Antonino Polimeno

antonino.polimeno@unipd.it

(2)

− Uno dei problemi principali della chimica la minimizzazione dell’energia totale di un sistema molecolare (o

supramolecolare)

− energy optimization

− geometry optimization

− Calcolo della configurazione di equilibrio di molecole e solidi

− Il problema matematica è

− il calcolo del minimo assoluto e/o dei minimi relativi di una funzione (energia totale)

− che dipende dalle coordinate nucleari (nell’approssimazione BO)

− nel modo più efficiente possibile

(3)
(4)
(5)
(6)
(7)

Direct methods Indirect methods Calculus-based techniques

Genetic algorithms

Evolutionary algorithms Simulated annealing Guided random search techniques

Dynamic programming Enumerative techniques Search techniques

(8)

− Metodi di ottimizzazione ‘standard’ diretti

− Sistemi monodimensionali

− metodo di Brent

− golden section search

− Sistemi multidimensionali

− metodo di Powel (valutazione della sola funzione)

− gradiente coniugato

− quasi-Newton

(9)

Sezione aurea- 1

a

b

c

Sono dati tre punti a < b < c che individuano un intervallo al cui interno è compreso un minimo, dato che f(b) < f(a), f(c)

Dobbiamo scegliere un nuovo punto per restringere l’intervallo in cui è compreso il minimo; se b è posto ad una frazione w di a e c e il nuovo punto x è ad una frazione z oltre b abbiamo che

, 1 ,

b a c b x b

w w z

c a c a c a

      

   a b x c

w 1-w

z

Il nuovo intervallo sarà quindi lungo w+z oppure 1-w volte quello attuale. Il caso peggiore si ha per w+z=1-w

1 2 z   w

Il nuovo punto è quindi il punto ‘simmetrico’ a b nell’intervallo originale, cioè |b-a|/(c-a)=|x-c|/(c-a), e questo implica che cada nell’intervallo più lungo tra [a,b] e [b,c]; nel nostro caso quindi (vedi figura) in [b,c]

x

(10)

Sezione aurea- 2

a

b

c

Ma come scegliamo z ? La strategia è che la scelta ottimale, che si sta facendo nell’iterazione attuale, sia stata presumibilmente fatta anche prima, scegliendo w. Quindi si ipotizza che x sia posto alla distanza frazionaria tra b e c uguale a quella di b fra a e c.

1

z w

w

x

Mettendo insieme le due equazioni otteniamo:

2

3 5

0.38197

3 1

2 SEZIONE AU E

0

R A w

ww    

 

α β

γ

: :

    

(11)

Sezione aurea- 3

1. Sia [a, b] un intervallo, con f(a), f(b) già noti 2. Calcoliamo

3. Se f(c) < f (d) allora

4. Se f(d) < f(c) allora

5. Ripeti 2

  / ,   / , 1 5 / 21

c    b b a r d    a b a r r     w

       

 

, , , , ,

/

b f b d f d d f d c f c c b b a r

 

  

       

 

, , , , ,

/

a f a c f c c f c d f d d a b a r

 

  

Convergenza lineare

(12)

Esempio

% ---GOLDEN SECTION METHOD---

% ---

% Copyright (c) 2009, Katarzyna Zarnowiec, all rights reserved

% mailto: katarzyna.zarnowiec@gmail.com

% --- figure; hold on;

a=0; % start of interval b=2; % end of interval epsilon=0.000001; % accuracy value

iter= 50; % maximum number of iterations

tau=double((sqrt(5)-1)/2); % golden proportion coefficient, around 0.618 k=0; % number of iterations

x1=a+(1-tau)*(b-a); % computing x values x2=a+tau*(b-a);

f_x1=f(x1); % computing values in x points f_x2=f(x2);

plot(x1,f_x1,'rx') % plotting x plot(x2,f_x2,'rx')

while ((abs(b-a)>epsilon) && (k<iter)) k=k+1;

if(f_x1<f_x2) b=x2;

x2=x1;

x1=a+(1-tau)*(b-a);

f_x1=f(x1);

f_x2=f(x2);

plot(x1,f_x1,'rx');

else a=x1;

x1=x2;

x2=a+tau*(b-a);

f_x1=f(x1);

f_x2=f(x2);

plot(x2,f_x2,'rx') end

k=k+1;

end

% chooses minimum point if(f_x1<f_x2)

sprintf('x_min=%f', x1) sprintf('f(x_min)=%f ', f_x1) plot(x1,f_x1,'ro')

else

sprintf('x_min=%f', x2) sprintf('f(x_min)=%f ', f_x2) plot(x2,f_x2,'ro')

end

% ---GOLDEN SECTION METHOD---

% ---

% Copyright (c) 2009, Katarzyna Zarnowiec, all rights reserved

% mailto: katarzyna.zarnowiec@gmail.com

% --- figure; hold on;

a=0; % start of interval b=2; % end of interval epsilon=0.000001; % accuracy value

iter= 50; % maximum number of iterations

tau=double((sqrt(5)-1)/2); % golden proportion coefficient, around 0.618 k=0; % number of iterations

x1=a+(1-tau)*(b-a); % computing x values x2=a+tau*(b-a);

f_x1=f(x1); % computing values in x points f_x2=f(x2);

plot(x1,f_x1,'rx') % plotting x plot(x2,f_x2,'rx')

(13)

Molte dimensioni: gradiente coniugato - 1

− Consideriamo una generica funzione; vogliamo individuare il punto (i punti) in cui il gradiente è nullo

− Gradiente coniugato

− metodo iterativo

− usa le derivate (gradiente)

− relativamente semplice da implementare

− convergenza superlineare

( ) funzione delle coordinate

: ˆ ( ) 0 f

  f

x x

x x

(14)

      

0 0

2

0 0 0

0

,

( ) 1 ( ) 1

( )

2 2

i i i i j j

i i i j i j

f f

f f x x x x x x c

x

x x

 

           

  

 

x x x x

x x

x x b x x A x

Molte dimensioni: gradiente coniugato - 2

 

1

 

min ˆ

ˆ

k k k

k k k k

f f

f

   

 

  

x x

x x x

Un metodo poco efficiente: steepest descent

(15)

Molte dimensioni: gradiente coniugato - 3

− Gradiente coniugato: la direzioni di propagazione ad ogni ogni step cambia minimizzando la forma quadratica

1

1 1

1

lunghezza del 'passo di discesa' proprio

lunghezza del 'passo di discesa ' coniu gat o

k k

k k k

k k

k k k

k k

k

k k

k

k

k k

k

 

  

  

 

 

x x p

r b A x

p r

p A r p A p

p

p r

p A r

(16)

x = fminunc(fun,x0)

x = fminunc(fun,x0,options) x = fminunc(problem) [x,fval] = fminunc(___)

[x,fval,exitflag,output] = fminunc(___)

[x,fval,exitflag,output,grad,hessian] = fminunc(___)

(17)

function [f,g] = rosenbrockwithgrad(x) % Calculate objective f

f = 100*(x(2) - x(1)^2)^2 + (1-x(1))^2; if nargout > 1 % gradient required g = [-400*(x(2)-x(1)^2)*x(1)-2*(1-x(1)); 200*(x(2)-x(1)^2)];

end

options = optimoptions('fminunc','Algorithm','trust- region','SpecifyObjectiveGradient',true);

x0 = [-1,2];

fun = @rosenbrockwithgrad;

x = fminunc(fun,x0,options) x = fminunc(fun,x0)

x = fminunc(fun,x0,options) x = fminunc(problem) [x,fval] = fminunc(___)

[x,fval,exitflag,output] = fminunc(___)

[x,fval,exitflag,output,grad,hessian] = fminunc(___)

Ottimizzazione con Matlab

Riferimenti

Documenti correlati

- Macchine parallele generiche: in questo caso ci sono ancora m macchine come nel caso precedente ma i tempi di lavorazione tij dipendono oltre che dal job j anche dalla macchina

Classical molecular dynamics simulations are used to investigate the structural properties of ice crystals under several temperature and pressure conditions. The study demonstrates

[r]

Per calcolare lo spettro totale, lo spettro di ogni sottoportante viene shiftato sulla rispettiva frequenza della sottoportante e dopo sommati.. Considerando il segnale dopo la IDFT

Lo studio ha anche affrontato gli aspetti normativi e tecnici delle possibili destinazioni finali dei fanghi, le soluzioni tecniche per la minimizzazione della

[r]

Costruzione di metodi di minimizzazione convergenti di tipo Broyden con algebre di matrici di bassa complessit` a Isabella Iori.. =⇒

I libri di testo in versione digitale interattiva e i contenuti digitali integrativi online sono usufruibili, oltre che con limiti indicati dalla normativa sul diritto d’autore,