Introduzione a Matlab: Funzioni di Ottimizzazione · 2019. 10. 29. · 1. Toolbox di Ottimizzazione...

Post on 03-Oct-2020

2 views 1 download

Transcript of Introduzione a Matlab: Funzioni di Ottimizzazione · 2019. 10. 29. · 1. Toolbox di Ottimizzazione...

Introduzione alleFunzioni di Ottimizzazione

di MatlabMetodi Numerici

1. Toolbox di Ottimizzazione

Matlab ha tre principali funzioni per resolvere problem di ottimizzazione:

1. fminunc: trova il minimo di un problema non vincolato(“unc-onstrained”), usando metodi che usano o stimano ilgradiente

2. fminsearch: trova il minimo un problema non vincolato, senza usare nessuna informazione sul gradiente (“derivate free methods”)

3. fmincon: risolve un problema di ottimizzazione vincolata

4. fzero: trovi gli zeri di una funzione non lineare (può essereusata per trovare i punti stazionari…)

2. Usare la funzione fminunc

Sintassi:

[xmin, f_xmin] = fminunc(f, x0, options)

Input:

1. f: è la funzione obiettivo

2. x0: è il punto di iniziale da cui iniziare la ricerca

3. options: opzioni definite dall’utente che determinano iltipo di algoritmo usato e diversi parametri numerici

Output minimale:

1. xmin: punto di minimo relativo trovato

2. fval: funzione obiettivo valutata in xmin

2. Funzione F2.mfunction [z,g,h] = F2(X)

x = X(1);

y = X(2);

z = x^2 + y^2;

if nargout > 1

g(1) = 2*x; % Gradiente

g(2) = 2*y;

if nargout > 2

h(1,1) = 2; % Hessiano

h(2,2) = 2;

h(1,2) = 0;

h(2,1) = h(1,2);

end

end

end

2. Usare la funzione fminunc

Sintassi:

[xmin, f_xmin] = fminunc(f, x0, options)

Esempio: Usando la funzione F2.m vista la volta scorsa, provare:

>> [xbar, f_xbar] = fminunc(@F2, [-2,0])

xbar =

1.0e-07 *

0 0.1490

f_xbar =

-2.2204e-16

2. Usare la funzione fminuncSintassi:

[xmin,fval,exitflag,output,grad,hessian] =

fminunc(f, x0, options)

Esempio: Usando la funzione F2.m sul sito del corso provare:

>> [x,fval,exitflag,output,grad,hessian]=fminunc(@F2,[2,0])

PROVARE!

NOTA: Leggere sempre la documentazione online:

https://it.mathworks.com/help/optim/ug/fminunc.html

ATTENZIONE A MATLAB !

In una certa versione di Matlab, successiva a quellainstallato nelle aule B2 e C2/C3, è stato cambiato ilmodo di passare le “options” al toolbox diottimizzazione.

Nella documentazione online di Matlab trovate ilnuovo modo, ma abituatevi ad usare il vecchio, inquanto l’esame sarà sui computer delle aule B2 eC2/C3.

3.1 Opzioni per fminunc

• Opzioni per vedere il processo di ottimizzazione:

>> options = optimset('Display','iter’)

Esempio: Usando la funzione F3.m utilizzata per l’esercizio del Matlab Grader:

>> x0 = [0,0]; # Dopo provare con x0=[1,2]

>> [x,fval,exitflag,output,Gk,Hk] = fminunc(@F3,x0,options)

Iteration,Func-count,f(x),Step-size,1st order optimality

PROVARE!

3.2 Opzioni per fminunc

• Opzioni per vedere il critero di arresto:

>> opts = optimset(‘MaxFunEvals’,200,’MaxIter’,200’);

>> opts = optimset(opts,’TolFun’,1e-7,’TolX’,1e-7);

3.3 Opzioni per fminunc

Opzioni per selezionare il metodo iterativo di ottimizzazione:

1. Steepest Descent (metodo del gradiente, massima discesa), senza uso delgradiente calcolato nella funzione obiettivo implementata da voi:

options=optimset(’LargeScale’,’off’,’GradObj’,’off’,

’HessUpdate’,’steepdesc’);

Se volete fare usare il gradiente che avete implementato nella funzione obiettivo:

options=optimset(’LargeScale’,’off’,’GradObj’,’on’,

’HessUpdate’,’steepdesc’);

3.4 Opzioni per fminunc

Opzioni per vedere la scelta del metodo di soluzione:

2. BFGS: Algoritmo di Broyden–Fletcher–Goldfarb–Shanno

options=optimset(’LargeScale’,’off’,’GradObj’,’on’,

’HessUpdate’,’bfgs’);

3. DFP: Algoritmo di Davidon–Fletcher–Powell

options= optimset(’LargeScale’,’off’,’GradObj’,’on’,

’HessUpdate’,’dfp’);

4. Trust-Region

options = optimset(’LargeScale’,’on’,’GradObj’,’on’,

’Hessian’,’on’); (oppure ‘off’)

Esercizi Preliminari su fminunc

• Utilizzando la funzione F2.m definite la volta scorsa, provare ad utilizzare la funzione fminunc con le diverse opzioni appena vista.

• Controllare i valori del gradiente e dell’hessiana, e commentare il tipo di punti stazionari trovati

• Ripetere i passi sopra con la funzione F3.m, quelladefinita nell’esercizio sul Matlab Grader della voltascorsa.

Esercizio 4: Da svolgere in aula Si consideri la funzione seguente (funzione di Rosenbrock):

f(x,y) = 100(y-x2)2 + (x-1)2

1. Scrivere il gradiente e l’Hessiana della funzione data

2. Scrivere una funzione Matlab che calcoli in un dato punto:a) Il valore di f(x,y)b) Il gradiente di f(x,y)c) La matrice Hessiana di f(x,y)

3. Tracciare il grafico della superficie di f(x,y).

4. Visualizzare le curve di livello.

5. A partire dal punto x0=[-1,2]T, trovare eventuali punti stazionari con la funzione fminunc funzione, utilizzando i quattro metodi visti in precedenza (gradiente, DFP, BFGS, e Trust Region). Cosa si osserva sullavelocità di convergenza?

6. Classificare l’eventuale punto stazionario (minimo, massimo o sella?)

Esercizio 5: Da svolgere in aula Si consideri la funzione seguente (appello del 27/02/2017):

f(x,y) = a x2 + b y2 - c log(x+y)

1. Scrivere il gradiente e l’Hessiana della funzione data

2. Scrivere una funzione Matlab che, usando a = 1, b = 2, c = 2, calcoli in un dato punto:a) Il valore di f(x,y)b) Il gradiente di f(x,y)c) La matrice Hessiana di f(x,y)

3. Tracciare il grafico della superficie di f(x,y).

4. Visualizzare le curve di livello

5. A partire dal punto x0=[0.8,0.8]T, utilizzando il metodo del gradiente, trovare eventuali punti stazionari con la funzione fminunc. Si usino le seguenti tolleranze: TolFun=1.e-12 e TolX=1.e-12

6. Classificare gli eventuali punti stazionari (minimo, massimo o sella?)

Esercizio 6: Facoltativo

1. Scrivere il gradiente e l’Hessiana della funzione data

2. Scrivere una funzione Matlab che calcoli in un datopunto:a) Il valore di f(x,y)b) Il gradiente di f(x,y)c) La matrice Hessiana di f(x,y)

3. Tracciare il grafico della superficie di f(x,y).

4. Visualizzare le curve di livello

5. A partire dal punto x0 trovare eventuali puntistazionari con la funzione fminunc.

6. Classificare gli eventuali punti stazionari (minimo, massimo o sella?)

Si consideri la funzione seguente (demo online delle slides):

f(x,y) = (x2+y−11)2 + (x+y2−7)2