PSO - Particle Swarm Optimization

2011-07-19 12:34:53, wyświetleń: 993 [ historia ]


Treść pochodzi z devblogu o sztucznej inteligencji:
jakubniwa.pl

Czasami zachodzi potrzeba optymalizacji parametrów jakiejś skomplikowanej, nieregularnej funkcji(np. sieć neuronowa); Do rozwiązania tego problemu możemy użyć metody gradientowe lub quasi-newtonowskie, lecz co zrobić, gdy funkcja jest nieróżniczkowalna a nawet nieciągła? Wtedy z pomocą przychodzą metody meta heurystyczne. Jedną z nich jest PSO, czyli optymalizacja rojem cząsteczek. Czym PSO odróżnia się od innych meta heurystyk? Mianowicie nadaje się do optymalizacji problemów dynamicznych lub z dynamicznie zmieniającą się dziedziną.

Więc z czego "składa się" taki rój cząsteczek:
zdjecie

Każdy rój składa się z :
- roju(jego parametrów)
- cząsteczek

Cząsteczki:
Pozycja : Wektor pozycji - rozmiar zależny od wymiarowości zadania;
Inicjalizowany liczbami pseudolosowymi o rozkładzie jednorodnym od zadanej wartości minimalnej do maksymalnej. Jednakże, jeżeli coś wiemy na temat optymalizowanego zadania możemy przyjąć liczby bliskie zakładanemu optimum.
Przyśpieszenie: Wektor przyśpieszenia -rozmiar zależny od wymiarowości zadania;
Inicjalizowany liczbami pseudolosowymi o rozkładzie jednorodnym od ujemnej różnicy zadanej wartości maksymalnej i minimalnej, do dodatniej wartości takiej różnicy .
Każdy element wektoru odnosi się do prędkości dla wymiaru n, gdzie n jest numerem elementu w wektorze.
Najlepsza pozycja: Wektor najlepszej pozycji - rozmiar zależny od wymiarowości zadania;
Inicjalizowany wektorem pozycji przy tworzeniu cząsteczki.
Jego wartość zostaje zmieniona, gdy cząsteczka znalazła lepiej oceniane położenie.
Wektor ten staje się później jednym z dwóch atraktorów cząsteczki.

Rój:
Cząsteczki: Wektor zawierający wszystkie cząsteczki roju jako obiekty.
Najlepsza pozycja: Wektor najlepszej pozycji -rozmiar zależny od wymiarowości zadania;
Inicjalizowany wektorem pozycji pierwszej stworzonej cząsteczki.
Jego wartość zostaje zmieniona, gdy jedna z cząsteczek roju znalazła lepiej oceniane położenie od swojego i jest ono lepiej oceniane niż aktualne najlepsze położenie roju. Wektor ten staje się później jednym z dwóch atraktorów cząsteczek.


Parametry algorytmu:
Omega:
Parametr odpowiadający za "wygasanie" ruchu cząsteczek.

dla Omega = 1: cząsteczki nie zwalniają z upływem czasu
dla Omega < 1: cząsteczki zwalniają z upływem czasu
dla Omega > 1: cząsteczki przyśpieszają z upływem czasu

fiCząsteczek:
Parametr odpowiedzialny za indywidualność cząsteczek. Bezpośrednio zależny od fi roju. Gdy jest większy niż fi roju cząsteczki stają się bardziej indywidualne - ważniejszym atraktorem jest ich własna najlepsza pozycja.

fi roju :
Parametr odpowiedzialny za grupowość-stadność cząsteczek. Bezpośrednio zależny od ficząsteczek. Gdy jest większy niż fi cząsteczek, cząsteczki stają się bardziej stadne - ważniejszym atraktorem jest najlepsza pozycja całego roju.


Znaczenie parametrów
To, że cząsteczki oscylują między swoimi atraktorami zgodnie z zasadą superpozycji nie jest złym / szkodliwym zjawiskiem - ponieważ przy dynamicznie zmieniającej się funkcji / dziedzinie zadania mają one większą szansę na szybsze znaleznienie nowego optimum całego roju, który stanie się atraktorem dla reszty cząsteczek.

Możemy to zobaczyć poniżej:
zdjecie

a tutaj w większej skali:
zdjecie

Purpurowe sfery są najlepszymi pozycjami wg najbliżej położonych cząsteczek.
Żółte sfery sa cząsteczkami.
optymalizowana jest funkcja funkcja Ackleya 2-D, mapa w skali logarytmicznej.

Algorytm:


terminalCondition:
Może być może być flagą informującą nas o tym, czy minęło x iteracji lub został znaleziony punkt z pewną dokładnością.
rP:
Losowy parametr odpowiedzialny za indywidualność cząsteczek. Działa bliźniaczo do fi cząsteczek, lecz losowany za każdym razem, a fi cząsteczek jest ustalony z góry. Liczba pseudo losowa o rozkładzie jednorodnym z zakresu 0 .. 1.
rS:
Losowy parametr odpowiedzialny za stadność cząsteczek. Działa bliźniaczo do fi roju, lecz losowany za każdym razem, a fi roju jest ustalony z góry. Liczba pseudo losowa o rozkładzie jednorodnym z zakresu 0 .. 1.


Działanie algorytmu
Zasada działania algorytmu jest dość prosta:
-Obliczamy przyspieszenie dla każdej cząsteczki z osobna
-zmieniamy jej pozycje zgodnie z wyliczonym przyśpieszeniem.
-wyliczamy wartość funkcji dla jej aktualnej pozycji
-następnie sprawdzamy czy aktualna pozycja jest lepsza od najlepszej pozycji wg. cząsteczki, jeżeli tak to ją zmieniamy i sprawdzamy czy jest lepsza od najlepszej pozycji wg roju, jeżeli tak, to też ją zmieniamy.

Postępujemy tak do czasu, gdy aktywuje się nasz warunek stopu.

Animacje prezentujące działanie algorytmu dla róznych funkcji można zobaczyć na moim kanale youtube:
http://www.youtube.com/user/kayou666
zdjecie


Dziękuję za przeczytanie tekstu. Wskazanie błędów/komentarze/prośby o wyjaśnienie mile widziane.

Gorąco zapraszam na http://jakubniwa.pl po więcej!

Mogę udostępnic kod w pythonie, proszę wysłać PW.


Autor: Kayou

Komentarze Artykuły mogą być komentowane wyłącznie przez zarejestrowanych użytkowników.
Redakcja zastrzega sobie prawo do skracania, usuwania komentarzy o treściach wulgarnych, obraźliwych oraz niezgodnych z polskim i miedzynarodowym prawem. Unit1.pl Team nie ponosi odpowiedzialności za treść komentarza.