Przeskocz do treści

Delta mi!

Mrówki, czyli piękno metaheurystyk

Karolina Sołtys

o artykule ...

  • Publikacja w Delcie: maj 2008
  • Publikacja elektroniczna: 20-12-2010
  • Autor: Karolina Sołtys
    Afiliacja: studentka, Międzywydziałowe Indywidualne Studia Matematyczno-Przyrodnicze, Uniwersytet Warszawski

Jakie jest idealne rozwiązanie problemu algorytmicznego? Wydajne, proste, łatwe do przystosowania do innych zastosowań – i oczywiście dokładne. Często jednak nie potrzebujemy (lub nie możemy w rozsądnym czasie uzyskać) tej ostatniej cechy i jesteśmy skłonni zadowolić się dobrym oszacowaniem wyniku. W takich sytuacjach warto sięgnąć po metaheurystykę, czyli uniwersalny schemat przybliżonego rozwiązywania problemów optymalizacyjnych.

Co ciekawe, twórcy metaheurystyk w wielu przypadkach (algorytmy ewolucyjne, sieci neuronowe, systemy mrówkowe) czerpali inspirację z natury, gdyż to dla niej właśnie wydajność i łatwość dostosowania są sprawą kluczową, a prostota – częstą cechą zaproponowanych przez nią rozwiązań.

obrazek

Rys. 1a) mrówki wędrują pomiędzy gniazdem a źródłem pokarmu

Rys. 1a) mrówki wędrują pomiędzy gniazdem a źródłem pokarmu

obrazek

Rys. 1b) kładziemy przeszkodę; pozostały na ścieżce feromon sprawia, że mrówki z równym prawdopodobieństwem idą w obie strony

Rys. 1b) kładziemy przeszkodę; pozostały na ścieżce feromon sprawia, że mrówki z równym prawdopodobieństwem idą w obie strony

obrazek

Rys. 1c) na krótszej ścieżce wkrótce pojawia się więcej feromonu

Rys. 1c) na krótszej ścieżce wkrótce pojawia się więcej feromonu

Niekiedy są to rozwiązania naprawdę niebanalnych problemów. Na przykład – jak prawie ślepe mrówki, niepotrafiące się komunikować i dysponujące mocno ograniczoną pamięcią i intelektem, mają znajdować źródła pokarmu? Przez długi czas fakt, że jednak to robią i to bardzo sprawnie (w większości przypadków znajdują nawet najkrótszą drogę pomiędzy gniazdem a pokarmem), stanowił zagadkę dla myrmekologów. Odpowiedź może być zaskakująca – zachowaniem mrówek kierują jedynie trzy proste zasady. Pierwsza – każda mrówka znaczy swoje ślady feromonem, druga – owad wybiera ścieżkę z prawdopodobieństwem proporcjonalnym do ilości feromonu na niej, trzecia – feromon z czasem stopniowo odparowuje. Dlaczego to działa? Mrówka, która znajdzie krótką drogę do pokarmu, wróci do gniazda (prawdopodobnie po własnych śladach) szybciej niż inne. Trasa, którą podążyła, będzie więc pokryta podwójną warstwą feromonu, podczas gdy inne ścieżki w okolicy gniazda otrzymały tylko pojedynczą dawkę. Spowoduje to, że wychodzące z gniazda mrówki chętniej wybiorą tę właśnie ścieżkę, co zwiększy ilość feromonu na niej, co zachęci inne owady... Odparowywanie feromonu z kolei sprawia, że mrówki nie poprzestają na znalezieniu lokalnego maksimum i umożliwia im dostosowanie się do zmian środowiska (przykład na rysunku).

Spróbujmy teraz zamienić ten sprytny pomysł Matki Natury na metaheurystykę z prawdziwego zdarzenia. Chcielibyśmy uzyskać ogólny schemat rozwiązywania szerokiej klasy problemów, zacznijmy jednak nieco skromniej – od próby rozwiązania trudnego obliczeniowo problemu komiwojażera (wybieramy akurat ten problem, gdyż wydaje się on zbliżony do oryginalnego zadania mrówek – również sprowadza się do znalezienia pewnego rodzaju najkrótszej drogi w grafie). Przedstawmy teraz schemat algorytmu znanego pod nazwą Ant Colony Optimization (ACO).

Niech math będzie liczbą miast, a  math – liczbą mrówek, którymi dysponujemy. Utwórzmy tablicę math o wymiarach math reprezentującą ilość feromonu na ścieżkach pomiędzy dwoma miastami – math oznaczać będzie ilość feromonu na ścieżce z miasta math do miasta math (symetryczność ścieżek nie będzie nam potrzebna – równie dobrze możemy rozwiązywać asymetryczny problem komiwojażera) i zainicjujmy ją losowymi, małymi ilościami feromonu. Dalsza część algorytmu będzie się odbywała w turach, których liczbę math zadajemy z góry w zależności od tego, jak bardzo zależy nam na szybkości uzyskania odpowiedzi. W każdej turze tworzymy podobną do tablicy math tablicę math, na początku tury wypełnioną zerami, reprezentującą zmiany ilości feromonu na ścieżkach zachodzące w danej turze, a następnie zaczynamy po kolei wypuszczać mrówki z miasta startowego. Każda mrówka zakreśla w grafie jakiś cykl Hamiltona, postępując następująco: będąc w  math-tym mieście, przechodzi bezpośrednio do miasta math-tego z prawdopodobieństwem wprost proporcjonalnym do ilości feromonu w komórce math i z zachowaniem warunku, że nie wolno jej powrócić do miasta, które już zdążyła odwiedzić w tej turze. Gdy mrówka kończy wędrówkę, obliczana jest długość (suma wag krawędzi) math przebytego przez nią cyklu, a ilość feromonu na każdej ścieżce, którą przeszła mrówka, zwiększana jest o wartość math (zmiany te są na razie zapisywane w tablicy math).

Jednocześnie sprawdzamy, czy przebyty przez mrówkę cykl Hamiltona jest najlepszym z dotychczas znalezionych – w tym przypadku zapamiętujemy go. Po tym, jak wszystkie mrówki wrócą już do gniazda, do tablicy math dodajemy tablicę math, a następnie ilość feromonu w każdej komórce tablicy jest zmniejszana o math procent, co reprezentuje parowanie feromonu.

obrazek

Rys. 2 W Internecie można znaleźć kilka ciekawych programów służących zarówno do wizualizacji zachowania mrówek szukających pokarmu, jak też rozwiązujących problem komiwojażera. Ten zrzut ekranu pochodzi z programu AntSim.

Rys. 2 W Internecie można znaleźć kilka ciekawych programów służących zarówno do wizualizacji zachowania mrówek szukających pokarmu, jak też rozwiązujących problem komiwojażera. Ten zrzut ekranu pochodzi z programu AntSim.

Takie postępowanie promuje ścieżki wchodzące w skład wielu dość dobrych cykli Hamiltona, lecz pozwala się też wyróżnić ścieżce używanej rzadko, ale za to w wyjątkowo krótkich cyklach, co wydaje się rozsądne i zbliżone do rzeczywistego zachowania mrówek. Nie oznacza to jednak, że tego algorytmu nie można już udoskonalić – nasze elektroniczne mrówki nie muszą wszakże podlegać ograniczeniom nałożonym przez naturę na ich biologiczne krewniaczki. W szczególności nie muszą być ślepe – w praktycznych zastosowaniach ACO mrówki w wyborze ścieżek kierują się nie tylko ilością feromonu na nich, ale też ich długością. Najczęściej używanym wzorem na prawdopodobieństwo wyboru ścieżki. z miasta math do nieodwiedzonego wcześniej miasta math jest

display-math

gdzie math  jest zbiorem miast jeszcze nieodwiedzonych, mathmath są pewnymi parametrami, a math jest odległością miasta math od miasta math (badania empiryczne wykazały, że algorytm osiąga najlepsze wyniki z  math, math, współczynnikiem parowania math i liczbą mrówek math ). Dodatkowo nasze mrówki mogą się komunikować i zapamiętywać najlepsze do tej pory znalezione cykle – częstym udoskonaleniem algorytmu jest zwiększanie w każdej turze ilości feromonu na najlepszym cyklu, nawet jeśli w danej turze wybrało go niewiele mrówek. Poza tym elektronicznym owadom niepotrzebne jest gniazdo – mrówki nie muszą startować wszystkie z jednego miasta, mogą być rozmieszczone losowo, co daje lepsze wyniki. Tak udoskonalony algorytm może już śmiało konkurować z innymi metaheurystykami. Testy wykazały, że dla dużych math ACO średnio osiąga lepsze wyniki niż najczęściej stosowane heurystyki – tzw. symulowane wyżarzanie i algorytm ewolucyjny, a poza tym szybciej (mimo dość dużej złożoności math ) znajduje dość dobre rozwiązania. Dużą zaletą jest też łatwość implementacji (w języku C++ ten algorytm można zakodować w kilkunastu linijkach). Jednym z nielicznych minusów tego podejścia jest dość duże wykorzystanie dodatkowej pamięci (potrzebujemy jej math).

ACO, jako prawdziwa metaheurystyka, może być stosowana do bardzo różnorodnych zadań. Wydaje się, że można ją przystosować do rozwiązywania bardzo wielu problemów optymalizacyjnych – wystarczy, by każde rozwiązanie naszego problemu dało się podzielić na fragmenty, lokalne „atomowe” decyzje, które razem wyznaczają rozwiązanie i które są od siebie możliwie niezależne (oczywiście, zależy nam na tym, by przestrzeń tych decyzji była możliwie mała). Potem już tylko na przestrzeni rozwiązań ustalamy funkcję celu, określającą jakość rozwiązania i ewentualnie opracowujemy jakąś pomocniczą heurystykę ułatwiającą podejmowanie lokalnych decyzji (w przypadku problemu komiwojażera była to odwrotność odległości pomiędzy miastami) – i dalszym rozwiązywaniem zadania możemy obarczyć mrówki w dobrze już nam znany sposób (wszystkie opcje, które mrówka będzie mogła wybrać w poszczególnych decyzjach, otrzymają własne zbiorniczki z feromonem, który będzie do nich dolewany po zakończeniu tury proporcjonalnie do jakości rozwiązań, w których uczestniczyły; pełniejsze zbiorniczki będą bardziej kuszące dla mrówek; feromon będzie z czasem odparowywał ze zbiorniczków). W praktyce mrówki są wykorzystywane w sterowaniu ruchem w sieciach komputerowych, w kolorowaniu grafów i znajdowaniu skojarzeń.