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

15
Introduzione alle Funzioni di Ottimizzazione di Matlab Metodi Numerici

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

Page 1: Introduzione a Matlab: Funzioni di Ottimizzazione · 2019. 10. 29. · 1. Toolbox di Ottimizzazione Matlab ha tre principali funzioni per resolvere problem di ottimizzazione: 1.fminunc:

Introduzione alleFunzioni di Ottimizzazione

di MatlabMetodi Numerici

Page 2: Introduzione a Matlab: Funzioni di Ottimizzazione · 2019. 10. 29. · 1. Toolbox di Ottimizzazione Matlab ha tre principali funzioni per resolvere problem di ottimizzazione: 1.fminunc:

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…)

Page 3: Introduzione a Matlab: Funzioni di Ottimizzazione · 2019. 10. 29. · 1. Toolbox di Ottimizzazione Matlab ha tre principali funzioni per resolvere problem di ottimizzazione: 1.fminunc:

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

Page 4: Introduzione a Matlab: Funzioni di Ottimizzazione · 2019. 10. 29. · 1. Toolbox di Ottimizzazione Matlab ha tre principali funzioni per resolvere problem di ottimizzazione: 1.fminunc:

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

Page 5: Introduzione a Matlab: Funzioni di Ottimizzazione · 2019. 10. 29. · 1. Toolbox di Ottimizzazione Matlab ha tre principali funzioni per resolvere problem di ottimizzazione: 1.fminunc:

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

Page 6: Introduzione a Matlab: Funzioni di Ottimizzazione · 2019. 10. 29. · 1. Toolbox di Ottimizzazione Matlab ha tre principali funzioni per resolvere problem di ottimizzazione: 1.fminunc:

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

Page 7: Introduzione a Matlab: Funzioni di Ottimizzazione · 2019. 10. 29. · 1. Toolbox di Ottimizzazione Matlab ha tre principali funzioni per resolvere problem di ottimizzazione: 1.fminunc:

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.

Page 8: Introduzione a Matlab: Funzioni di Ottimizzazione · 2019. 10. 29. · 1. Toolbox di Ottimizzazione Matlab ha tre principali funzioni per resolvere problem di ottimizzazione: 1.fminunc:

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!

Page 9: Introduzione a Matlab: Funzioni di Ottimizzazione · 2019. 10. 29. · 1. Toolbox di Ottimizzazione Matlab ha tre principali funzioni per resolvere problem di ottimizzazione: 1.fminunc:

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);

Page 10: Introduzione a Matlab: Funzioni di Ottimizzazione · 2019. 10. 29. · 1. Toolbox di Ottimizzazione Matlab ha tre principali funzioni per resolvere problem di ottimizzazione: 1.fminunc:

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’);

Page 11: Introduzione a Matlab: Funzioni di Ottimizzazione · 2019. 10. 29. · 1. Toolbox di Ottimizzazione Matlab ha tre principali funzioni per resolvere problem di ottimizzazione: 1.fminunc:

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’)

Page 12: Introduzione a Matlab: Funzioni di Ottimizzazione · 2019. 10. 29. · 1. Toolbox di Ottimizzazione Matlab ha tre principali funzioni per resolvere problem di ottimizzazione: 1.fminunc:

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.

Page 13: Introduzione a Matlab: Funzioni di Ottimizzazione · 2019. 10. 29. · 1. Toolbox di Ottimizzazione Matlab ha tre principali funzioni per resolvere problem di ottimizzazione: 1.fminunc:

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?)

Page 14: Introduzione a Matlab: Funzioni di Ottimizzazione · 2019. 10. 29. · 1. Toolbox di Ottimizzazione Matlab ha tre principali funzioni per resolvere problem di ottimizzazione: 1.fminunc:

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?)

Page 15: Introduzione a Matlab: Funzioni di Ottimizzazione · 2019. 10. 29. · 1. Toolbox di Ottimizzazione Matlab ha tre principali funzioni per resolvere problem di ottimizzazione: 1.fminunc:

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