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