Politechnika Wrocławska Wydział Elektroniki INFORMATYKA SYSTEMÓW AUTONOMICZNYCH Autor: Łukasz Patyra indeks: 133325 Prowadzący zajęcia: dr inż. Marek Piasecki Ocena pracy: Wrocław 2007
Spis treści 1 Wstęp 3 1.1 Definicja..................................... 3 1.2 Algorytmy heurystyczne............................ 3 1.3 Potencjalne zastosowania............................ 3 2 Zastosowanie praktyczne 4 2.1 Założenia wstępne................................ 4 2.2 Określenie funkcji celu............................. 4 2.3 Wybór algorytmu................................ 5 2.3.1 Algorytm genetyczny.......................... 5 2.3.2 Symulowane wyżarzanie........................ 6 2.4 Projekt programu notacja UML...................... 7 Literatura 10 Politechnika Wrocławska Wydział Elektroniki 2
1 Wstęp 1.1 Definicja Heurystyka (grec. heurisko znajduję, odkrywam) umiejętność wykrywania nowych faktów i związków między faktami (a zwłaszcza stawiania hipotez). W informatyce heurystyka to metoda znajdowania rozwiązań, dla której nie ma gwarancji znalezienia rozwiązania optymalnego, a często nawet prawidłowego. Rozwiązań tych używa się np. wtedy, gdy pełny algorytm jest z przyczyn technicznych zbyt kosztowny, czasochłonny, lub gdy nie jest nawet znany. Metodę używa się też często do znajdowania rozwiązań przybliżonych, na podstawie których później wylicza się ostateczny rezultat pełnym algorytmem. To ostatnie zastosowanie szczególnie dotyczy przypadków, gdy heurystyka jest wykorzystywana do nakierowywania pełnego algorytmu ku optymalnemu rozwiązaniu, aby zmniejszyć czas działania programu w typowym przypadku bez poświęcania jakości rozwiązania. 1.2 Algorytmy heurystyczne Mianem algorytmów heurystyczych są określane algorytmy, które pozwalają na znalezienie przybliżonego rozwiązania problemu (często NP trudnego), który nie może być rozwiązany w sposób optymalny ze względu na: brak algorytmu jego rozwiązania, złożoność obliczeniową algorytmu optymalnego oraz (co bezpośrednio z tego wynika), nieopłacalnie długi czas działania czyli również wysokie koszty otrzymania optymalnego wyniku. 1.3 Potencjalne zastosowania szeregowanie zadań na procesorach, rozpoznawanie znaków, generowanie planu zajęć dla grupy osób,... Politechnika Wrocławska Wydział Elektroniki 3
2 Zastosowanie praktyczne Jako przykład zastosowania algorytmu heurystycznego wybrałem program asystenta organizującego czas/miejsce spotkań osób w dużych grupach zawodowych/towarzyskich. Dokładniej zaproponowałem sposób realizacji programu mającego na celu wygenerowanie planu zajęć dla grupy studentów w danym semestrze. 2.1 Założenia wstępne Program ma pozwalać na generowanie planów zajęć dla grupy studentów zgodnie z siatką zajęć określoną w katalogu kursów. Zajęcia będą generowane dla wybranej grupy studentów (np. kierunek, specjalność, profil dymplomowania) i na określony semestr studiów. 2.2 Określenie funkcji celu W celu generowania planu zajęć konieczne jest zdefiniowanie funkcji celu, która będzie określała jakość planu. W tym celu przyjąłem kryteria mówiące że: 1. plan jest lepszy, jeżeli zajęcia nie zaczynają się wcześnie rano i nie kończą późnym wieczorem. 2. plan jest tym lepszy, im mniej jest przerw między kolejnymi zajęciami, Wartość funkcji celu dla danego planu zależeć zatem będzie od wartości obu z tych kryteriów. Chcąc uwzgędnić kryterium 1 przyporządkowałem określone wagi dla zajęć rozpoczynających się o okreśłonej porze (tab. 1): Tabela 1: Wagi poszczególnych terminów zajęć godzina rozpoczęcia zajęć waga przed 9:00 3 od 9:00 2 od 11:00 1 od 15:00 2 od 18:00 3 Wartość kryterium 1 zapisałem wzorem: k 1 = ni=1 W i n n = liczba zajęć w tygodniu (1) Politechnika Wrocławska Wydział Elektroniki 4
Z kolei chcąc uwzględnić kryterium 2 zauważyłem, że minimalizacja liczby przerw między zajęciami to z praktycznego punktu widzenia to samo, co minimalizacja czasu jaki student spędza (powinien spędzać) na uczelni w ciągu tygodnia. Można zatem zapisać: k 2 = pt d=pn C o czas rozpoczęcia zajęć w danym dniu C z czas zakończenia zajęć w danym dniu C d, gdzie: C d = C z C o (2) Funkcja celu, którą należy zoptymalizować może mieć postać: F opt = min(k 1 k 2 ) (3) 2.3 Wybór algorytmu Kolejnym krokiem było wybranie odpowiednego typu algorytmu, który chciałbym użyć do rozwiązania zadania. Ponieważ dotychczas implementowałem dwa algorytmy heurystyczne (algorytm genetyczny oraz symulowane wyżarzanie), toteż najpierw rozpatrzyłem możliwość zastosowania właśnie jednego z nich. 2.3.1 Algorytm genetyczny Algorytm genetyczny polega na poszukiwaniu maksymalnej wartości funkcji przystosowania opartego na mechanizmach doboru naturalnego oraz dziedziczności łączącego ewolucyjną zasadę przeżycia najlepiej przystosowanych osobników z systematyczną i po części losową wymianą informacji. [1] [2] Kolejne kroki ogólnego algorytmu genetycznego: 1. Generacja populacji początkowej, 2. Wyznaczenie funkcji przystosowania osobników, 3. Wybór puli rodzicielskiej, 4. Krzyżowanie, 5. Mutacja nowych osobników, 6. Selekcja nowej populacji. Stosując algorytm genetyczny problem pojawiłby się przy krzyżowaniu osobników, ponieważ nawet jeśli krzyżowalibyśmy dwa osobniki, które określają dobry plan (zajęcia nie nachodzą na siebie) to potomek jakiego otrzymamy może tego warunku nie spełniać. Politechnika Wrocławska Wydział Elektroniki 5
Byłby on bezużyteczny. W związku z tym zastosowanie algorytmu genetycznego do rozwiązania postawionego zadania nie jest trywialne. 2.3.2 Symulowane wyżarzanie Wyżarzanie jest pojęciem metalurgicznym. W sytuacji, gdy atomy w kawałku metalu są rozmieszczone przypadkowo, metal jest kruchy i łamliwy. W procesie wyżarzania metal podgrzewa się do wysokiej temperatury powodując gwałtowne wstrząsanie atomami. Jeżeli będzie on nagle ochłodzony to mikrostruktura zostanie uwięziona w niestabilnym stanie przypadkowym. Jeśli jednak ochładzanie będzie powolne to wraz ze spadkiem temperatury atomy będą tworzyły regularne układy, dość stabilne w danej temperaturze. Jeśli spadek temperatury jest dostatecznie wolny to w rezultacie metal osiągnie stabilną, uporządkowaną strukturę. [2] Podobny proces występuje przy optymalizacji. Symulowane wyżarzanie można zrealizować w zadaniu optymalizacji przez losowe zakłócenie zmiennych niezależnych i wybór najlepszej wartości funkcji dla każdego przypadkowego zbioru zmiennych. Na początku używa się generatora liczb losowych o dość dużym odchyleniu standardowym. Po wielu próbach zbiór, który daje najlepsze wartości funkcji staje się centrum, wokół którego wykonuje się ruchy dla następnej wartości temperatury (odchylenie standardowe generatora liczb losowych). Temperatura jest redukowana i przeprowadza się nowe próby. Bardzo ważnym zagadnieniem dla algorytmu wyżarzania jest wybór temperatury początkowej, końcowej a także sposób obniżania temperatury. Pewną metodą jest mnożenie za każdym razem przez liczbę stałą powiedzmy c, którą można obliczyć za pomocą następującego wzoru: c = exp(ln(koniec/start)/(n 1)) (4) gdzie start i koniec to temperatury początkowa i końcowa, a n to liczba temperatur. Powyższy opis algorytmu symulowanego wyżarzania można przedstawić w następujących krokach (minimalizacja funkcji F(w)): [3] 1. Losowy wybór punktu startowego w. Przyjęcie temperatury T = Tmax, 2. Wyznaczenie wartości funkcji w punkcie w - F(w), 3. Wyznaczenie w = w + w, gdzie w jest realizacją zmiennej, losowej o rozkładzie normalnym z medianą w punkcie w i średnią wariancją równą T, 4. Wyznaczenie wartości funkcji w nowym punkcie - F(w ), 5. Podstawienie wartości w do w z pewnym prawdopodobieństwem 6. Zmniejszenie temperatury T = ct, gdzie c jest stałą z przedziału (0,1), Politechnika Wrocławska Wydział Elektroniki 6
7. Zwiększenie kroku iteracyjnego i powrót do kroku 3. Algorytm ten jest zatem łatwiejszy do zaadaptowania, ponieważ nie istnieje niebezpieczeństwo popsucia planu w wyniku krzyżowania (jak to miałoby miejsce w przypadku algorytmu genetycznego). W przypadku wyżarzania modyfikacji poddawane zostają wybrane (najlepsze) plany, a sama modyfikacja może polegać np. na: 1. zmianie terminu danych zajęć na inny (wolny) lub też zamiana dwóch zajęć miejscami, 2. zmianie prowadzącego, 3. zmianie sali. Opcje 2 i 3 modyfikacji są mniej istotne ze względu na charakter optymalizacji. 2.4 Projekt programu notacja UML Ze względu na obszerność projektu programu generującego plany zajęc, w celu przybliżenia jego struktury poniżej zamieszczam wybrane diagramy UML przedstawiające fragment modelowanego przeze mnie systemu. Obejmują one: diagram klas rys. 1, diagram sekwencji przedstawiający proces generacji planu rys. 2, Na diagramie klas (rys. 1) na szczególną uwagę zasługują klasy Schedule (reprezentującą dany plan) oraz Annealing (odpowiedzialna za algorytm wyżarzania). Metodą, która wylicza funkcję celu dla danego planu jest metoda computeadjustment() z klasy Schedule. Politechnika Wrocławska Wydział Elektroniki 7
Rysunek 1: Diagram klas Politechnika Wrocławska Wydział Elektroniki 8
Rysunek 2: Diagram sekwencji generacja planu Politechnika Wrocławska Wydział Elektroniki 9
Literatura [1] D. E. Goldberg Algorytmy genetyczne i ich zastosowania, Wydaw. Naukowo Techniczne, Warszawa, 1995. [2] T. Walkowiak, Wykład: Metody optymalizacji globalnej. Algorytmy genetyczne i symulowane wyżarzanie, czerwiec, 2007. [3] http://pl.wikipedia.org, czerwiec 2007. Politechnika Wrocławska Wydział Elektroniki 10