Cercare il minimo di una funzione: Particle swam optimization Author: Luca Albergante1 Dipartimento di Matematica, Università degli Studi di Milano 28 Marzo 2011 L. Albergante (Univ. of Milan) PSO 28 Marzo 2011 1 / 14 Sommario 1 Cercare il minimo 2 Fitting di funzioni L. Albergante (Univ. of Milan) Sommario PSO 28 Marzo 2011 2 / 14 Cercare il minimo Introduzione Cercare il minimo od il massimo di una funzione è un problema che si ritrova piuttosto facilmente in matematica. Esistono molti metodi computazionali per affrontare questa ricerca, in genere non esiste il metodo migliore, e molti approcci sono possibili. L. Albergante (Univ. of Milan) PSO 28 Marzo 2011 3 / 14 Cercare il minimo Copiare dalla natura? Negli ultimi anni in particolare, la disponibilità di potenza computazionale ha permesso di sviluppare i cosiddetti algoritmi nature-inspired, che cercano di copiare i comportamenti che si trovano in natura per risolvere determinati problemi. Va comunque sottolineato che non si tratta esattamente di copiare, ma di determinare i meccanismi fondamentali che vanno poi astratti ed adattati al problema in questione. L. Albergante (Univ. of Milan) PSO 28 Marzo 2011 4 / 14 Cercare il minimo Copiare dalla natura? In generale gli algoritmi nature-inspired, sono piuttosto costosi in termini di risorse, e non garantiscono di ottenere il risultato ottimo, ma sono semplici (e quindi facilmente implementabili su molte architetture), e, se se ben usati, si comportano piuttosto bene. L. Albergante (Univ. of Milan) PSO 28 Marzo 2011 5 / 14 Cercare il minimo Particle Swam Optimization Si supponga di dover cercare il minimo di una funzione mutivariata complicata. Come procedereste? Una possibilità è usare un algoritmo greedy, che si comporta in maniera localmente ottima. Purtroppo questi algoritmi tendono a restituire dei minimi locali. Per ovviare questo problema si usano algoritmi che non scelgono sempre la soluzione ottima. Questi algoritmi sono in genere probabilistici e non sempre hanno una caratterizzazione matematica precisa. L. Albergante (Univ. of Milan) PSO 28 Marzo 2011 6 / 14 Cercare il minimo Particle Swam Optimization Una semplice tecnica algoritmica per la soluzione di problemi di minimo è il cosiddetto “Particle Swarm Optimization”. In questo caso una serie di agenti esplorano lo spazio delle soluzioni in maniera tale da comportarsi come stormi di uccelli. L’agente con un più alto valore di fitness (la migliore soluzione trovata) tenderà ad essere il leader del gruppo, attorno al quale gli altri agenti in muovono. Ogni agente è caratterizzato da una posizione, ed una velocità (che controllerà come mi muovo nello spazio delle soluzioni). La velocità è controllata da diversi parametri fra cui la migliore soluzione trovata nella storia dell’agente e la migliore soluzione attualmente individuata. Gli agenti si muoveranno in tutte le tutte le dimensioni cercando la soluzione migliore. In generale è comunque preferibile limitare la velocità massima per evitare che gli agenti si disperdano troppo. Ad ogni posizione viene associata una fitness, ovvero un valore che misura la bontà di quella posizione (e.g. il valore della soluzione se stiamo cercando una valore massimo) L. Albergante (Univ. of Milan) PSO 28 Marzo 2011 7 / 14 Cercare il minimo Particle Swam Optimization L’algoritmo procede per intervalli di tempo discreti. L’agente i al tempo t è caratterizzato, per ogni dimensione j, dalla sua posizione (pi,j (t)) e velocità (vi,j (t)). Viene inoltre tenuta traccia della posizione con fitness massima dell’agente trovata fino al tempo t (bi,· ), e la posizione con fitness massima fra tutti gli agenti al tempo t (g· ). Velocità e posizione dell’agente i vengono aggiornati al tempo t + 1 come segue per ogni dimensione. vi,j (t + 1) = w · vi,j (t) + c1 · rand() · (bi,j − pi,j (t)) + c2 · rand() · (gj − pi,j (t)) pi,j (t + 1) = pi,j (t) + vi,j (t + 1) Si noti che i valori casuali sono in genere diversi. Il valore w è detto inerzia, ed è buona norma che lo si riduca iterazione dopo iterazione. L. Albergante (Univ. of Milan) PSO 28 Marzo 2011 8 / 14 Cercare il minimo Particle Swam Optimization Fatte queste premesse l’algoritmo procede come segue: PSO Inizializza i parametri e gli n agenti Inizializza le posizioni e velocità degli n agenti in maniera casuale while condizione do Riduci w t ←t +1 g· = arg min f (g· ), f (p1,· (t − 1)), f (p2,· (t − 1)), . . . , f (pn,· (t − 1)) for i = 1 to n do bi,· = arg min f (bi,· ), f (pi,· (t)) for j = 1 to dim do vi,j (t + 1) = w ·vi,j (t)+c1 ·rand()·(bi,j (t)−pi,j (t))+c2 ·rand()·((gj (t))−pi,j (t)) pi,j (t + 1) = pi,j (t) + vi,j (t + 1) end for end for end while L. Albergante (Univ. of Milan) PSO 28 Marzo 2011 9 / 14 Cercare il minimo Esercizio I Scrivere un programma in MATLAB che utilizzi il sistema sopra descritto per trovare il minimo della funzione di Rosenbrock f (x, y ) = (1 − x)2 + 100 · (y − x 2 )2 Disegnate l’evoluzione della configurazione degli agenti (usate plot). L. Albergante (Univ. of Milan) PSO 28 Marzo 2011 10 / 14 Cercare il minimo Esercizio II Scrivere un programma in MATLAB che utilizzi il sistema sopra descritto per trovare il minimo della funzione di Ackley a 3 dimensioni. Disegnate l’evoluzione della configurazione degli agenti (usate plot3). La funzione dovrebbe essere presente in MATLAB (ackleyfcn), in caso contrario scrivetela una voi (nel nostro caso n = 3): v u n u1 X xi2 F (~x ) = −20 · exp −0.2t · n i=1 ! n 1 X · cos(2πxi ) + 20 + exp(1) − exp n i=1 L. Albergante (Univ. of Milan) PSO 28 Marzo 2011 11 / 14 Fitting di funzioni Teoria Il problema di fittare una funzione può essere visto come un problema di minimizzazione. In particolare si vuole minimizzare lo scarto quadratico media tra la funzione che vogliamo fittare ed i dati. In particolare, siano x e y due vettori di dati con m componenti, ed f (x; k1 , . . . kn ) una funzione con n parametri. Allora si vuole minimizzare la funzione F (k1 , . . . kn ) = m X (f (xi ; k1 , . . . kn ) − yi )2 i=1 L. Albergante (Univ. of Milan) PSO 28 Marzo 2011 12 / 14 Fitting di funzioni Esercizio I Utilizzate il metodo del Particle Swam Optimization per la stima di parametri. Generate un vettore di interi consecutivi X ed applicategli la funzione f (X ) = X 2 + log(X ) + rand() Successivamente provate a fittare i dati con la funzione F (X ) = k1 + k2 ∗ X 2 + k3 ∗ log(X ) dove i k sono parametri da valutare. L. Albergante (Univ. of Milan) PSO 28 Marzo 2011 13 / 14 Fitting di funzioni Esercizio II Usate i metodi sopra citati per trovare un fit al caso migliore di InsertioSort. Provate a variare la funzione da fittare ed osservate cosa succede ai parametri. L. Albergante (Univ. of Milan) PSO 28 Marzo 2011 14 / 14