Mauro Gaggero
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
Problema di ottimizzazione libera Consideriamo un esempio di minimizzazione libera di una funzione di più variabili. Dato il vettore x = [x 1,x 2,x 3 ] T e la funzione f(x) = x 2 1 + x 2 2x 3, vogliamo risolvere il seguente problema di ottimizzazione: { min = min x 2 x R3{f(x)} 1 +x 2 } 2x 3. x R 3 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
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
Problema di ottimizzazione vincolata Successivamente occorre scrivere il codice necessario per la minimizzazione: 1 % Esempio di minimizzazione libera di una funzione di piu variabili 2 3 % Punto iniziale dell algoritmo di ottimizzazione 4 x0 = [10; 10; 10]; 5 % Opzioni di minimizzazione 6 options = optimset( LargeScale, off,... % Non sono utilizzati algoritmi Large Scale 7 MaxFunEvals, 1000,... % Numero massimo valutazioni della funzione 8 GradObj, off,... % Gradiente calcolato numericamente 9 TolFun, 1e-9,... % Tolleranza sul valore della funzione 10 TolX, 1e-9,... % Tolleranza sul valore di x 11 Display, iter... % Visualizzazione risultati a ogni iterazione 12 ); 13 % Minimizzazione vera e propria 14 [xopt, fval, exitflag] = fminunc(@(x) ffree(x), x0, options) Mauro Gaggero 5
Problema di ottimizzazione libera Al prompt dei comandi viene visualizzato il testo seguente: 1 >> esempiofree 2 First- order 3 Iteration Func- count f(x) Step- size optimality 4 0 4 1100 200 5 1 8 867.51 0.005 171 6 2 12 143.046 1 44.6 7 3 16 64.7454 1 15.6 8 4 20 47.3196 1 13.6 9 5 24 37.0588 1 11.6 10 6 28 15.7725 1 14.4 11 7 32 4.23781 1 9.94 12 8 36 0.508438 1 3.42 13 9 40 0.0114608 1 0.326 14 10 44 0.000104198 1 0.02 15 11 48 5.95782 e-07 1 0.00285 16 12 52 3.00695 e-10 1 8.52 e-05 17 13 56 8.15836 e-14 1 1.03 e-06 18 14 60 3.85541 e-16 1 1.85 e-07 19 20 Local minimum found. 21 Mauro Gaggero 6
22 Optimization completed because the size of the gradient is less than 23 the selected value of the function tolerance. 24 25 < stopping criteria details > 26 27 xopt = 28-0.0000 29-0.0000 30 6.1721 31 32 fval = 33 3.8554 e-16 34 35 exitflag = 36 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
Problema di ottimizzazione libera La procedura di minimizzazione ha fornito come ottimo x = 0 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
Problema di ottimizzazione vincolata Consideriamo un esempio di minimizzazione vincolata di una funzione di più variabili. Dato il vettore x = [x 1,x 2,x 3 ] T e la funzione f(x) = x 1 x 2 x 3, vogliamo risolvere il seguente problema di ottimizzazione: min x {f(x)} = min x { x 1 x 2 x 3 } con vincoli 0 x 1 + 2x 2 + 2x 3 72 e x 2 1x 2 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
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 function [c, ceq] = nonlinconstr(x) 2 % Funzione dei vincoli non lineari di disuguaglianza e di uguaglianza 3 % Vincoli di disuguaglianza non lineari (visti come c<=0) 4 c = -x(1)^2*x(2); 5 % Vincoli di uguaglianza non lineari (visti come ceq==0) 6 ceq = []; Mauro Gaggero 10
Problema di ottimizzazione vincolata Successivamente occorre scrivere il codice necessario per la minimizzazione: 1 % Esempio di minimizzazione vincolata di una funzione di piu variabili 2 3 % Matrici per indicare i vincoli lineari di disuguaglianza Ax<=b 4 A = [-1-2 -2; 1 2 2]; 5 b = [0; 72]; 6 % Punto iniziale dell algoritmo di ottimizzazione 7 x0 = [10; 10; 10]; 8 % Opzioni di minimizzazione 9 options = optimset( LargeScale, off,... % Non sono utilizzati algoritmi Large Scale 10 MaxFunEvals, 1000,... % Numero massimo valutazioni della funzione 11 GradObj, off,... % Gradiente calcolato numericamente 12 TolFun, 1e-9,... % Tolleranza sul valore della funzione 13 TolX, 1e-9,... % Tolleranza sul valore di x 14 TolCon, 1e-6,... % Tolleranza sulla violazione dei vincoli 15 Display, iter... % Visualizzazione risultati a ogni iterazione 16 ); 17 % Minimizzazione vera e propria 18 [xopt, fval, exitflag] = fmincon(@(x) fconstr(x), x0, A, b, [], [], [], [],... 19 @(x) nonlinconstr(x), options) Mauro Gaggero 11
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
22 Active inequalities ( to within options. TolCon = 1e-006): 23 lower upper ineqlin ineqnonlin 24 2 25 xopt = 26 24.0000 27 12.0000 28 12.0000 29 30 fval = 31-3.4560 e +003 32 33 exitflag = 34 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
Problema di ottimizzazione vincolata La procedura di minimizzazione ha fornito come ottimo x = 24 12 12, f(x ) = 3.45 10 3 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