Il Toolbox di ottimizzazione di Matlab

Transcript

Il Toolbox di ottimizzazione di Matlab
Il Toolbox di ottimizzazione di Matlab
Mauro Gaggero
Il Toolbox di ottimizzazione di Matlab
I Toolbox di Matlab
• I Toolbox di Matlab sono pacchetti software utili per risolvere problemi specifici.
Questi pacchetti non fanno parte del kernel vero e proprio di Matlab.
• Si tratta di codice scritto appositamente per risolvere problemi in moltissimi
campi dell’ingegneria, della matematica, della fisica, dell’economia, della
finanza, e altro ancora.
• In questa presentazione vedremo in dettaglio alcune funzioni dell’Optimization
Toolbox.
Mauro Gaggero
2
Il Toolbox di ottimizzazione di Matlab
Problema di ottimizzazione libera
• Consideriamo un esempio di minimizzazione libera di una funzione di più
variabili.
T
• Dato il vettore x = [x1, x2, x3 ] e la funzione f (x) = x21 + x22x3 , vogliamo
risolvere il seguente problema di ottimizzazione:
2
2
min {f (x)} = min x1 + x2x3 .
x∈R3
x∈R3
• E’ possibile specificare anche il gradiente della funzione da minimizzare al fine
di ottenere prestazioni migliori. In assenza di alcuna specificazione, il gradiente
è calcolato automaticamente in modo numerico.
Mauro Gaggero
3
Il Toolbox di ottimizzazione di Matlab
Problema di ottimizzazione libera
• Qui di seguito è riportato il codice Matlab necessario per risolvere il problema
di minimizzazione considerato mediante la funzione fminunc.
• Occorre anzitutto indicare la funzione da minimizzare in un file ffree.m:
1 function retval = ffree ( x )
2 % Funzione da minimizzare
3 retval = x (1).^2 + x (2)^2.* x (3);
Mauro Gaggero
4
Il Toolbox di ottimizzazione di Matlab
Problema di ottimizzazione vincolata
• Successivamente occorre scrivere il codice necessario per la minimizzazione:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
% Esempio di minimizzazione libera di una funzione di piu ’ variabili
% Punto iniziale dell ’ algoritmo di ottimizzazione
x0 = [10; 10; 10];
% Opzioni di minimizzazione
options = optimset ( ’ LargeScale ’ , ’ off ’ , ... % Non sono utilizzati algoritmi ’ Large Scale ’
’ MaxFunEvals ’ , 1000 , ... % Numero massimo valutazioni della funzione
’ GradObj ’ , ’ off ’, ...
% Gradiente calcolato numericamente
’ TolFun ’ , 1e -9 , ...
% Tolleranza sul valore della funzione
’ TolX ’ , 1e -9 , ...
% Tolleranza sul valore di x
’ Display ’ , ’ iter ’ ...
% Visualizzazione risultati a ogni iterazione
);
% Minimizzazione vera e propria
[ xopt , fval , exitFlag ] = fminunc ( @ ( x) ffree (x ), x0 , options )
Mauro Gaggero
5
Il Toolbox di ottimizzazione di Matlab
Problema di ottimizzazione libera
• Al prompt dei comandi viene visualizzato il testo seguente:
1 >> esempioFree
2
3 Iteration Func - count
4
0
4
5
1
8
6
2
12
7
3
16
8
4
20
9
5
24
10
6
28
11
7
32
12
8
36
13
9
40
14
10
44
15
11
48
16
12
52
17
13
56
18
14
60
19
20 Local minimum found .
21
Mauro Gaggero
f (x )
1100
867.51
143.046
64.7454
47.3196
37.0588
15.7725
4.23781
0.508438
0.0114608
0.000104198
5.95782 e -07
3.00695 e -10
8.15836 e -14
3.85541 e -16
Step - size
0.005
1
1
1
1
1
1
1
1
1
1
1
1
1
First - order
optimality
200
171
44.6
15.6
13.6
11.6
14.4
9.94
3.42
0.326
0.02
0.00285
8.52 e -05
1.03 e -06
1.85 e -07
6
Il Toolbox di ottimizzazione di Matlab
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
Optimization completed because the size of the gradient is less than
the selected value of the function tolerance .
< stopping criteria details >
xopt =
-0.0000
-0.0000
6.1721
fval =
3.8554 e -16
exitFlag =
1
• Alle varie iterazioni del processo di ottimizzazione vengono mostrate diverse
informazioni, tra cui il valore della funzione da minimizzare, il valore del
gradiente della funzione da minimizzare, e il numero di volte in cui la funzione
da minimizzare viene valutata.
Mauro Gaggero
7
Il Toolbox di ottimizzazione di Matlab
Problema di ottimizzazione libera
• La procedura di minimizzazione ha fornito come ottimo


0
x∗ =  0  ,
6.17
f (x∗) = 0
• La procedura è terminata con exitFlag pari a 1, ossia a causa del raggiunto
limite di tolleranza sulla norma del gradiente della funzione obiettivo.
• Esistono altri valori che exitFlag può assumere, corrispondenti ad altre
condizioni che hanno interrotto la procedura di ricerca del minimo.
Mauro Gaggero
8
Il Toolbox di ottimizzazione di Matlab
Problema di ottimizzazione vincolata
• Consideriamo un esempio di minimizzazione vincolata di una funzione di più
variabili.
• Dato il vettore x = [x1, x2 , x3]T e la funzione f (x) = −x1x2x3, vogliamo
risolvere il seguente problema di ottimizzazione:
min {f (x)} = min {−x1x2x3}
x
x
con vincoli 0 ≤ x1 + 2x2 + 2x3 ≤ 72 e x21x2 ≥ 0. Si tratta di due vincoli
lineari di disuguaglianza e di un vincolo non lineare di disuguaglianza.
• E’ possibile specificare anche il gradiente della funzione da minimizzare al fine
di ottenere prestazioni migliori. In assenza di alcuna specificazione, il gradiente
è calcolato automaticamente in modo numerico.
Mauro Gaggero
9
Il Toolbox di ottimizzazione di Matlab
Problema di ottimizzazione vincolata
• Qui di seguito è riportato il codice Matlab necessario per risolvere il problema
di minimizzazione considerato mediante la funzione fmincon.
• Occorre anzitutto indicare la funzione da minimizzare in un file fconstr.m:
1 function retval = fconstr ( x)
2 % Funzione da minimizzare
3 retval = -x (1)* x (2)* x (3);
• Occorre poi indicare la funzione dei vincoli non lineari di uguaglianza e
disuguaglianza in un file nonlinconstr.m:
1
2
3
4
5
6
function [c , ceq ] = nonlinconstr ( x )
% Funzione dei vincoli non lineari di disuguaglianza e di uguaglianza
% Vincoli di disuguaglianza non lineari ( visti come c <=0)
c = -x (1)^2* x (2);
% Vincoli di uguaglianza non lineari ( visti come ceq ==0)
ceq = [];
Mauro Gaggero
10
Il Toolbox di ottimizzazione di Matlab
Problema di ottimizzazione vincolata
• Successivamente occorre scrivere il codice necessario per la minimizzazione:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
% Esempio di minimizzazione vincolata di una funzione di piu ’ variabili
% Matrici per indicare i vincoli lineari di disuguaglianza Ax <= b
A = [ -1 -2 -2; 1 2 2];
b = [0; 72];
% Punto iniziale dell ’ algoritmo di ottimizzazione
x0 = [10; 10; 10];
% Opzioni di minimizzazione
options = optimset ( ’ LargeScale ’ , ’ off ’ , ... % Non sono utilizzati algoritmi ’ Large Scale ’
’ MaxFunEvals ’ , 1000 , ... % Numero massimo valutazioni della funzione
’ GradObj ’ , ’ off ’, ...
% Gradiente calcolato numericamente
’ TolFun ’ , 1e -9 , ...
% Tolleranza sul valore della funzione
’ TolX ’ , 1e -9 , ...
% Tolleranza sul valore di x
’ TolCon ’ , 1e -6 , ...
% Tolleranza sulla violazione dei vincoli
’ Display ’ , ’ iter ’ ...
% Visualizzazione risultati a ogni iterazione
);
% Minimizzazione vera e propria
[ xopt , fval , exitFlag ] = fmincon ( @ ( x) fconstr ( x ), x0 , A , b , [] , [] , [] , [] , ...
@ ( x) nonlinconstr ( x ), options )
Mauro Gaggero
11
Il Toolbox di ottimizzazione di Matlab
Problema di ottimizzazione vincolata
• Al prompt dei comandi viene visualizzato il testo seguente:
1 >> esempioConstrained
2
3
Max
Line search Directional First - order
4 Iter F - count
f( x )
constraint steplength derivative optimality Procedure
5
0
4
-1000
-22
6
1
9
-1587.17
-11
0.5
642
584
7
2
13
-3323.25
0
1
-1.9 e +003
161
8
3
21
-3325.4
0
0.0625
108
57.5 Hessian modified
9
4
25
-3337.65
-1.421 e -014
1
-10.7
56.7
10
5
29
-3393.66
0
1
-34.4
43.8
11
6
33
-3436.73
0
1
-22.2
37
12
7
37
-3452.42
0
1
-5.47
20.4
13
8
41
-3455.64
0
1
-1.37
7.1
14
9
45
-3456
0
1
-0.0136
0.556
15
10
49
-3456
0
1 -3.22 e -005
0.0229
16
11
53
-3456
0
1 -4.06 e -008
0.000684 Hessian modified
17
12
57
-3456
0
1 -8.15 e -012
9.94 e -006 Hessian modified
18 Optimization terminated : magnitude of directional derivative in search
19 direction less than 2* options . TolFun and maximum constraint violation
20
is less than options . TolCon .
21
Mauro Gaggero
12
Il Toolbox di ottimizzazione di Matlab
22
23
24
25
26
27
28
29
30
31
32
33
34
Active inequalities ( to within options . TolCon = 1e -006):
lower
upper
ineqlin
ineqnonlin
2
xopt =
24.0000
12.0000
12.0000
fval =
-3.4560 e +003
exitFlag =
5
• Alle varie iterazioni del processo di ottimizzazione vengono mostrate diverse
informazioni, tra cui il valore della funzione da minimizzare, il valore del
gradiente della funzione da minimizzare, e il numero di volte in cui la funzione
da minimizzare viene valutata.
Mauro Gaggero
13
Il Toolbox di ottimizzazione di Matlab
Problema di ottimizzazione vincolata
• La procedura di minimizzazione ha fornito come ottimo


24
x∗ =  12  ,
12
f (x∗) = −3.45 · 103
• La procedura è terminata con exitFlag pari a 5, ossia a causa del raggiunto
limite di tolleranza sulla derivata direzionale e sulla violazione dei vincoli.
• Esistono altri valori che exitFlag può assumere, corrispondenti ad altre
condizioni che hanno interrotto la procedura di ricerca del minimo.
Mauro Gaggero
14