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