#Teoria
##Algorytmy heurystyczne vs Algorymtmy ewolucyjne
Działanie algortmów heurystycznych polega na znajdowaniu rozwiązań, jednak bez gwarancji znalezienia optymalnego rozwiązania. Przeszukiwanie rozwiązań w zadanej przestrzeni nie jest przeszukiwaniem ślepym tj. proces przeszukiwania jest oceniany pod względem zlanezionego rozwiązania. Algorytmy ewolucyjne inspirowane są teoriami doboru naturalnego, pozwalają na "wychodowanie" najlepszego rozwiązania. Wyszukiwanie postawionego problemu polega na zestawieniu ze sobą różnych możliwych rozwiązań, krzyżowaniu, rozmnażaniu, ocenie ich i wyborze najlepszego.
###Angorytm wspinaczkowy Należący do zbioru algorymów heurystycznych algorytm, którego działanie oparte jest na iteracyjnym poprawianiu otrzymywanych rozwiązań, jego ogólna zasada dziłania polega na wystartowaniu z losowego punktu, przeglądu oraz wyboru sąsiada który ma najlepszą wartość rozwiązania, działanie powtarzamy do osiągnięcia lokalnego maximum.
Ogólny szkielet algorymu wspinaczki:
Choose randomly initial solution x
Do
best <- first neighbor of x
For all y in the neighborhood of x
If (f(y) > f(best))
best <- y
endif
endfor
If (f(x) < f(best))
x <- best
continue <- true
else
continue <- false
endif
While continue == true
####Pojęcie sąsiedztwa
Ważne dla zrozumienia tego algorytmu jest pojęcie sąsiada. Sąsiedztwo jest zdefiniowane na przestrzeni stanów jako podobieństwo kompletnych rozwiązań.
W podejmowanym problemie (problem komiwojażera) przestrzenią stanów (rozwiązań) są kompletne ścieżki, podobieństwo kompletnych ścieżek (rozwiązań) polega na np. zamianie kolejności poszczególnych miast, czyli nie wielkiej modyfikacji poszczególnych rozwiązań (lokalne przeszukiwanie i poprawa rozwiązań) Do zdefiniowania lokalnego wyszukiwania i poprawiania trzeba zdefiniować:
-
reprezentacje rozwiązania
-
reprezentacje sąsiada
-
funkcję oceny rozwiązania
-
funkcję oceny sąsiada
-
sąsiedztwo (generowanie sąsiadów)
###Algorymt genetyczny (klasyczny) By zrozumieć zasadę działania tego algorytmu, trzeba przedstawić podstawowe pojęcia z dziedziny algorytmów ewolucyjnych:
-
Osobnik - przykładowe rozwiązanie zadania (punkt z przestrzeni stanów)
-
Populacja - zespół osobników zamieszkujących wspólne środowisko i konkurujących o jego zasoby.
-
Fenotyp - parametry (cechy) rozwiązania, które podlegają ocenie.
-
Genotyp - cechy rozwiązania (punktu z przestrzeni stanów) kodowane są w określony sposób, np. za pomocą ciągów binarnych ustalonej długości (odpowiednikiem genotypu osobnika jest w tym przypadku ciąg bitów).
-
Chromosom - miejsce przechowywania genotypu osobnika.
-
Kodowanie rozwiązań - sposób zapisania dowolnego dopuszczalnego rozwiązania problemu w postaci genotypu osobnika (np. ciągu bitów). Kodowanie musi zapewniać jednoznaczność dekodowania - każdemu genotypowi (np. każdej kombinacji bitów) musi odpowiadać pewne rozwiązanie zadania, czyli punkt z przestrzeni stanów. Musimy też się postarać, by każde rozwiązanie dało się zapisać w postaci genotypu.
-
Funkcja przystosowania (fitness) - funkcja pozwalająca dla danego osobnika określić jego jakość (z punktu widzenia rozwiązywanego problemu). Zakładamy, że jej wartości są rzeczywiste nieujemne oraz że wyższa wartość funkcji oznacza zawsze, że dany osobnik jest lepszy. W przypadku ewolucji naturalnej odpowiednikiem takiej funkcji jest ogólna ocena przystosowania osobnika do danego środowiska. W praktyce funkcja ta jest zwykle niewielką modyfikacją funkcji celu rozwiązywanego problemu
-
Funkcja celu - funkcja dla której szukane jest optymalne rozwiązanie
Etapy które można wyznaczyć w tym algorytmie to :
-
Kodowanie problemu
-
Dobieranie populacji początkowej
-
Stosowanie operatorów genetycznych - mutacji i krzyżowania
-
Liczenie wartości funkji celu osobników
-
Dokonanie selekcji osobników
-
Populacja końcowa staje się bieżącą, wracamy do punktu drugiego
Ogólny szkielet klasycznego algorytmu genetycznego:
losuj populacje();
for (...){ // po pokoleniach
sortuj populacje();
usuń najgorszych();
skrzyżuj najlepszych();
sortuj populacje(); //musimy posortować tutaj gdyż zwykle nie mutuje się najlepszego osobnika;
mutuj();
} //koniec pętli po pokoleniach
#Implementacja
Funkcja celu: problem komiwojażera
Celem jest znalezienie najkrótszej drogi łączącej wszystkie miasta zaczynającej się i kończącej się w określonym punkcie.
Powyższy rysunek ma na celu przedstawienie kilku założeń:
- każdy punkt jest ze sobą połączony
- punkty na siatce odpowiadają wartością w zaimlementowanej macierzy
- dla tras jest liczona tylko odległość (bez kosztów i czasu)
Przed implementacją warto zapoznać się ze wzorem na odległość dwóch punktów na płaszczyźnie:
Dla punktu z [Ux,Uy] do [Vx,Vy] wzór jest zdefiniowany następująco: sqrt((Ux-Vx)^2 + (Uy-Vy)^2)
##Wyniki
Szukanie trasy metodą genetyczną
0.0 , 1.0 | 0.0 , 2.0 | 1.0 , 2.0 | 2.0 , 1.0 | 1.0 , 0.0 | 0.0 , 0.0 | 0.0 , 0.0 |
Najkrótsza droga to: 6.0
Wyszukana w czasie 58397404 ns
Szukanie trasy metodą wspinaczkową
0.0 , 0.0 | 1.0 , 0.0 | 2.0 , 1.0 | 1.0 , 2.0 | 0.0 , 2.0 | 0.0 , 1.0 | 0.0 , 0.0 |
Najkrótsza droga to: 6.82842712474619
Wyszukana w czasie 11791317 ns
##Podsumowanie
Oba algorytmy nie zapewniają rozwiązania optymalnego czy poprawnego, zwłasza przy dużej liczbie danych. Zasadnicza różnica pomiędzy algorytmami leży w sposobie poszukiwania danego rozwiązania. Dla algorytmu wspinaczkowego proces ten będzie miał ... , natomiast w alogrytmie genetycznym dzięki procesowi krzyżowania możliwa jest
###Źródła
http://edu.pjwstk.edu.pl/wyklady/nai/scb/wyklad5/w5.htm
http://edu.pjwstk.edu.pl/wyklady/nai/scb/wyklad10/w10.htm
http://paradiseo.gforge.inria.fr/index.php?n=Doc.TutoMOLesson1