You are on page 1of 79

SPIS TREŚCI

1. Wstęp 3
2. Podstawy teoretyczne algorytmów mrówkowych 5
2.1. Problemy NP-zupełne 5
2.2. Świat mrówek 6
2.3. Algorytmy mrówkowe 9
2.3.1. Ant System 10
2.3.2. Elitist Ant System 12
2.3.3. Rank-Based Ant System 13
2.3.4. Max-Min Ant System 13
2.3.5. Ant Colony System 14
2.3.6. Ant-Q 15
2.4. Rozwiązywane problemy 15
2.4.1. Problem komiwojażera 15
2.4.2. Problem najkrótszej drogi 16
2.4.3. Problem kwadratowego przydziału 17
2.4.4. Problem plecakowy (Knapsack Problem) 17
3. Porównanie skuteczności wybranych algorytmów mrówkowych 19
3.1. Co porównywać? 19
3.2. Uczciwa rywalizacja 23
4. Metoda rozwiązania 26
4.1. Porównywane algorytmy 26
4.2. Badane problemy 27
4.3. Strojenie algorytmów 27
4.3.1. Zaproponowana metoda 27
4.3.2. Wady zastosowanej metody 30
4.3.3. Propozycje innych metod 30
4.4. Porównanie skuteczności algorytmów 31
5. Opis implementacji 35
5.1. Aplikacja porównująca skuteczność wybranych algorytmów 35
5.2. Reprezentacja problemów 38
5.3. Implementacja algorytmów 41
5.4. Implementacja interfejsu graficznego 43
5.5. Implementacja metody badania 44
6. Wyniki badań 49
6.1. Strojenie algorytmów 49
6.1.1. Faza 1 49
6.1.2. Faza 2 50
6.1.3. Badanie wpływu parametrów na wyniki algorytmów 51
6.1.3.1. Badanie wpływu parametru α 51
6.1.3.2. Badanie wpływu parametru β 51
6.1.3.3. Badanie wpływu parametru τ0 53
6.1.3.4. Badanie wpływu parametru ρ 53
6.1.3.5. Badanie wpływu parametru q 54
6.1.3.6. Badanie wpływu parametru e 57
6.1.3.7. Badanie wpływu parametru γ 58
6.1.3.8. Badanie wpływu parametru q0 59
6.1.3.9. Badanie wpływu parametru w 60
6.1.3.10. Badanie wpływu parametrów τmin i τmax 60
6.1.4. Wnioski 61
6.2. Porównanie skuteczności algorytmów 61
6.2.1. Porównanie uzyskanych wyników 62
6.2.2. Szybkość algorytmów 66
6.2.3. Uzasadnienie wyników 67
6.2.3.1. Średnie rozwiązania 67
6.2.3.2. Entropia i odchylenie standardowe 71
6.2.4. Wnioski 75
7. Zakończenie 77
8. Bibliografia 78


 
1. WSTĘP

W informatyce istnieje klasa złożonych problemów optymalizacyjnych zwanych


problemami NP-zupełnymi. Są to problemy o tak dużej liczbie możliwych
rozwiązań, że ich badacze ciągle starają się udowodnić, że ich rozwiązanie da się
sprowadzić do czasu wielomianowego. Oznaczałoby to, że funkcja czasu
rozwiązywania problemu, w zależności od ilości elementów reprezentujących
problem, byłaby wielomianowa, czyli miałaby postać:

∑ (1.1)

gdzie:

• ai - są współczynnikami wielomianu
• n – stopień wielomianu

Równolegle do tych badań powstało wiele sposobów znajdowania rozwiązań


przybliżonych, niekoniecznie najlepszych, ale za to odnajdowanych w czasie o wiele
krótszym, niż w przypadku sprawdzania wszystkich możliwych kombinacji.
Większość tych rozwiązań opiera się na różnych algorytmach sztucznej inteligencji,
które czerpią inspirację z obserwacji naturalnego środowiska. Jednym z takich
narzędzi do rozwiązywania problemów NP-zupełnych są algorytmy mrówkowe,
czerpiące inspirację z obserwowania świata kolonii żywych mrówek.

Algorytmy te zostały po raz pierwszy zaimplementowane w 1992 roku, przez Marco


Dorigo. Od tego czasu doczekały się wielu ulepszeń, powstało wiele ich
modyfikacji. W pracy tej podjąłem próbę porównania skuteczności kilku, wybranych
spośród tej grupy, algorytmów i oceny ich właściwości

Celem pracy było zaimplementowanie wybranych algorytmów mrówkowych, a


następnie porównanie ich skuteczności przy rozwiązywaniu wybranych problemów
oraz ocena ich właściwości.

Zakres pracy obejmował następujące zagadnienia:

• Przeprowadzenie analizy właściwości algorytmów mrówkowych


• Zaimplementowanie wybranych algorytmów mrówkowych


 
• Zaproponowanie i opracowanie metody oceny skuteczności algorytmów
mrówkowych
• Zastosowanie i zaimplementowanie procedur do rozwiązywania wybranych
zadań
• Porównanie skuteczności zaimplementowanych procedur


 
2. PODSTAWY TEORETYCZNE ALGORYTMÓW MRÓWKOWYCH

W rozdziale tym zostały omówione zagadnienia problemów NP-zupełnych.


Opisałem świat mrówek naturalnych i sposób w jaki programiści przenieśli ich
zachowania do algorytmów mrówkowych. Przedstawiłem odmiany tych algorytmów
oraz problemy przeze mnie rozwiązywane.

2.1 PROBLEMY NP-ZUPEŁNE

Przytoczony tutaj problem komiwojażera opisywany jest szerzej w punkcie 2.4.1. W


problemie tym komiwojażer musi odwiedzić pewną grupę miast, po czym wrócić do
miasta początkowego. Rozwiązanie problemu polega na tym, aby znaleźć taką
kolejność odwiedzania miast, żeby przebyta przez niego droga była jak najkrótsza.

Wyobraźmy sobie, że danych miast jest n. Stojąc zatem w mieście macierzystym


komiwojażer ma do wyboru n - 1 miast, które mógłby odwiedzić. Jeśli wybierze
któreś z nich, w kolejnym kroku, po odliczeniu tych już odwiedzonych, ma do
wyboru n - 2 miast. Będąc w kolejnym n – 3 miast … i w ten sposób dociera aż do
ostatniego z którego może tylko wrócić do pierwszego.

Nietrudno więc dojść do wniosku, że w sumie możliwych kombinacji jego drogi


może być (n – 1)(n – 2)(n – 3)…· 2 · 1 1 !

Oznacza to, że nawet jeśli zbierzemy tak dużą liczbę komputerów, że będą w stanie
przeliczyć wszystkie kombinacje dla np. 1000 miast w ciągu zaledwie jednej doby,
to dołożenie kolejnego, tysiąc pierwszego miasta, wydłuży czas obliczeń tysiąc razy,
czyli do ponad 3 lat, a dołożenie jeszcze kolejnego wydłuży to do czasu dłuższego
niż trwanie naszej ery.

Problem komiwojażera jest zaledwie jednym z wielu tak złożonych problemów.


W informatyce i optymalizacji powstało nawet określenie na problemy tego typu:
problemy NP-zupełne, bądź NP-trudne.

Z problemami tymi nieraz, niestety, trzeba faktycznie zmierzyć się w świecie


rzeczywistym – a zatem trzeba je jakoś rozwiązywać. A ponieważ nie da się ich
rozwiązać dokładnie w rozsądnym czasie, zaczęto szukać metod rozwiązujących je z


 
pewnym przybliżeniem, ale za to w czasie o wiele krótszym. Jednym z takich
sposobów są właśnie algorytmy mrówkowe o których traktuje ta praca.

2.2 ŚWIAT MRÓWEK

Wiele algorytmów sztucznej inteligencji szukało inspiracji w świecie naturalnym,


podobnie jest w przypadku algorytmów mrówkowych.

„Mrówki są owadami społecznymi, żyjącymi w koloniach, a ich zachowania są


skierowane bardziej na przeżycie społeczności jako całości niż pojedynczego
osobnika” [10]

Pojedyncza mrówka – owad niemalże zupełnie ślepy, głuchy i do tego o bardzo


niskiej inteligencji [2]. Samodzielnie skazany na śmierć, nie jest w stanie odnaleźć
elementarnego składnika potrzebnego do życia – pożywienia. Jednak, jak da się
zauważyć, mrówki żyją od wieków i mają się całkiem dobrze. Istotne jest, że nie
żyją w pojedynkę, a w grupach, tworząc intrygujące mrowiska i całe siatki dróg i
połączeń.

Wśród ludzi są tacy, którzy w dzieciństwie patrzyli na mrówki podążające


niewidzialnymi autostradami i złośliwie próbowali jakoś je zatrzymać – np. poprzez
postawienie przeszkody na ich drodze. Po takiej próbie zablokowania – mrówki nie
dość, że nie zatrzymywały się, to jeszcze przestawiały się na nowe „ścieżki”,
początkowo poruszając się bardzo chaotycznie, a w końcu uporządkowując swój
ruch tak, że droga która wybierały była najkrótszą drogą do pożywienia. W jaki
sposób tak prosto skonstruowane stworzenia są w stanie znaleźć najkrótszą drogę?
Na czym opiera się ta zdolność niesamowitego przystosowywania się do zmian w
otaczającym je środowisku, np. znalezienie nowej, najkrótszej drogi, w chwili gdy
stara przestaje spełniać swoje zadanie? I czy my, ludzie, możemy wykorzystać te
same techniki do rozwiązywania naszych problemów?

Okazuje się, że kluczem do sukcesu jest komunikacja między mrówkami. Podczas


swojego marszu z mrowiska do źródeł pożywienia, i z powrotem, mrówki rozkładają
na ziemi pewną substancje zapachową zwaną feromonem, tworząc tym samym
ścieżki feromonowe [1][2][9][10]. Mrówki potrafią wyczuć feromon i mają


 
tendencję do wybierania z większym prawdopodobieństwem drogi oznaczonej
większą ilością feromonu. Jest to rodzaj komunikacji pośredniej zwanej inaczej
stygmergią [2].

Aby to udowodnić przeprowadzono liczne badania, np. w 1989 roku badania Goss’a,
Aron’a, Deneubourg’a i Pasteels’a [2]. Stworzyli oni połączenie pomiędzy
mrowiskiem i pożywieniem za pomocą dwóch mostów. Mrówki były wypuszczone,
aby mogły poruszać się między mrowiskiem i pożywieniem, a ich zachowanie było
bacznie obserwowane.

W pierwszym eksperymencie długość mostów była różna. Jeden z mostów był dwa
razy dłuższy niż drugi:

  pożywienie
mrowisko

Rys. 2.1  Eksperyment z mostami, przypadek dla różnej długości mostów

Dało się zauważyć, że już po kilku chwilach wszystkie mrówki podążały krótszym
mostem. Czemu tak się działo? Gdy mrówki są wypuszczone z gniazda idą w stronę
rozwidlenia. Gdy docierają do niego, część z nich wybiera drogę krótszą, część
dłuższą – z takim samym prawdopodobieństwem, więc ich liczba na każdej z dróg
jest w przybliżeniu taka sama. Jednak mrówki które wybrały krótszą drogę szybciej
powrócą z pożywieniem do owego rozwidlenia. Położą przez to więcej feromonu,
niż mrówki z konkurencyjnej drogi. Przez to owady, które będą docierały do
rozwidlenia i będą musiały dokonać wyboru drogi, po ich powrocie, częściej
wybiorą drogę krótszą. Spowoduje to, że na tej drodze będzie jeszcze więcej
feromonu, co w sumie doprowadzi do bardzo szybkiego skierowania całego ruchu na
krótszy most.

W drugim eksperymencie oba mosty były takiej samej długości:

 
mrowisko pożywienie
 

Rys. 2.2  Eksperyment z mostami, przypadek dla takiej samej długości mostów


 
Początkowo taka sama liczba mrówek podążała każdym z mostów, co jest w
zasadzie zgodne z intuicją. Jednak po jakimś czasie cały ruch był kierowany na
tylko jeden z mostów – niekoniecznie ten sam dla różnych eksperymentów.

Działanie takie ma swoje uzasadnienie. Początkowo na żadnym z mostów nie było


feromonu – mrówki wybierały drogi z takimi samymi prawdopodobieństwami –
podobna ich liczba szła zarówno pierwszym, jak i drugim mostem. Jednak nie była
to dokładnie taka sama ilość. Zawsze o kilka mrówek więcej przechodzi jednym z
mostów. Wystarczy aby na jednym z nich była zaledwie jedna mrówka więcej, a już
spowoduje to, że odłożone zostanie na nim więcej feromonu – a przez to –
następnym razem jeszcze więcej mrówek wybierze tą drogę. Oczywiście
następstwem tego będzie to, że odłoży się tam jeszcze więcej feromonu…
aż w końcu wszystkie mrówki wybierać będą tylko tą jedną drogę. Takie zjawisko
kumulowania nazywamy zjawiskiem sprzężenia zwrotnego [2].

W trzecim eksperymencie stworzono jeden most:

  mrowisko pożywienie

Rys. 2.3  Eksperyment z mostami, przypadek dla jednego mostu

Pozwolono się poruszać mrówkom między mrowiskiem i pożywieniem. Rozkładały


one w tym czasie feromon. Po jakimś czasie połączono mrowisko i pokarm jeszcze
jednym mostem, którego droga była o wiele krótsza, więc teoretycznie bardziej
atrakcyjna dla mrówek:

 
mrowisko  pożywienie 
 

Rys. 2.4  Eksperyment z mostami, przypadek dla jednego mostu, dokładanie kolejnej, lepszej drogi

Jak się okazało – mimo to – mrówki nie zmieniły swojej drogi, a ciągle podążały
dłuższą drogą. Wytłumaczenie tego zjawiska jest następujące: nawet jeśli jakaś
mrówka przypadkowo zabłąkała się w lepszą drogę, to stężenie feromonu jaki
zostawiła nie miało szans rywalizacji z feromonem pozostawianym przez dłuższy
czas na gorszej jakościowo drodze. Feromon jak każda substancja chemiczna paruje,


 
jednak tempo tego procesu jest na tyle niskie, że mrówki pozostały przy marszu
starym wariantem.

2.3 ALGORYTMY MRÓWKOWE

Oczywiście co naukowcy zaobserwowali to informatycy w końcu próbowali


zasymulować komputerowo. W 1992 roku Marco Dorigo w swojej pracy doktorskiej
opisał system mrówkowy (Ant System) [9].

Czym różnią się wirtualne mrówki od mrówek żywych?:

• Czas w świecie mrówek wirtualnych nie jest ciągły, a dyskretny [13]


• Mrówki posiadają pamięć, w której zapamiętują np. odwiedzone przez siebie
wierzchołki, bądź krawędzie (w zależności od problemu)
• Mrówki posiadają „wzrok” pozwalający im określić odległość do
najbliższego miasta
• Feromon nie musi być tutaj rozkładany ciągle, a w rozmaity sposób, np.
dopiero po znalezieniu pełnego rozwiązania – w zależności od
zastosowanego algorytmu i jego implementacji

Poszukiwanie drogi przez algorytm mrówkowy można uprościć do następujących


czynności:

• Wybierz, zgodnie z tymi samymi, co dla innych mrówek, kryteriami miasto


początkowe w którym znajduje się mrówka
• Użyj feromonu i wartości heurystycznych do zbudowania drogi poprzez
dodawanie kolejnych krawędzi/wierzchołków do drogi zgodnie z
rozwiązywanym problemem
• Po skompletowaniu drogi rozłóż feromon zgodnie z regułami danego
algorytmu
• Powtarzaj czynności aż do spełnienia kryterium stopu

Większość algorytmów mrówkowych to modyfikacje pierwszego z nich – Ant


System Marco Dorigo. Podstawowa różnica w tych algorytmach to sposób, w jaki
określana jest ilość i miejsce rozkładania feromonu.


 
Tutaj opiszę zastosowanie tych algorytmów do rozwiązywania problemu
komiwojażera. Jakie modyfikacje należy w nich wprowadzić, aby moc rozwiązywać
inne problemy opiszę w punkcie 2.4 .

2.3.1 ANT SYSTEM

Początkowo zaproponowano trzy różne wersje systemów mrówkowych:

• Gęstościowy (ant-density , zwany dalej DAS)


• Ilościowy (ant-quantity, zwany dalej QAS)
• Cykliczny (ant-cycle, zwany dalej CAS)

W algorytmach gęstościowym i ilościowym feromon jest rozkładany


natychmiastowo po przejściu z wierzchołka do kolejnego wierzchołka. W
algorytmie cyklicznym feromon rozkładany jest dopiero po skonstruowaniu całego
rozwiązania a ilość pozostawianego feromonu uzależniona jest od uzyskanego
wyniku.

W algorytmie tym wyróżniamy dwie główne fazy: konstruowanie rozwiązania i


rozkładanie feromonu. Zalecane jest [2] takie początkowe ustawienie wartości aby
zarazem pierwsze rozwiązania nie zdominowały grafu, przez co znalezienie
rozwiązania stałoby się praktycznie niemożliwe, jak i takie, aby rozkład świeżego
feromonu miał wpływ na wyniki.

W algorytmie tym m mrówek buduje drogi. Początkowo mrówki wybierają


wierzchołki zupełnie losowo. W każdym kroku konstruowania drogi mrówka k
dokonuje wyboru, który wierzchołek odwiedzić jako następny.
Prawdopodobieństwo, ze mrówka znajdująca się w wierzchołku i wybierze ruch do
wierzchołka j określamy następującą zależnością:


jeśli , (2.1)

gdzie:

• τij – oznacza ilość feromonu na krawędzi łączącej wierzchołki i oraz j

10 
 
• ηij – oznacza wartość heurystyczną, czyli liczbę określającą atrakcyjność wyboru
danej drogi – wartość ta jest różna dla różnych algorytmów, stąd opisana
zostanie szerzej w punkcie 2.4
• α, β – dwa parametry, które określają względny wpływ ilości feromonu i
wartości heurystycznej na wybór dokonywany przez mrówkę
• - lista miast sąsiedztwa, do których się może bezpośrednio przenieść mrówka
k będąc w mieście i

Wartość ta rośnie proporcjonalnie do wzrostu feromonu na krawędzi τij oraz wartości


heurystycznej skojarzonej z tą krawędzią.

Rola parametrów α i β jest następująca: jeśli wartość α=0, to pod uwagę jest brana
tylko wartość heurystyczna, więc dla problemu komiwojażera wybierane będą
głównie miasta najbliższe. Z kolei dla β=0 wpływ na wybór drogi ma tylko wartość
feromonu na niej.

Każda mrówka posiada pamięć, w której zapisuje miasta, które już odwiedziła, wraz
z kolejnością ich odwiedzenia. Pamięć ta jest używana do określenia dostępnego
sąsiedztwa . Dodatkowo pamięć pozwala mrówce k obliczyć długość trasy jaką
przebyła, aby wiedzieć ile feromonu powinna ona na niej odłożyć.

Po tym, jak wszystkie mrówki przebędą swoje trasy, algorytm uaktualnia ilość
feromonu na ścieżkach. Pierwszym tego krokiem jest zmniejszenie jego wartości na
łukach, co symuluje zjawisko parowania, poprzez zmniejszenie wartości feromonów
na wszystkich łukach o stałą wartość. Odbywa to się zgodnie z zależnością:

1 (2.2)

gdzie 0 1 jest współczynnikiem parowania feromonu. Parametr ten jest


używany do zapobiegania nieskończonej akumulacji ścieżek feromonowych i
pozwala algorytmowi zapomnieć złe decyzje podjęte podczas wcześniejszego
działania.

Po parowaniu wszystkie mrówki pozostawiają feromon na krawędziach które


przeszły podczas swojej drogi zgodnie z zależnością:

∑ ∆ (2.3)

11 
 
gdzie ∆ to ilość feromonu mrówki k który pozostawia na krawędzi, którą
odwiedziła. Wielkość ta jest definiowana następująco:

ś ę , ż
∆ , (2.4)
0,

gdzie:

• Ck - długość trasy Tk zbudowanej przez k-tą mrówkę i wyliczonej jako suma


długości wszystkich krawędzi należących do Tk
• Q - parametr określający jak dużą ilość feromonu pozostawiać mają
mrówki. Im wartość parametru wyższa, tym więcej feromonu pozostawią
mrówki na grafie

Oznacza to, że im lepsza jest droga mrówki, tym więcej feromonu pozostanie na
krawędziach należących do tej drogi. Ogólnie krawędzie które zostały użyte przez
większą liczbę mrówek wybierających krótsze trasy, dostaną więcej feromonu i
przez to będą wybierane częściej w przyszłych iteracjach.

2.3.2 ELITIST ANT SYSTEM

Pierwsze rozszerzenie początkowego algorytmu mrówkowego zwane elitist strategy


for Ant System (EAS) zostało przedstawione przez Marco Dorigo w 1992 roku.
Polegało ono na tym, że mocno wzmacniano krawędzie będące w najlepszej drodze
znalezionej od początku działania algorytmu. Droga ta jest oznaczana jako Tbs (Best-
so-far-tour).

Jest to uzyskiwane poprzez dodanie ilości e/Cbs feromonu do krawędzi znajdujących


się w drodze Tbs. Oczywiście Cbs oznacza długość najlepszej drogi. Feromon jest
uaktualniany zatem zgodnie z zależnością:

∑ ∆ ∆ , (2.5)

gdzie ∆ jest zdefiniowane zgodnie z równaniem (2.4), zaś:

12 
 
ę ź ż
∆ , (2.6)
0

e – jest tutaj parametrem oznaczającym ilość feromonu odkładanego na najlepszej


drodze, im wartość parametru wyższa tym więcej feromonu zostanie odłożona.

Reszta algorytmu, łącznie z parowaniem feromonu, jest implementowana


analogicznie jak AS.

2.3.3 RANK-BASED ANT SYSTEM

Kolejna modyfikacja AS to rank-based AS (ASrank), zaproponowana przez


Bullnheimera w 1999 roku. W algorytmie tym każda mrówka pozostawia porcję
feromonu, tym mniejszą, im niższy jest jej ranking.

Zanim zaczniemy aktualizować ścieżki feromonowe, najpierw sortujemy mrówki


względem długości znalezionej przez nie drogi. Powstaje w ten sposób ranking
mrówek i ich dróg. W każdej iteracji tylko w-1 najwyżej ocenionych mrówek
i mrówka, która znalazła najlepszą drogę do tej pory pozostawiają feromon.
Oczywiście najlepsza mrówka pozostawia najwięcej feromonu. Ilość feromonu
pozostawianego przez kolejne mrówki jest liczona z następującej zależności:

∑ w r ∆ ∆ , (2.7)

gdzie ∆ / ,a∆ / .

2.3.4 MAX-MIN ANT SYSTEM

MAX-MIN Ant System ( AS) wprowadził cztery podstawowe modyfikacje w


stosunku do AS:

1. Mocno wykorzystuje najlepsze rozwiązanie: tylko najlepsza w danej iteracji,


lub najlepsza w ogóle, mrówka jest upoważniona do pozostawienia
feromonu. Nowe wartości feromonów wyliczane są ze wzoru:
∆ (2.8)

13 
 
Mrówką, która będzie upoważniona do pozostawienia feromonu może być
najlepsza do tej pory, wtedy ∆ / , lub najlepsza w danej iteracji, i
wtedy ∆ / , gdzie to długość najlepszej drogi w danej iteracji.
To, która z tych mrówek będzie wybrana jest stosowanie naprzemiennie.
2. Wprowadzono limity możliwych zakresów feromonów na łukach. Oznacza
to, że mamy dwie, graniczne wartości limitów feromonu – górną (τmax) i
dolną (τmin). Wszystkie wartości feromonu na danym łuku muszą zawierać się
w przedziale między nimi.
3. Początkowe wartości feromonów są ustawiane na wartość górnej granicy
(τmax). W połączeniu z powolnym parowaniem feromonu powoduje to
wydłużenie, ale i zarazem polepszenie, procesu eksploracji.
4. Jeśli podczas działania algorytmu dojdzie do stagnacji – algorytm zatrzyma
się w martwym punkcie – wartości ilości feromonów na ścieżkach są
reinicjowane.

2.3.5 ANT COLONY SYSTEM

Ant Colony System wprowadza kilka zmian w stosunku do standardowego AS:


1. O wiele lepiej wykorzystuje doświadczenie mrówek zdobyte podczas
szukania, poprzez bardziej agresywne zasady wyboru drogi
2. Feromon paruje i jest odkładany tylko na krawędziach należących do
najlepszej drogi
3. Za każdym razem, gdy dana krawędź jest używana, usuwana jest z niej część
feromonu. Powoduje to, wzrost eksploracji alternatywnych ścieżek.

Wyszukiwanie drogi

W ACS, gdy mrówka k zlokalizowana w mieście i przemieszcza się do miasta j,


miasto to wybierane jest pseudolosowo zgodnie z zależnością:

arg ś
, (2.9)
ł

gdzie q jest losowo wybraną zmienną z zakresu [0,1], q0 jest parametrem algorytmu
i J jest losową zmienną wybraną jak w standardowym AS (zależność 2.1).

14 
 
Aktualizacja feromonu

W ACS tylko jedna mrówka (najlepsza do tej pory) może rozkładać feromon. Robi
to zgodnie z równaniem:

1 ∆ , (2.10)

gdzie ∆ / . Ważne jest też, że zarówno parowanie, jak i odkładanie


feromonu ma miejsce tylko na najlepszej drodze (Tbs). Jest to istotne ze względu na
to, że znacznie zmniejsza się złożoność obliczeniowa algorytmu.

2.3.6 ANT-Q

Jest to wcześniejsza wersja ACS. Jedyna różnica pomiędzy algorytmami tkwi w


początkowej wartości feromonu na ścieżkach. W Ant-Q będzie to:

, (2.11)

gdzie γ jest parametrem, a maksimum jest brane spośród zbioru ścieżek


feromonowych łączących miasto i z miastem k, które jeszcze nie zostało odwiedzone
przez mrówkę.

2.4 ROZWIĄZYWANE PROBLEMY

2.4.1 PROBLEM KOMIWOJAŻERA

Problem komiwojażera (Travelling Salesman Problem) to jeden z najczęściej


rozwiązywanych problemów NP-zupełnych.

Komiwojażer wyrusza ze swojego miasta i chce znaleźć najkrótszą drogę poprzez


wszystkie dane mu przez klientów miasta, odwiedzając każde z nich dokładnie jeden
raz i na końcu wracając do swojego rodzinnego miasta. Problem ten może być
reprezentowany przez kompletny graf G = (N,A), gdzie N to n = |N| wierzchołki
grafu reprezentujące miasta, A to z kolei krawędzie reprezentujące drogi. Każdej
krawędzi (i, j) jest przyporządkowana waga dij, która reprezentuje odległość między

15 
 
miastami i oraz j. Problem komiwojażera można sprowadzić do znalezienia
najkrótszego cyklu Hamiltona w grafie, gdzie cykl Hamiltona to zamknięta droga
która przechodzi przez wszystkie wierzchołki grafu G dokładnie raz.

Rozróżnia się symetryczny i niesymetryczny problem komiwojażera. W


symetrycznym odległości między miastami nie zależą od kierunku poruszania się po
łuku, co oznacza, że dij=dji dla każdej pary wierzchołków. Z kolei w asymetrycznym
problemie komiwojażera (ATSP) mamy sytuację, gdy dla jednej pary wierzchołków
i, j może zachodzić dij ≠ dji .

Dynamiczny problem komiwojażera (Dynamic Travelling Salesman Problem)


wprowadza dodatkowo modyfikację, która polega na tym, że miasta mogą być
dodawane, bądź usuwane w trakcie pracy algorytmu.

Ścieżki feromonowe i wiadomość heurystyczna

Ścieżki feromonowe w tym algorytmie oznaczają atrakcyjność odwiedzenia miasta j


bezpośrednio po mieście i.

Wiadomość heurystyczna jest odwrotnie proporcjonalna do długości odległości


między miastami i oraz j :

1 , (2.12)

gdzie oznacza odległość między miastami i oraz j .  

2.4.2 PROBLEM NAJKRÓTSZEJ DROGI

Problem Najkrótszej Drogi (Shortest Route Problem - SRP), jest jednym z


najprostszych problemów grafowych. Polega on na znalezieniu najkrótszej drogi
między dwoma punktami – startowym i końcowym.

Podobnie jak w problemie TSP feromon rozkładany jest na krawędziach, a wartość


heurystyczna przyjmuje wartość zgodną z zależnością (2.12).

16 
 
2.4.3 PROBLEM KWADRATOWEGO PRZYDZIAŁU

Problem kwadratowego przydziału (Quadratic Assignment Problem - QAS) polega


na przypisaniu zbioru obiektów do zbioru lokalizacji, przy czym dane mamy
odległości między lokalizacjami i przepływ między obiektami, a celem jest takie
przyporządkowanie, aby całkowity koszt przepływu był jak najmniejszy.

Reprezentacja grafu

Graf reprezentuje wszystkie lokalizacje i obiekty i jest to graf pełny. Prawidłowe


rozwiązanie to zbiór n par krawędzi (i, j) pomiędzy obiektami i lokalizacjami, gdzie
każdy obiekt jest przyporządkowany do dokładnie jednej lokalizacji.

Wartość heurystyczna i konstruowanie rozwiązań

Tworzymy dwa wektory: d i f gdzie i-ty element di oznacza sumę wszystkich


odległości z lokalizacji i do pozostałych lokalizacji, z kolei fi oznacza sumę
przepływów między i-tym obiektem i pozostałymi obiektami.

Oczywiście im niższa wartość di tym wyższa powinna być wartość heurystyczna,


stąd przyjmujemy ją jako:

1 (2.13)

Podczas poszukiwania rozwiązania najpierw sortujemy malejąco wektor sum


przepływów f, a następnie w każdym kroku k konstruowania rozwiązania bierzemy
kolejny i-ty obiekt i przypisujemy go do ciągle nie zajętej lokalizacji j korzystając z
reguły (2.1). Dzięki temu najpierw zostaną przyporządkowane obiekty o
największym przepływie do, najprawdopodobniej, najbardziej korzystnych
lokalizacji.

2.4.4 PROBLEM PLECAKOWY (KNAPSACK PROBLEM)

Mamy do dyspozycji plecak o maksymalnej pojemności B oraz zbiór N elementów,


przy czym każdy element ma określoną wartość oraz wielkość. Problem polega na
znalezieniu takiego upakowanego plecaka, aby suma wartości znajdujących się w

17 
 
nim elementów była jak największa. Problem plecakowy często przedstawia się jako
problem złodzieja rabującego sklep – znalazł on N towarów, j-ty przedmiot jest wart
cj oraz waży wj. Złodziej dąży do zabrania ze sobą jak najwartościowszego łupu,
przy czym nie może zabrać więcej niż B kilogramów. Nie może też zabierać
ułamkowej części przedmiotów.

Wartość heurystyczna i konstruowanie rozwiązań

Ponieważ w problemie tym nie ma znaczenia kolejność odwiedzanych


wierzchołków, to niesie to za sobą konieczność przeniesienia wartości
feromonowych z krawędzi na wierzchołki. Również z wierzchołkami będzie
związana wartość heurystyczna. W tym wypadku będzie ona wynosiła:

, (2.14)

gdzie:

• cj – oznacza wartość przedmiotu j-tego


• wj – oznacza wagę przedmiotu j-tego

Ponieważ w problemie tym atrakcyjność drogi jest wprost proporcjonalna do kosztu


zabranego łupu, a nie jak poprzednio – odwrotnie proporcjonalna do długości
odnalezionej drogi, modyfikacji muszą ulec zależności odpowiadające za przyrost
feromonu na ścieżkach podczas rozwiązywania tego problemu. Odpowiednio, dla
AC będzie to:

· ś ł
∆ , (2.15)
0,

gdzie Ck oznacza całkowity koszt przedmiotów zabranych do plecaka. W metodzie


rankingowej otrzymamy:

∆ · (2.16)

A z kolei we wszystkich metodach odkładających feromon na najlepszym


rozwiązaniu:

∆ · (2.17)

18 
 
3. PORÓWNANIE SKUTECZNOŚCI WYBRANYCH ALGORYTMÓW

W rozdziale tym sformułowałem problem badawczy, rozwiązywany w pracy.


Zdefiniowałem sposób porównania algorytmów mrówkowych i kryteria wybrane do
porównań.

3.1 CO PORÓWNYWAĆ?

Tematem tej pracy jest „Porównanie Skuteczności Wybranych Algorytmów


Mrówkowych”. Pierwszym elementem, wartym zastanowienia, jest zatem
odpowiedź na pytanie: czym jest skuteczność algorytmu? Bo czy bardziej skuteczny
jest algorytm, który znajduje jakościowo lepsze rozwiązanie, czy może ten, który
odnajduje rozwiązanie gorsze, ale za to w krótkim czasie?

Należy uznać, że istotne są oba aspekty – zarówno jakość uzyskanego rozwiązania,


jak i czas, który był potrzebny, aby owo rozwiązanie uzyskać. Najlepszym
algorytmem byłby zatem taki, który uzyskiwałby idealne rozwiązanie w
błyskawicznym czasie. W rzeczywistości algorytmy muszą wyważać odpowiedni
kompromis.

Aby zmierzyć skuteczność algorytmów używać można następujących miar:

Jakość znalezionego rozwiązania – czyli wartość funkcji oceny


najlepszego, znalezionego przez algorytm, rozwiązania przybliżonego.
Miara ta jest stosowana w zasadzie zawsze, gdy mowa jest o ocenie
skuteczności algorytmu i jest to w pełni uzasadnione.

Koszt znalezienia najlepszego rozwiązania - czyli liczba iteracji, bądź


czas procesora potrzebny do uzyskania najlepszego rozwiązania.
Oczywiście im algorytm krótszy – tym lepszy.

Wielu badaczy [9][10][13] uważa, że zastosowanie tych dwóch miar jest


wystarczające do oceny skuteczności algorytmów.

19 
 
Ponieważ zdarzają się sytuacje, gdy potrzebne jest rozwiązanie o zadanej jakości,
bądź dysponujemy określonym czasem, dwie powyższe miary są często poszerzane
o dodatkowe:

Koszt znalezienia rozwiązania o zadanej jakości – liczba iteracji, bądź


czas procesora, jakie są potrzebne do uzyskania rozwiązania o z góry
zadanej jakości. W sytuacji gdy algorytm nie jest w stanie uzyskać
rozwiązania o zadanej jakości, wartość tej miary przyjmuje się jako
nieskończoność.

Jakość uzyskanego rozwiązania po zadanej ilości iteracji – czyli funkcja


oceny najlepszego znalezionego rozwiązania, po przebyciu przez algorytm
zadanej ilości iteracji, bądź, częściej, po zadanej ilości czasu. Miara
stosowana często w praktyce, gdy np. wolimy uzyskać rozwiązanie
suboptymalne w ciągu np. 10 minut, niż o 5% lepsze w ciągu np. miesiąca.

W przypadku algorytmów populacyjnych, jakim jest również system mrówkowy,


często oprócz najlepszego rozwiązania wprowadza się jeszcze jedno pojęcie:

Średnie rozwiązanie - czyli średnia arytmetyczna wyciągana z funkcji ocen


wszystkich odnalezionych rozwiązań. W przypadku systemów
populacyjnych miara bardziej wiarygodna niż najlepsze uzyskane
rozwiązanie, gdyż algorytmy często zupełnie przypadkowo mogą znaleźć
rozwiązanie dobre, a tymczasem badania większości populacji odbywają się
gdzieś na marginesie obszaru rozwiązań, daleko poza obszarem
optymalnym. Określamy ją jako zależność:

∑ , (3.1)

gdzie:

• n – liczba pomiarów
• xi – i-ty wynik pomiaru

Czy te miary są wystarczające do ocenienia skuteczności algorytmów? Niewątpliwie


powinny dać nam odpowiedź na pytanie, które algorytmy są lepsze, nie mówią
jednak nic o tym dlaczego tak jest. Aby uzyskać odpowiedź na drugie pytanie

20 
 
należałoby dowiedzieć się co dzieje się z algorytmem od fazy jego inicjacji, poprzez
poszczególne iteracje, aż do uzyskania wyniku końcowego, a nie tylko wynik
ostateczny.

Częstokroć najważniejsze decyzje, a nawet ostateczne wyniki, są ustalane już w


pierwszej iteracji, a w innych przypadkach algorytm potrafi przeszukiwać przestrzeń
rozwiązań bardzo długo. Dlatego jakość rozwiązania i szybkość jego uzyskania to za
mało aby ocenić właściwości algorytmów. Niektóre algorytmy mogą odnajdować
rozwiązania szybko, ale w zasadzie z przypadkową dokładnością (różną w kolejnych
próbach), inne mogą szukać dłużej, ale znalezione rozwiązania mogą być zawsze tej
samej jakości (wyższa stabilność). Aby ocenić takie cechy algorytmów trzeba pójść
zatem dalej.

Rozróżnić należałoby tutaj dwa pojęcia:

Intensyfikacja – inaczej eksploatacja. Jest to pojęcie określające zdolność


algorytmu do efektywnego badania obszaru poszukiwań i znajdowania
rozwiązań o wysokiej jakości w zawężonym przedziale poszukiwania.

Dywersyfikacja – inaczej eksploracja. Czyli zdolność algorytmu do


przechodzenia do niezbadanych obszarów poszukiwań.

W ocenie skuteczności algorytmów, trzeba zatem, oprócz oczywistej intensyfikacji,


zbadać również dywersyfikacje. Aby to zrobić można posłużyć się miarami
zaproponowanymi np. w [12]:

Liczba kroków pomiędzy lokalnymi minimami – określa ilość czasu niezbędną do


przejścia z jednego suboptymalnego rozwiązania do innego. Często algorytmy
heurystyczne zatrzymują się na optimum lokalnym, ale potrafią je opuścić w
poszukiwaniu optimum globalnego. Miara ta określa ile kroków algorytm potrzebuje
do takiego przejścia. Oczywiście im liczba mniejsza tym dywersyfikacja wyższa.

Liczba powtórzeń podczas poszukiwania – określa czy algorytm zatacza cykle –


czy powtarza do odwiedzonych już przez siebie obszarów poszukiwania. Wysoka
wartość oznacza, że dywersyfikacja jest zbyt wysoka. Z kolei niska wartość oznacza
zbyt wysoką intensyfikację.

21 
 
Odchylenie standardowe najlepszego, znalezionego rozwiązania – najbardziej
klasyczna miara zmienności. Najczęściej stosowane, obok średniej arytmetycznej,
pojęcie statystyki.

Jest to miara określająca, jak szeroko wartości rozwiązania są „rozrzucone” wokół


rozwiązania średniego. Im mniejsza ta wartość tym rozwiązania są bliższe średniej.

Dla skończonej populacji przyjmuje postać:

∑ ∑
, (3.2)

gdzie:

- oznacza kolejne wartości danej zmiennej

- to średnia arytmetyczna wartości zmiennej

n – liczba elementów w populacji rozwiązań

Oczywiście im większe odchylenie standardowe tym większa dywersyfikacja. Dla


rozkładu normalnego:

• 68% wartości leży w odległości od wartości średniej


• 95,5% wartości leży w odległości 2 od wartości średniej
• 99,7% wartości leży w odległości 3 od wartości średniej

Zobrazowane to zostało na ilustracji:

Rys. 3.1  Procent populacji wpadający do poszczególnych przedziałów o szerokości jednego odchylenia standardowego przy
założeniu rozkładu normalnego. Źródło http://pl.wikipedia.org/wiki/Odchylenie_standardowe

Odchylenie standardowe można interpretować jako miara niepewności pomiarów. W


momencie, gdy osiągnie wartość 0 – wszystkie pomiary są takie same.

22 
 
Entropia

W ogólnej postaci entropię rozpatrujemy jako zależność:

∑ ∑ , (3.3)

gdzie:

- prawdopodobieństwo zajścia zdarzenia i.

Jest to miara mówiąca o tym, jak dokładnie rozpatrywane rozwiązania pokrywają


przeszukiwaną przestrzeń rozwiązań. Przyjmuje wartości z zakresu 0|1 . Jest
maksymalna, gdy prawdopodobieństwo zajść zdarzeń jest takie samo. Przyjmuje
wartość 0, gdy prawdopodobieństwo zajścia jakiegoś zdarzenia wynosi 1.

Oczywiście im wyższa wartość entropii tym dywersyfikacja algorytmu jest wyższa:


dla wartości 1 rozwiązania pokrywają równomiernie całą przestrzeń poszukiwań, z
kolei dla 0 – sprowadzają się do jednego rozwiązania.

Czy wszystkie te miary dadzą w przypadku algorytmów mrówkowych efekty? Które


z tych miar wybrać? Odpowiedź na te pytania jest pierwszym problemem, z którym
musiałem się zmierzyć.

3.2 UCZCIWA RYWALIZACJA

„The most obvious difficulty of competitive testing is making competition fair”1

Parametry uruchomieniowe

Każdy z algorytmów mrówkowych ma kilka parametrów, od których zależy jego


działanie – a przez to – jakość uzyskiwanego rozwiązania. Co gorsza: wartości
parametrów, dla których jakość rozwiązania jest najlepsza, mogą być różne dla
różnych algorytmów i odrębnych problemów.

Oczywistym jest, że nie można zatem porównywać algorytmów na losowo


dobranych parametrach, albo na takich samych ich wartościach dla różnych

                                                            
1
J.N.Hooker: Heuristics: We Have It All Wrong, Carnagie Mellon University, Pittsburg, USA, May 1995

23 
 
algorytmów/problemów. Powodowałoby to niesprawiedliwość rywalizacji – jedne
algorytmy mogłyby mieć bardziej korzystnie ustawione parametry niż inne. Dlatego
pierwszym krokiem porównania jest odpowiednie dobranie parametrów do
algorytmów.

Przeciętnie algorytmy mrówkowe mają po sześć parametrów dostrojeniowych. Przy


eksperymentach, których wyniki opatrzone są pewnym, losowym błędem,
minimalna liczba powtórzeń, dla których można zniwelować wpływ zakłóceń, to
trzy, a zalecane jest ich co najmniej pięć [7]. Ponieważ w przypadku algorytmów
mrówkowych różnice w wynikach potrafią być bardzo duże, to aby je zniwelować
każdy z nich trzeba sprawdzić dla co najmniej dziesięciu wartości. Daje to zatem
10 kombinacji. Przy zaimplementowaniu rozwiązywania czterech problemów,
dla ośmiu algorytmów daje to w sumie 32 · 10 kombinacji. Gdyby jedno
wykonanie algorytmu trwało nawet zaledwie sekundę, a ich przełączanie było
automatyczne – badania zajęłyby 370 dni. I to dla obliczeń, które dopuszczają jedno
uruchomienie algorytmu dla zaledwie 10 wartości każdego parametru – czyli w
zasadzie - mocno niedokładne. Jest to oczywiście czas zbyt długi, do tego nie dający
satysfakcjonujących efektów.

Kolejnym problemem było zatem znalezienie sposobu, który umożliwiłby w


przyzwoitym czasie dobrać odpowiednie parametry dla algorytmów. Proces ten w
dalszej części pracy nazywać będę strojeniem algorytmów.

Dobór problemów

Wartym zastanowienia był też wybór problemu, na którym algorytmy miały być
testowane. Całkiem możliwe, że inne algorytmy mogą rozwiązywać problemy o
małej złożoności, a inne te o bardzo wysokiej złożoności. Na jakim problemie zatem
je testować? Być może użyć ich kilku i porównać wyniki odrębnie. Również na te
pytania musiałem znaleźć odpowiedź.

Kryterium stopu

Algorytmy mrówkowe wyszukują rozwiązania iteracyjnie. Po jakiej liczbie iteracji


zatrzymywać algorytm? Po z góry ustalonej liczbie? Czy może uzależnić
zatrzymanie algorytmu od jakości wyniku? Zatrzymywać algorytm, jeśli np. przez n
iteracji nie nastąpiła poprawa wyniku? A skąd wtedy wiadomo, że algorytm nie

24 
 
eksplorował przestrzeni dopuszczalnych rozwiązań, w poszukiwaniu optimum
globalnego? Algorytm powinien kończyć swoje działanie dopiero wtedy, gdy
faktycznie wyszukiwanie drogi jest zakończone. Jakie przyjąć kryterium stopu – to
było kolejnym problemem, z którym musiałem się zmierzyć.

25 
 
4. METODA ROZWIĄZANIA

W rozdziale tym opisałem jakie algorytmy wybrałem do porównania, do


rozwiązywania jakich problemów, jakim sposobem je porównywałem, oceniłem ten
sposób i zaproponowałem inne metody rozwiązania.

4.1 PORÓWNYWANE ALGORYTMY

Postanowiłem zaimplementować, a następnie porównać, następujące algorytmy


mrówkowe:

• Density Ant System (DAS)


• Quantity Ant System (QAS)
• Cycle Ant System (CAS)
• Elitist Ant System (EAS)
• Max-Min Ant System ( AS)
• Rank-Based Ant System (ASrank)
• Ant Colony System (ACS)
• Ant-Q (AQ)

4.2 BADANE PROBLEMY

Na pewno chciałbym sprawdzić skuteczność algorytmów do rozwiązywania


trudnych, albo wręcz bardzo trudnych problemów, z którymi spotykać się można w
rzeczywistości. Spodziewam się jednak, że nie wszystkie algorytmy mogą sobie z
nimi poradzić, więc chciałbym też mieć możliwość porównania skuteczności
wszystkich algorytmów również przy jakiś prostych, albo wręcz pozornie banalnych
zadaniach. Stąd rozpatrywał będę następujące problemy:

• Problem najkrótszej drogi – Shortest Route Problem (SRP) – jako


przedstawiciel problemów łatwych
• Problem komiwojażera – Travelling Salesman Problem (TSP) – jako
problem trudny

26 
 
• Problem kwadratowego przydziału – Quadratic Assignment Problem
(QAP) – jako problem bardzo trudny
• Problem plecakowy – Knapsack Problem (KP)

Ostatni problem zaintrygował mnie ze względu na jego odmienność. Wszystkie


problemy rozpatrywane przez algorytmy mrówkowe dotyczą wyszukiwania drogi w
grafie, ale droga ta dotyczy krawędzi, to z krawędzi drogi są budowane i na
krawędziach pozostawiany jest feromon. W problemie plecakowym kolejność
zabieranych przedmiotów nie ma znaczenia – zatem droga przeniesiona musi być na
krawędzie i to na krawędziach odkładany jest feromon. Wymaga to zupełnie innego
podejścia do problemu, a przez to może dać interesujące efekty.

4.3 STROJENIE ALGORYTMÓW

4.3.1 ZAPROPONOWANA METODA

Cel

Jako cel strojenia algorytmów wyznaczyłem sobie takie dobranie ich parametrów,
aby:

• Jakość znalezionego rozwiązania była jak najwyższa


• Wszystkie rozwiązania zbiegały się do jednego (zbieżność algorytmu)

To, że im jakość znalezionego rozwiązania jest wyższa, tym lepiej jest dostrojony
algorytm wydaje się stosunkowo oczywiste. Niejasne może być założenie drugie.

Źle zestrojone algorytmy często działają tak, że mrówki zamiast kierować się
szlakami feromonowymi poruszają się po grafie zupełnie przypadkowo. Podczas
takiego działania czasami, zupełnie losowo, zdarza im się wpaść na najlepsze
rozwiązanie. Nie oznacza to jednak, że algorytm któremu to się udało jest dobry.
Dobrze zestrojony algorytm to taki, który początkowo przegląda dużą część obszaru
przeszukiwań, a w końcu kieruje swoją uwagę w stronę rozwiązania najlepszego i
tam koncentruje swoją uwagę ustalając końcowy ruch mrówek na jednym, być może
najlepszym rozwiązaniu. Stąd drugie założenie algorytmu dobrze zestrojonego.

27 
 
Powyższe cele realizuję w następujący sposób:

• Jako kryterium stopu ustalam brak entropii przez dwadzieścia iteracji.


Entropia jako miara nieuporządkowania osiąga wartość zero tylko i
wyłącznie wtedy, gdy wszystkie rozwiązania będą już takie same. Oznacza
to, że program zaprzestanie przeszukiwania wtedy, gdy od dwudziestu
iteracji wszystkie rozwiązania są identyczne.
• Jako drugie kryterium stopu, zapobiegające działaniu algorytmu w
nieskończoność, stosuję blokadę maksymalnej ilości iteracji, które może
przebiec algorytm. Po przekroczeniu tej ilości, jeśli entropia ciągle nie jest
zerowa, algorytm jako rozwiązanie zwraca funkcję rozwiązania o najgorszej
wartości – karanie za brak zbieżności.
• Gdy algorytm zatrzyma swoje działanie normalnie (czyli po wyzerowaniu
entropii) jako jego wynik zwracam średnią arytmetyczną funkcji
znalezionych rozwiązań, nie zaś najlepsze, być może przypadkowo,
znalezione rozwiązanie (w ten sposób realizuję pierwsze założenie). Z tego
względu algorytm AS podczas strojenia będzie miał wyłączoną
możliwość reinicjalizacji, aby wynik przez niego zwracany nie był wynikiem
uzyskanym w przypadkowym miejscu wyszukiwania przez niego
rozwiązania, np. tuż po reinicjalizacji.

Metoda strojenia:

W pierwszej fazie, doświadczalnie ustalam parametry bezpieczne tj. takie, dla


których większość algorytmów jest zbieżna dla wszystkich problemów. Wartości
uzyskane w tej fazie będą traktowane jako wartości domyślne w etapie następnym.

W drugiej fazie, kolejno, dla każdego:

• Algorytmu
• Problemu
• Trzech różnych wielkości grafu reprezentującego dany problem
• Parametru
• Trzech różnych, losowych reprezentacji problemu

28 
 
stroję parametrami pojedynczo, czyli dla wylosowanego problemu uruchamiam
algorytm z kolejnymi wartościami badanego parametru i resztą parametrów
ustawioną na wartości domyślne (znalezione w pierwszej fazie). Jako wynik
uzyskany dla danego parametru uznaję średni wynik z trzech uruchomień algorytmu,
dla trzech różnych wielkości grafu reprezentującego problem, więc w sumie dla
dziewięciu pomiarów.

Na podstawie tych wyników zamierzam stworzyć dla każdego parametru tabelę, w


której umieszczę średnie wyniki algorytmów w rozwiązywaniu określonych
problemów, w zależności od wartości danego parametru. Jako wynik uznawał będę
tą wartość parametru, dla którego średnia wartość wyniku będzie najlepsza – czyli w
problemach SRP, TSP i QAP – jak najniższa, a w problemie KP – najwyższa.

Zakres wartości dla których będą sterowane parametry:

• τ0={0,1 0,2 0,5 1 2 5 10 20 50 100}


• τmin={0,1 0,2 0,5 1 2 5 10 20 50 100}
• τmax={1 2 5 10 20 50 100 200 500 1000}
• α={0,1 0,2 0,5 1 2 5 10}
• β={0,1 0,2 0,5 1 2 5 10}
• γ={0,01 0,02 0,05 0,1 0,2 0,5}
• ρ={0,01 0,02 0,05 0,1 0,2 0,5}
• w={1 2 5 10}
• e={100 200 500 1000 2000 5000 10000 20000 50000 100000 200000
500000 1000000}
• q={1 2 5 10 20 50 100 200 500 1000 2000 5000 10000 20000 50000
100000}
• q0={0,01 0,02 0,05 0,1 0,2 0,5}

Biorąc pod uwagę mnogość parametrów, ich dopuszczalnych wartości, liczbę


dostępnych problemów i algorytmów uruchomień algorytmu będzie w sumie 8832.
Oczywiście ze względu na tak dużą liczbę konieczne było przygotowanie
oddzielnego programu zajmującego się uruchamianiem algorytmów mrówkowych z
odpowiednimi wartościami parametrów i automatyczne zbieranie wyników do
późniejszej analizy.

29 
 
4.3.2 WADY ZASTOSOWANEJ METODY

Zastosowana metoda ma jedną poważną wadę, która znacząco może wpłynąć na


wyniki. Zakłada się bowiem, że parametry są wzajemnie niezależne. Nie jest to
jednak prawdą. Zwiększanie np. parametru α, który odpowiada za wpływ ilości
feromonu na wybór drogi, ma taki sam skutek jak zmniejszenie parametru β, który
określa jaki wpływ na wybór drogi ma wartość heurystyczna – jeśli bowiem rola
jednego z dwóch czynników decyzyjnych zmniejsza się, automatycznie druga
zyskuje na wartości. W niektórych wręcz źródłach [10][13] autorzy stosują
sterowanie tylko parametrem β, ze stałą wartością parametru α (= 1).

Podobnie sprawa wygląda w przypadku zwiększania ilości feromonu startowego. Ma


to na celu zmniejszenie wpływu pierwszych rozwiązań na rozwiązania kolejne. Taki
sam efekt uzyskamy zmniejszając ilość feromonu pozostawianego przez mrówkę w
jednej iteracji.

Zatem sterowanie wieloma parametrami niezależnie doprowadzić może do


przesterowania algorytmów.

Aby znaleźć najbardziej racjonalne wartości parametrów należałoby


zoptymalizować funkcję tylu zmiennych ile parametrów ma dany algorytm, czyli w
zależności od algorytmu – ok. sześciu. W sumie dla czterech rozpatrywanych
problemów i ośmiu algorytmów byłoby tych funkcji 32. Funkcje te miałaby inny
kształt dla każdego algorytmu i problemu i - co najgorsze – kształt dla nas nieznany.

4.3.3 PROPOZYCJE INNYCH METOD

Metoda 1 – podejście matematyczne

Oczywiście, każdą funkcję o nieznanym kształcie można aproksymować, a


następnie, mając już jej wzór – optymalizować.

Metoda 2 – podejście heurystyczne

Intuicyjne strojenie algorytmu czasami może dać lepsze wyniki niż stworzenie
błędnego modelu matematycznego. A jeśli intuicja, to oczywiście nasuwa się na
myśl pomysł zastosowania algorytmów sztucznej inteligencji.

30 
 
Druga proponowana przeze mnie metoda innego, od zastosowanego, strojenia
algorytmów polegać by miała na zaimplementowaniu algorytmu genetycznego. Jako
jeden gen traktowałbym konkretną wartość danego parametru. Jako chromosom
(ciąg genetyczny) wartości wszystkich parametrów. Z chromosomów takich
stworzyć można populację, którą następnie poddać można ewolucji poprzez
stosowanie operatorów krzyżowania i mutacji. Oczywiście osobniki o wyższym
stopniu dopasowania krzyżowane byłyby częściej w ten sposób na drodze ewolucji
uzyskałbym wartości parametrów przynajmniej zbliżone do optymalnych.

Dlaczego zatem nie w ten sposób?

Aproksymacja funkcji wielu zmiennych, a następnie jej optymalizacja, to


zagadnienia na tyle złożone, że poświęcono im oddzielną gałąź matematyki zwaną
optymalizacją. Strojenie algorytmów nie jest tematem niniejszej pracy, zatem nie
mogę mu poświęcić na tyle dużo czasu, aby móc się zmierzyć z tym zagadnieniem.

Algorytm genetyczny, który miałby znaleźć optymalne parametry, miałby bardzo


wąskie gardło obliczeniowe w postaci funkcji oceny populacji – bardzo ważnego
elementu algorytmów genetycznych. Funkcja ta ma zwrócić wartość proporcjonalną
do dopasowania danego osobnika do środowiska. W moim przypadku – ta funkcja
musiałaby mieć tym wyższą wartość, im lepsze rozwiązanie znajdowałby algorytm
mrówkowy dla parametrów reprezentowanych przez dany chromosom. Oznacza
to, że w każdej iteracji algorytmu genetycznego musiałoby być uruchamiane tyle
algorytmów mrówkowych, ile osobników byłoby w populacji algorytmu
genetycznego.

Obie zaproponowane metody oznaczają zatem bardzo dużą trudność


zaimplementowania, jak i dużą ilość czasu potrzebną na wykonanie obliczeń.

Okazuje się zatem, że o wiele większą trudnością, od samego porównania


algorytmów, jest ich prawidłowe skonfigurowanie, poprzez ustalanie wartości ich
parametrów na najbardziej optymalne wielkości. Zastosowana metoda
najprawdopodobniej nie dała najlepszych rezultatów, a stworzeniu skuteczniejszej
zdecydowanie można by poświęcić oddzielną pracę, czego dowodem może być
wiele prac nad zagadnieniem optymalizacji wielokryterialnej.

31 
 
4.4 PORÓWNANIE SKUTECZNOŚCI ALGORYTMÓW

Aby porównać skuteczność algorytmów muszę nie tylko ocenić, który z nich jest
najlepszy ale również odpowiedzieć na pytanie: dlaczego ten? Aby to zrobić dzielę
badania na dwa poziomy:

Poziom 1 – czyli skuteczność algorytmu

Na tym poziomie korzystam z dwóch miar:

• jakość najlepszego, znalezionego rozwiązania

Realizowana poprzez zapisywanie w każdej iteracji najlepszego,


znalezionego do tej pory rozwiązania

• czas potrzebny na znalezienie tych rozwiązań


Liczony od momentu zaczęcia szukania drogi przez mrówki, poprzez etap
odkładania feromonu aż do jego odparowania. Do tego czasu nie jest
wliczane liczenie średniej, odchylenia standardowego, czy entropii.

Poziom 2 – eksploracja algorytmu

Poziom ten ma za zadanie odpowiedzenie na pytanie: jak algorytm szukał


rozwiązania? Chodzi tutaj oczywiście o to, jak dokładnie i jak długo przeszukiwał
przestrzeń rozwiązań. Aby sprawdzić algorytmy pod tym kątem użyłem
następujących miar:

• średnia jakość znalezionego rozwiązania

W każdej iteracji, ze wszystkich odnalezionych rozwiązań liczona, zgodnie z


zależnością (3.1), i zapisywana jest ich średnia.

• odchylenie standardowe najlepszego rozwiązania od rozwiązania


średniego
zdefiniowane dla naszego przypadku jako:
∑ ∑
, (4.1)

gdzie:

32 
 
- oznacza kolejne wartości rozwiązań

- to średnia arytmetyczna rozwiązań

• entropia
czyli miara niepewności znajdowanego rozwiązania. Jej ogólna postać
zdefiniowana jest w punkcie 3.1. Wartość entropii dla algorytmów
heurystycznych zdefiniowana jest w [12] jako:

∑ · , (4.2)

gdzie:
- zmienna i=1,2…, n
- zbiór możliwych wartości zmiennej
- wartość zmiennej
- liczba wystąpień zmiennej
- liczba znalezionych do tej pory rozwiązań

W przypadku algorytmów mrówkowych wartości te sprowadzą się do:


– kolejne krawędzie w problemach SRP, TSP i QAP, a dla KP wierzchołki
- czyli 1 odpowiadające zawarciu krawędzi/wierzchołka w drodze, bądź 0
w przeciwnym wypadku
- wartość zmiennej (czyli 0 | 1)
- liczba mówiąca ile razy dana krawędź została użyta, bądź też nie użyta
do tej pory
-liczba mówiąca ile razy krawędź mogła być użyta – czyli liczba ta
równa będzie liczbie mrówek przeszukujących graf

Czyli, jeśli oznaczyć przez liczbę wystąpień krawędzi i w znalezionych


drogach, a przez m liczbę mrówek, zależność ta upraszcza się do:

(4.3)

A entropia całego układu liczona jest jako średnia arytmetyczna wszystkich


entropii krawędzi (bądź wierzchołków dla KP).

33 
 
Obie te wielkości są w każdej iteracji obliczane, a następnie zapisywane do pliku z
wynikami.

Eksperymenty są wykonywane dla każdego:

• problemu
• ilości wierzchołków grafu reprezentującego problem
• trzech różnych, losowych reprezentacji problemu
• algorytmu

Czyli inaczej – dla każdego rozwiązywanego problemu i dla każdej wielkości


wierzchołków grafu go reprezentującego losowane są kolejno trzy problemy. Dla
każdego z nich uruchamiane są wszystkie algorytmy po kolei z parametrami
dostrojeniowymi takimi, jakie otrzymałem w wyniku fazy strojenia.

Na podstawie wyników stworzone zostaną wykresy – najlepszego rozwiązania,


średniego rozwiązania, odchylenia standardowego i entropii w zależności od numeru
iteracji. Zapis czasu wykonywania się poszczególnych iteracji pozwoli także na
porównanie czasu wykonywania się poszczególnych algorytmów.

34 
 
5. OPIS IMPLEMENTACJI

Rozdział ten zawiera opis aplikacji – sposób jej uruchamiania i konfiguracji, opis
implementacji programu, plików wynikowych i niektóre rozwiązania
implementacyjne.

5.1 APLIKACJA PORÓWNUJĄCA SKUTECZNOŚĆ WYBRANYCH

ALGORYTMÓW

Wymagania systemowe

Aplikacja została napisana w języku Java. Do jej uruchomienia niezbędne jest


zainstalowanie środowiska uruchomieniowego Javy (Java Runtime Environment) w
wersji co najmniej 5.0 . Najnowsza jego wersja powinna być dostępna tutaj:

http://java.sun.com/javase/downloads/index.jsp

Program można uruchomić na każdym systemie operacyjnym obsługującym Jave.

W systemie Windows, aby uruchomić program wystarczy na nim dwukliknąć. Jeśli


pliki *.jar skojarzone będą z innym programem niż JRE może to nie przynieść
zamierzonego efektu i wtedy trzeba będzie wydać z konsoli systemowej polecenie:

java –jar AntSystem.jar

Takim samym poleceniem uruchamiamy program w systemach z rodziny


Linux/Unix

Aplikacja

Aplikację można ściągnąć spod następującego adresu:

http://stud.ics.p.lodz.pl/~giaur/mgr/AntSystem.jar

35 
 
Okno programu

Rys. 5.1  Wygląd okna aplikacji AntSystem 

Okno programu zostało podzielone na 5 części:

Problem type

W oknie tym mamy możliwość zmiany problemu, który chcielibyśmy badać.


Dostępne są wszystkie cztery rozpatrywane problemy.

Graph generator:

Okno to pozwala nam generować graf kompletny o zadanej ilości wierzchołków.


Umożliwia też edycję grafu. Funkcje poszczególnych przycisków:

• move pozwala przesuwać metodą drag&drop wierzchołki


• + pozwala dodawać nowe wierzchołki do grafu, w miejscu kliknięcia
• - pozwala usuwać wierzchołki poprzez klikanie na nich
• Pick start vertex – wybieramy wierzchołek początkowy (dla TSP, bądź SRP)
• Pick end vertex – możliwość wyboru końcowego wierzchołka dla problemu
SRP

36 
 
Ant system type

W oknie tym możemy dokonać wyboru rodzaju systemu mrówkowego oraz ustawić
jego parametry początkowe.

File path

Tu mamy możliwość wyboru pliku wynikowego, do którego zostaną zapisane


wyniki każdej iteracji, a więc najlepsze znalezione rozwiązanie, średnie
rozwiązanie, entropia, średnie odchylenie i czas trwania iteracji.

Dodatkowo po wybraniu problemu plecakowego pokazuje nam się okno:

Knapsack

Rys. 5.2  Wygląd okna aplikacji AntSystem dla rozwiązywania problemu plecakowego 

Jest ono podzielone na dwie części. W lewej wyświetlane są wartości i wagi


wszystkich elementów dostępnych w problemie, z prawej zaś najlepsze znalezione
rozwiązanie.

37 
 
5.2 REPREZENTACJA PROBLEMÓW

Rys. 5.3  Uproszczony diagram klas dla pakietu problem 

Dla uproszczenia implementacji wszystkie problemy są reprezentowane przez obiekt


jednej klasy – Problem.

Pierwszym polem tej klasy jest pole problemType, w którym, podczas tworzenia
nowego problemu, zapisywany jest jego typ. Dostępne są zatem następujące typy
problemów:

• ShortestRouteProblem
• TravellingSalesmanProblem
• QuadraticAssignmentProblem
• KnapsackProblem

Cały graf problemu przechowywany jest w drugim polu klasy Problem –


problemGraph. W sytuacji, gdy mamy do czynienia z problemem plecakowym,
reprezentacja grafu jest inna (o tym dalej), więc przechowywany musi być graf
innego typu – referencja do niego znajduje się w polu knapsackGraph. Specyficzne
problemy potrzebują odpowiednich danych i parametrów, takich jak wierzchołek
początkowy i końcowy w problemie najkrótszej drogi, pojemność plecaka w
problemie plecakowym, czy przepływ miedzy obiektami w problemie QAP –
wszystkie te informacje przechowywane są w klasie Problem. Jeśli mamy do

38 
 
czynienia z problemem, który nie wymaga inicjacji jakiś pól – referencje pozostają
puste.

Ze względu na mnogość pól i zróżnicowania ich wykorzystania w zależności od


rozpatrywanego problemu, dla ułatwienia stworzyłem klasę ProblemFactory, która
ma cztery statyczne metody, których wywołanie zwróci nam problem pożądanego
typu.

Reprezentacja grafu problemu

Rys. 5.4  Uproszczony diagram klas dla pakietu graph i graph.service  

Graf składa się z wierzchołków (Vertex) i krawędzi je łączących (Edge).


Wierzchołki oprócz takich pól jak nazwa, pozycja (x, y) posiadają pole oznaczające
ich kolor – wykorzystywane do oznaczania wierzchołków startowych i końcowych
w problemie najkrótszej drogi, oraz pole typu boolean określające czy dany
wierzchołek jest lokalizacją, czy obiektem w problemie QAP.

W krawędzi dodano licznik wystąpień. Na początku iteracji jest on dla całego grafu
zerowany. Podczas przejścia mrówki przez krawędź licznik ten jest zwiększany.

39 
 
Wartość przejść danej krawędzi przez mrówki jest potrzebna do późniejszego
wyliczenia entropii.

Klasa Graph jest tutaj klasą centralną przechowującą wierzchołki i krawędzie. Ma


ona kilka metod ułatwiających zarządzanie grafem – możemy od niej zażądać np.
samych lokalizacji, bądź obiektów, w problemie QAP, bądź zwrócenie wszystkich
krawędzi połączonych z danym wierzchołkiem.

W graficznej wersji aplikacji z każdym grafem powiązane są dwie klasy. Jedna typu
GraphVisualizer, która po wywołaniu metody visualizeGraph(Graph graph)
zwróci obiekt który można wyświetlić w obiekcie typu JPane. Klasa
GraphVisualizer korzysta z zewnętrznej biblioteki zajmującej się wizualizacją grafu
- JGraphT. Jej najnowsza wersja, oraz dokumentacja dostępna jest pod adresem:

http://jgrapht.sourceforge.net/

Z wizualizowaną wersją grafu połączona jest klasa GraphModifier, implementująca


interfejs MouseListener, i to ta klasa zajmuje się wszelkimi modyfikacjami
wprowadzanymi przez użytkownika w grafie przy pomocy myszki. Możemy
bowiem dodawać, usuwać i przesuwać wierzchołki wygenerowanego grafu.

Graf problemu plecakowego:

Rys. 5.5  Uproszczony diagram klas dla grafu reprezentującego problem plecakowy 

Ze względu na swoją odmienność problem plecakowy reprezentowany jest przez


innego rodzaju obiekty. Przypominając: tam feromon odkładany jest na
wierzchołkach grafu zamiast na krawędziach i nie ma znaczenia kolejność

40 
 
odwiedzania wierzchołków. Skoro tak – nie potrzebujemy krawędzi w ogóle.
Feromon przenosimy do wierzchołka, który teraz nie musi mieć żadnej pozycji w
przestrzeni, ani nazwy. Za to ze względu na to, że każdy taki wierzchołek
reprezentuje jeden przedmiot, który może zabrać złodziej w problemie, muszę
przechowywać tam wagę tego przedmiotu i jego wartość.

Ze względu na dużą liczbę potrzebnych przedmiotów do tego problemu ich szybkim


generowaniem zajmuje się klasa KnapsackVertexesGenerator, która po podaniu
maksymalnej wagi, maksymalnej wartości i ilości wierzchołków zwraca mi cały
wygenerowany graf.

5.3 IMPLEMENTACJA ALGORYTMÓW

Chciałem tak zaimplementować algorytmy, aby ich obsługa była jak najprostsza.
Dzięki temu aby stworzyć dany system mrówkowy korzystamy z klasy
AntSystemFactory posiadającej osiem statycznych metod, z których każda zwraca
nam gotowy system mrówkowy określonego typu.

Ponieważ klasa AntSystem, podobnie jak Problem, jest uniwersalna – tj.


reprezentuje wszelkie możliwe systemy mrówkowe – przechowuje ona wszelkie
parametry potrzebne do pracy wszystkich systemów. Jeśli jakiś parametr w systemie
danego typu nie jest potrzebny, inicjowany jest liczbą 0, bądź jego referencja
wskazuje na null.

Aby wygenerowany system rozwiązał jakikolwiek problem, wystarczy wywołać


metodę:

solveProblem(Problem problem, int maxIterationsNumber, File out


file)

Metoda ta przyjmuje jako wejście wygenerowany wcześniej problem, liczbę


maksymalnych iteracji jakie może przebyć algorytm podczas rozwiązywania danego
problemu, oraz plik w którym mają być zapisywane wyniki obliczeń jeśli
użytkownik będzie chciał je zapisywać.

41 
 
System mrówkowy składa się z pewnej ilości mrówek, które przechowują parametry
danego algorytmu, i mogą robić tylko jedną rzecz – szukać drogi w jakimś
problemie. Robimy to wywołując metodę:

Rys. 5.6  Uproszczony diagram klas dla pakietu AntSystem  

42 
 
findRoute(Problem problem)

Dzięki temu, że podajemy w niej cały obiekt klasy Problem, mrówka sama dojdzie
do tego, z jakiego typu problemem ma do czynienia i znajdzie w nim odpowiednie
rozwiązanie.

Takie podejście do problemu powoduje, że klasy te można łatwo rozszerzyć o


interfejs graficzny, pozwalający na łatwą obsługę algorytmów, a z drugiej strony –
łatwo ich obsługę można zamknąć w innym programie, np. takim zajmującym się
automatycznym strojeniem algorytmów, czyli ich ponad ośmioma tysiącami
uruchomieniami.

5.4 IMPLEMENTACJA INTERFEJSU GRAFICZNEGO

Obsługa programu z graficznym interfejsem została maksymalnie zcentralizowana


do klasy MainWindow. To ta klasa przechowuje wszelkie dane i to w niej odbywają
się wszelkie wywołania i zmiany w algorytmie. Reszta klas reprezentuje
poszczególne inne okna programu, i ich wygląd. Jeśli w którymś z okien nastąpi
zmiana którejś wartości, albo zostanie wciśnięty przycisk – informacja o tym
kierowana jest do okna głównego, do którego wszystkie okna podrzędne mają
referencję, i tam dopiero podejmowane są dalsze działania.

Jeśli okno główne uzna, że jego działanie wymaga odświeżenia któregoś okna
podrzędnego – wywołuje jego metodę refresh(), która pobiera aktualne dane z okna
głównego i wyświetla je w jego obszarze.

43 
 
Rys. 5.7  Uproszczony diagram klas dla interfejsu graficznego programu  

5.5 IMPLEMENTACJA METODY BADANIA

Jeśli użytkownik programu zechce zapisywać wyniki do pliku, składowana jest w


nim dokładna konfiguracja użytego algorytmu, czyli jego typ oraz wszelkie
parametry, liczba wierzchołków grafu reprezentującego problem oraz jego typ.

W każdej iteracji działającego algorytmu zbierane są następujące informacje,


określone w punkcie 3.1:
44 
 
• Numer iteracji
• Czas wykonywania iteracji
• Najlepsze znalezione do tej pory rozwiązanie
• Średnie rozwiązanie, określone przez zależność (3.1)
• Odchylenie standardowe, określone przez zależność (3.2)
• Entropia, określona jako (4.3)

Zapisywane są one dla każdej iteracji w jednej linii, a oddzielane są znakiem


tabulacji ‘\t’. Powoduje to ich łatwiejsze przeglądanie w fazie następnej – analizie
wyników. Programem, którego używałem do analizy wyników jest Microsoft Excel,
który podczas wklejania tekstu zawierającego tabulatury traktuje je jak przejście do
sąsiedniej komórki, zaś znak entera jako przejście do następnego wiersza. Dzięki
takiemu zapisowi, wystarczy zatem plik wynikowy wkleić poprzez schowek systemu
Windows do programu Excel, aby w bardzo szybki sposób otrzymać wyniki zebrane
w tabeli, gotowe do dalszej analizy.

Po zakończeniu działania algorytmu, zapisywane są ilości feromonu, na


poszczególnych krawędziach

Przykładowy plik z wynikami wygląda następująco:

Ant system type AntColonySystem


Parameters:
Number of ants=20
Min amount of pheromone=0.0
Max amount of pheromone=0.0
Start pheromone amount=1.0
e=500.0
w=0.0
evaporation ratio=0.1
alfa=4.0
beta=0.2
gamma=0.0
q=0.0
q0=0.2

Problem type ShortestRouteProblem


Graph size=10

iter nr. time best avrg dev entropy


0 0 427,6597778022338 1045,6296163524341 312193,2854994466
0,40247924031409316
1 0 427,6597778022338 600,0744938613709 205026,18623723154
0,15863350795007955
2 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
3 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
4 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
5 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
6 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
7 16 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
8 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
9 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
10 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
11 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0

45 
 
12 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
13 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
14 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
15 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
16 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
17 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
18 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
19 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
20 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
21 0 427,6597778022338 427,65977780223403 5,441977714164655E-26 0,0
Pheromone amount at the end of algorithm:
Edge <0, 1> pheromone amount:1.0

...

Edge <3, 7> pheromone amount:1.0

...

Edge <8, 9> pheromone amount:1.0

Listing 1  Przykładowy plik wynikowy z działania programu  

Strojenie algorytmów

Ze względu na bardzo dużą liczbę uruchomień algorytmów zaistniała konieczność


zautomatyzowania tej czynności. Napisałem kolejną klasę – TestParameters -
zajmującą się testowaniem parametrów. W pseudokodzie jej działanie można
przedstawić następująco:

foreach(antSystemType) {

foreach(problemType) {

foreach(problemSize){

for(i=0; i<3; i++) {

Problem problem = generateNewProblem();

foreach(antSystem.getParameters) {

foreach(parameter.getPossibleValues(){

AntSystem antSystem = createAntSystem(antSystemType, parameterValue);

antSystem.solveProblem(problem, outputFile);

Listing 2  Pseudokod programu strojącego algorytmy mrówkowe 

46 
 
Czyli, tak jak w opisywanej w punkcie 4.3.1 metodzie, dla każdego rodzaju
algorytmu, dla każdego rodzaju problemu, każdego jego rozmiaru i trzech jego
wykonań sprawdzane są kolejno wszystkie wartości, wszystkich dostępnych
parametrów a wyniki zapisywane są do pliku.

Nazwa pliku, a dokładniej ścieżka, dobierana jest w taki sposób, aby tak dużą liczbę
problemów odpowiednio uporządkować. W pseudokodzie jej tworzenie wygląda jak
poniżej:

String outputFilePath = “C:\\Testy”+antSystemType + ”\\” +


problemType + ”\\” + problemSize+”\\” + index++ + ”.txt”;

Listing 3  Pseudokod ilustrujący tworzenie ścieżki pliku z wynikami  

Dzięki temu wyniki są posortowane w katalogach reprezentujących dany typ


systemu mrówkowego, rozwiązywany problem, jego rozmiar, a sam plik nazywa się
jak indeks oznaczający numer testu.

W oddzielnych plikach, dla danego algorytmu i problemu, zapisywane są


podsumowania obliczeń: dla kolejnych parametrów są to wyniki dla każdej jego
wartości, wraz z parametrem dla jakiego zostały osiągnięte. Dzięki tym plikom
łatwiejsze było stworzenie tabel z rozdziału 6.1.2. Przykładowy plik wynikowy
wygląda następująco:

Ant system type: MinMaxAntSystem


Problem type: ShortestRouteProblem
Number of vertexes: 10
Min pheromone amount 0.1
Results:
res0=430.72276565389643 found for parameter value: 0.1
res1=430.72276565389643 found for parameter value: 0.2
res2=430.72276565389643 found for parameter value: 0.5
res3=430.72276565389643 found for parameter value: 1.0
res4=430.72276565389643 found for parameter value: 2.0
res5=430.72276565389643 found for parameter value: 5.0
res6=430.72276565389643 found for parameter value: 10.0
res7=430.72276565389643 found for parameter value: 20.0
res8=Infinity found for parameter value: 50.0
res9=Infinity found for parameter value: 100.0

Max pheromone amount 5.0


Results:
res0=Infinity found for parameter value: 1.0
res1=Infinity found for parameter value: 2.0

47 
 
res2=430.72276565389643 found for parameter value: 5.0
res3=430.72276565389643 found for parameter value: 10.0
res4=430.72276565389643 found for parameter value: 20.0
res5=430.72276565389643 found for parameter value: 50.0
res6=430.72276565389643 found for parameter value: 100.0
res7=430.72276565389643 found for parameter value: 200.0
res8=430.72276565389643 found for parameter value: 500.0
res9=430.72276565389643 found for parameter value: 1000.0

...

Listing 4  Fragment przykładowego pliku z wynikiem strojenia algorytmu AS dla problemu  

48 
 
6. WYNIKI BADAŃ

W rozdziale tym zamieściłem wszystkie wyniki badań wraz z ich analizą. W części
pierwszej znajdują się wyniki strojenia algorytmów, w części drugiej – samego
porównania skuteczności algorytmów.

6.1 STROJENIE ALGORYTMÓW

6.1.1 FAZA 1:

Celem tej fazy było doświadczalne ustalenie wartości parametrów na takie, aby jak
największa liczba algorytmów uzyskiwała wyniki zbieżne. Uzyskane wyniki:

• τ0=1
• τmin=1
• τmax=100
• α=4
• β=1
• γ=0,1
• ρ=0,1
• w=5
• e=5000
• q=10
• q0=0,5

Parametry niesterowalne

Zanim uruchomię algorytm muszę wprowadzić jeszcze kilka innych wartości.


Ustawiłem je na stałym, niezmiennym poziom. Są to następujące wielkości:

• m – liczba mrówek. Oczywiście im ich jest więcej, tym lepiej, jednak ich
liczba ma znaczący wpływ na czas wykonywania się algorytmu. Źródła
[1][2][9][10] podają, że optymalna ich liczba to taka, w której jest ich tyle,
ile wierzchołków w grafie reprezentującym problem. Na drodze kompromisu,

49 
 
badając wpływ ich ilości na jakość rozwiązania i długość obliczeń –
ustawiłem ich liczbę na dwadzieścia.
• Maksymalna liczba iteracji bez entropii (iter. without entropy) – jak
poprzednio – im liczba ta wyższa, tym lepiej. Nie jest jednak możliwe
oczekiwanie w nieskończoność, aż algorytm wykona jakiś ruch
eksploracyjny. Z obserwacji wynika, że jeśli algorytm przez dziesięć iteracji
ma zerową entropię, to nie zdarza mu się przejść w nowy obszar
przeszukiwania. Jednak ze względu na niewielki wzrost kosztu
obliczeniowego, ustaliłem tą liczbę na bezpieczniejsze dwadzieścia iteracji
• Maksymalna liczba iteracji (max iterations) – czyli dla wszelkich
algorytmów poza AS awaryjne kryterium stopu, stosowane w
przypadku rozbieżności algorytmów. Liczba musi być na tyle duża, żeby
algorytmy zbieżne zdążyły odnaleźć rozwiązanie. Przeważnie następuje to po
około 100 iteracjach, w trudniejszych przypadkach wydłuża się do ok. 150.
Dla algorytmu AS z reinicjalizacją jest to jedyne kryterium stopu.
Korzystne byłoby, aby można było zaobserwować sam proces reinicjalizacji.
Następuje on około 100 iteracji. Z drugiej strony - liczba ta nie może być
zbyt duża, bo najmocniej przekłada się ona na czas działania algorytmu, jeśli
jest on rozbieżny, bądź w przypadku algorytmów AS - zawsze. Dlatego,
drogą kompromisu, ustaliłem tą wartość na 200 iteracji.

Z tak ustalonymi wartościami domyślnymi przeszedłem do fazy drugiej, czyli


właściwego strojenia algorytmów.

6.1.2 FAZA 2:

W fazie drugiej zamieściłem wyniki, kolejno, wszystkich algorytmów mrówkowych,


a dla nich – strojenia kolejnych parametrów.

Stosowane oznaczenia:

• Komórki tabeli wyróżnione zielonym kolorem tła oznaczają najlepsze


rozwiązania, które przechodzą do kolejnego etapu
• Pola oznaczone jako „-„ określają brak zbieżności dla danych ustawień –
parametry podczas porównywania algorytmów będą ustawione na domyślne.

50 
 
6.1.3 BADANIE WPŁYWU PARAMETRÓW NA WYNIKI ALGORYTMÓW

6.1.3.1 Badanie wpływu parametru α

Parametr α steruje wpływem feromonu rozłożonego w grafie na wybór drogi przez


mrówkę. Im jest wyższy – tym wpływ owej substancji na decyzje mrówek jest
większy.

Jak widać po wynikach zamieszczonych w tabeli 6.1, dla wszystkich algorytmów


ustawienie niskiej wartości parametru α prowadzi do rozbieżności algorytmu i
uniemożliwia jego stabilizację. Jest to jak najbardziej uzasadnione. Zgodnie z
zależnością (2.1) parametr ten odpowiada za wpływ szlaku feromonowego na wybór
drogi przez mrówkę. Jeśli jego wartość będzie niska – mrówki będą ignorowały
feromon. Spowoduje to, że główne założenie algorytmów mrówkowych, czyli
kooperacja mrówek, nie będzie spełnione, a mrówki wybierały będą drogę tylko i
wyłącznie na podstawie wartości heurystycznej. Przez to algorytmy będą rozbieżne,
i nie będą znajdowane najlepsze rozwiązania.

6.1.3.2 Badanie wpływu parametru β

Parametr β jako drugi po α ma wpływ na to, który czynnik ma większy wpływ na


wybór drogi przez mrówkę – czy ilość feromonu na krawędziach, czy może wartość
heurystyczna, określająca atrakcyjność danej drogi. Im jego wartość jest wyższa,
tym większy wpływ jest wartości heurystycznej.

W problemie najkrótszej drogi najlepszym rozwiązaniem jest zawsze przeskok od


razu do węzła końcowego. Z kolei wartość heurystyczna w tym problemie jest
odwrotnie proporcjonalna do długości wybieranej ścieżki – czyli preferuje przejścia
do wierzchołków leżących najbliżej. Nie dziwi więc, że algorytmy starały się dla
tego problemu ustalić parametr β na niską wartość – jak najbardziej niwelując
wpływ wartości heurystycznej na decyzje mrówek (wyniki w tabeli 6.2).

Z kolei w problemie komiwojażera algorytmy uzyskują lepsze wyniki dla


współczynnika β ustawionego na wysokie wartości. Jest to również zrozumiałe – w
problemie tym najlepsza droga składa się z przeskoków do bliskich wierzchołków,
nie zaś dalekich, a dzięki wysokiej wartości tego parametru, przeskoki takie będą
częściej preferowane przez mrówki, niż te długie.

51 
 
Algorytm/problem  0,1  0,2  0,5  1  2  5  10 
Ant Colony System 
Shortest Route Problem  ‐  ‐  ‐  ‐  574,00  647,00  835,00 
Travelling Salesman Problem  ‐  ‐  ‐  ‐  6165,00  6219,67  6066,67 
Quadratic Assignment Problem  ‐  ‐  ‐  ‐  50470,00  110624,33  111583,00 
KnapsackProblem  ‐  ‐  2697,00  2713,00  2701,67  2722,33  2718,00 
Ant‐Q System 
Shortest Route Problem  ‐  ‐  ‐  2498,33 1040,00  1074,67  1921,33
Travelling Salesman Problem  ‐  ‐  ‐  5070,00 5374,33  5033,00  5147,67
Quadratic Assignment Problem  ‐  ‐  ‐  ‐  134388,67  129081,33  129382,00
KnapsackProblem  ‐  ‐  2623,33 2631,33 2629,33  2592,00  2565,33
Cycle Ant System 
Shortest Route Problem  ‐  ‐  ‐  ‐  1048,00  1073,00  1209,00 
Travelling Salesman Problem  ‐  ‐  ‐  ‐  ‐  4782,33  4645,67 
Quadratic Assignment Problem  ‐  ‐  ‐  ‐  ‐  116078,67  114024,00 
KnapsackProblem  ‐  ‐  ‐  ‐  2662,00  2655,67 
Density Ant System 
Shortest Route Problem  ‐  ‐  ‐  ‐  4923,33  5034,33  6692,00 
Travelling Salesman Problem  ‐  ‐  ‐  ‐  4923,33  3848,17  4673,83 
Quadratic Assignment Problem  ‐  ‐  ‐  ‐  4923,33  4441,25  5682,92 
KnapsackProblem  ‐  ‐  ‐  ‐  ‐  ‐  ‐ 
Elitist Ant System 
Shortest Route Problem  ‐  ‐  ‐  467,00  580,67  640,00  618,00 
Travelling Salesman Problem  ‐  ‐  ‐  5216,00  7662,67  7984,00  8178,00 
Quadratic Assignment Problem  ‐  ‐  ‐  99644,33  101736,33  104740,00  105037,67 
KnapsackProblem  ‐  ‐  2198,33  2491,67  2488,33  2513,67  2536,00 
Max‐Min Ant System 
Shortest Route Problem  ‐  ‐  ‐  ‐  503,67  503,33  508,67 
Travelling Salesman Problem  ‐  ‐  ‐  ‐  4544,33  4906,33  5390,67 
Quadratic Assignment Problem  ‐  ‐  ‐  ‐  109612,00  110744,33  110329,00 
KnapsackProblem  ‐  ‐  ‐  ‐  2724,67  2719,33  2697,67 
Quantity Ant System 
Shortest Route Problem  ‐  ‐  ‐  ‐  2338,67  2555,33  2063,33 
Travelling Salesman Problem  ‐  ‐  ‐  ‐  4818,33  5118,00  5122,00 
Quadratic Assignment Problem  ‐  ‐  ‐  ‐  135754,00  140854,67  137394,33 
KnapsackProblem  ‐  ‐  ‐  ‐  ‐  ‐  905,67 
Rank‐Based Ant System 
Shortest Route Problem  ‐  ‐  ‐  ‐  679,6667  713,6667  769 
Travelling Salesman Problem  ‐  ‐  ‐  ‐  ‐  713,6667  837,3333 
Quadratic Assignment Problem  ‐  ‐  ‐  ‐  ‐  115301  115440 
KnapsackProblem  ‐  ‐  ‐  ‐  2859  2829,667  2778,333 
Tabela 6.1  Wyniki strojenia algorytmów parametrem α

52 
 
Podobnie algorytmy zachowują się w przypadku problemu plecakowego – preferują
wybieranie przedmiotów o najwyższych wartościach, co jest w pełni zgodne z
intuicją.

W problemie kwadratowego przydziału, algorytm, podobnie jak w SRP preferuje


raczej niski, bądź przeciętny, wpływ wartości heurystycznej. Częściej kieruje się
ilością feromonu na drogach.

Jak widać, w zależności od problemu, algorytmy preferują różne wartości tego


parametru i muszą być dostosowywane indywidualnie.

6.1.3.3 Badanie wpływu parametru τ0

Parametr τ0 określa ilość feromonu na krawędziach/wierzchołkach na początku


działania algorytmu. Nie można ustalić tej wartości na zbyt wysoką, bo wtedy
rozkład nowego feromonu nie wpływałby na decyzje mrówek, co prowadziłoby do
rozbieżności algorytmu, co widać np. dla algorytmu ACS. Z kolei zbyt niska jego
wartość powoduje zdominowanie grafu przez pierwsze, niekoniecznie optymalne
rozwiązania. Najlepsze wartości przeważnie są średnie.

Analizując wyniki zamieszczone w tabeli 6.3 widać, że duże trudności z


rozwiązywaniem problemu plecakowego mają algorytmy DAS i QAS. Dla żadnej
wartości parametru τ0 nie udało im się uzyskać zbieżności, co może świadczyć o
przyszłych problemach w starciu tych algorytmów z tym problemem.

6.1.3.4 Badanie wpływu parametru ρ

Parametr ρ to współczynnik parowania feromonu – im jest wyższy, tym mniej


feromonu z poprzednich przebiegów algorytmów pozostaje na
krawędziach/wierzchołkach grafu. Jak widać po wynikach z tabeli 6.4, zbyt niska
jego wartość powoduje problemy w działaniu algorytmu AS, ASrank i CAS. W
innych algorytmach, dla różnych problemów optymalna wartość tego parametru
przyjmuje różne wartości.

Podobnie jak podczas sterowania parametrem τ0 i w tym przypadku nie udało mi się
uzyskać zbieżności dla algorytmów DAS i QAS dla problemu KP.

53 
 
6.1.3.5 Badanie wpływu parametru q

Parametr q odpowiada za ilość feromonu pozostawianego przez mrówki na


odnalezionych drogach. Im jego wartość jest wyższa, tym więcej feromonu
pozostawi pojedyncza mrówka na odwiedzonej drodze.

Algorytm/problem  0,1  0,2  0,5  1  2  5  10 


Ant Colony System 
Shortest Route Problem  622,67  530,00  771,67  638,33  612,00  689,00  1440,00 
Travelling Salesman Problem  7164,67  6793,67  6965,00  6123,00  5292,67  4753,67  4795,33 
Quadratic Assignment Problem  109376,67  109485,67  109861,67  109758,33  110143,33  110471,67  112176,00 
KnapsackProblem  2584,33  2601,00  2654,00  2705,33  2748,33  2759,00  2760,33 
Ant‐Q System 
Shortest Route Problem  1469,33  992,33  838,33  1195,00  1253,67  1596,67  1748,33 
Travelling Salesman Problem  8105,33  7675,67  5840,00  4882,00  4498,00  4440,67  4429,33 
Quadratic Assignment Problem  128675,00  128550,00  129234,67  130883,00  130892,33  127884,67  131927,33 
KnapsackProblem  2346,00  2466,67  2569,33  2600,67  2634,00  2643,00  2643,00 
Cycle Ant System 
Shortest Route Problem  630,67  654,00  721,00  1111,00  1664,67  1716,67  1779,00 
Travelling Salesman Problem  8315,67  5996,00  4976,33  4756,67  4679,67  4848,33  4688,00 
Quadratic Assignment Problem  114311,33  114131,33  117189,67  118076,67  ‐  118774,67  120034,33 
KnapsackProblem  2347,67  2490,67  2644,33  2673,67  2685,33  2701,00  2689,67 
Density Ant System 
Shortest Route Problem  5810,33  5937,00  4683,33  3880,67  2775,67  2007,00  2129,00 
Travelling Salesman Problem  4079,00  4213,83  3663,83  3277,17  2730,50  2354,00  2409,33 
Quadratic Assignment Problem  4944,67  5075,42  4173,58  3578,92  2753,08  2180,50  2269,17 
KnapsackProblem  ‐  ‐  ‐  ‐  ‐  ‐  ‐ 
Elitist Ant System 
Shortest Route Problem  874,33  832,67  518,33  657,00  529,67  715,67  934,33 
Travelling Salesman Problem  10546,33  10406,33  9460,33  7966,33  6028,33  4539,33  4302,67 
Quadratic Assignment Problem  105013,33  105104,33  104835,00  106296,33  105352,00  106573,67  108113,33 
KnapsackProblem  2057,67  2125,67  2303,33  2493,67  2630,00  2684,67  2691,33 
Max‐Min Ant System 
Shortest Route Problem  503,33  503,33  503,33  515,67  554,67  697,67  932,33 
Travelling Salesman Problem  6902,33  6458,00  5331,33  4856,67  4445,67  4207,67  4215,33 
Quadratic Assignment Problem  109412,67  109556,33  108567,67  108552,67  109980,33  111978,67  113920,67 
KnapsackProblem  2552,67  2603,67  2690,67  2724,33  2732,67  2734,33  2737,00 
Quantity Ant System 
Shortest Route Problem  2792,33  1636,67  1864,33  2353,67  2062,33  1709,67  2138,67 
Travelling Salesman Problem  5169,00  4968,67  4941,00  4841,67  4936,33  4905,00  4853,33 
Quadratic Assignment Problem  134769,67  135973,33  138767,67  134872,00  136127,67  136642,33  138267,33 
KnapsackProblem  ‐  ‐  ‐  ‐  ‐  ‐  ‐ 
Rank‐Based Ant System 
Shortest Route Problem  648,67  648,67  648,67  750,67  840,00  872,33  1038,00 
Travelling Salesman Problem  5324,33  5186,67  4588,33  4418,00  4353,67  4356,67  4470,00 
Quadratic Assignment Problem  114185,00  114543,00  115293,00  114879,00  116064,67  118553,67  120872,33 
KnapsackProblem  2499,00  2593,00  2770,67  2845,00  2858,33  2874,00  2871,67 
Tabela 6.2  Wyniki strojenia algorytmów parametrem β

Analiza wyników zaprezentowanych w tabeli 6.5 pozwala zauważyć, że przeważnie


wartość ta ustalana jest na niskim poziomie. W przypadku algorytmu EAS, w
którym oprócz feromonu na każdej drodze znalezionej drodze, dodatkowo
odkładany jest feromon na najlepszej drodze, wartość tego parametru jest wysoka.
Najprawdopodobniej jest tak dlatego, że algorytm w ten sposób broni się przed

54 
 
zdominowaniem rozwiązań poprzez rozwiązanie uznane w pierwszych iteracjach
najlepsze.

Algorytm/problem  0,1  0,2  0,5  1  2  5  10  20  50  100 

Ant Colony System 
Shortest Route Problem 616,00  655,67  734,00  739,33  686,00  608,67  486,00  ‐  ‐  ‐ 
Travelling Salesman 
5950,67  6166,00 5952,00 6147,67 6332,33 6191,33 6084,67  5932,33  4177,50 
Problem ‐ 
Quadratic Assignment  111720, 110903, 109561, 109212,
Problem 33  00  33  33  ‐  ‐  ‐  ‐  ‐  ‐ 
KnapsackProblem 2707,67  2704,00 2708,67 2709,33 2713,67 2713,33 2706,00  2717,33  2718,33  2711,67 
Ant‐Q System 
Shortest Route Problem 741,33  1089,67 897,33  1054,00 1102,67 1686,33 2188,33  1953,00  2636,33  2973,00 
Travelling Salesman 
Problem 4682,00  4896,67 4888,33 4921,00 4590,33 4838,00 4875,67  4978,33  4953,67  4837,33 
Quadratic Assignment  128406, 127993, 128983, 129554, 132540, 132417, 134982, 136901, 136995, 136804,
Problem 33  00  67  67  67  00  33  00  00  00 
KnapsackProblem 2610,33  2599,33 2597,00 2615,33 2599,00 2600,00 2593,00  2592,00  2614,33  2603,00 
Cycle Ant System 
Shortest Route Problem 1196,33  1119,33 1108,00 1168,33 1336,00 1353,67 1339,67  1210,00  1280,00  1157,67 
Travelling Salesman 
4889,33  4799,00 4768,00 4698,00 4808,33 4671,67 4871,00  4686,67  4853,00  4803,67 
Problem
Quadratic Assignment  117249, 118734, 116153, 117498, 116155,
Problem 33  67  67  67  00  ‐  ‐  ‐  ‐  ‐ 
KnapsackProblem 2670,33  2674,00 2664,33 2673,67 2675,00 2659,33 2665,00  2655,00  2666,00  2666,00 
Density Ant System 
Shortest Route Problem 3828,40  5232,71 5918,38 5800,43 3922,94 5210,76 2133,37  2463,08  2444,95  2527,09 
Travelling Salesman  10311,3
Problem 3  9754,33 9522,00 9467,00 9914,33 8867,00 7910,67  7166,67  5484,67  5410,33 
Quadratic Assignment 
Problem 7069,87  7493,52 7720,19 7633,71 6918,64 7038,88 5022,02  4814,87  3964,81  3968,71 
KnapsackProblem ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐ 
Elitist Ant System 
Shortest Route Problem 854,33  919,33  887,33  588,33  545,67  512,33  467,00  504,67  465,67  466,33 
Travelling Salesman 
Problem 7469,67  7941,67 7641,67 7753,33 7745,67 7669,67 7551,00  6720,00  5749,67  5213,00 
Quadratic Assignment  104999, 104570, 104624, 104068, 104505, 102009, 100570, 100732, 100322, 99279,0
Problem 00  00  33  33  67  00  67  67  33  0 
KnapsackProblem 2527,00  2489,33 2517,67 2479,67 2494,00 2492,00 2494,00  2504,00  2511,33  2496,67 
Quantity Ant System 
Shortest Route Problem 2398,00  2226,67 2046,67 1405,67 2341,00 1962,67 1970,33  2575,00  2793,33  2208,67 
Travelling Salesman 
Problem 5683,33  4898,00 4880,67 4829,33 4738,33 4790,33 4765,33  4798,00  4846,67  4713,33 
Quadratic Assignment  137337, 135946, 132627, 137820, 135541, 135835, 136892, 135846, 136400, 134187,
Problem 00  67  00  67  67  33  67  33  67  67 
KnapsackProblem ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐ 
Rank‐Based Ant System 
Shortest Route Problem 709,67  700,67  706,67  730,33  725,00  717,00  753,67  741,00  700,67  682,67 
Travelling Salesman 
Problem 4481,00  4420,33 4471,67 4395,00 4372,33 4460,33 4469,00  4396,33  4416,67  3689,00 
Quadratic Assignment  113114, 114394, 114589, 114430,
Problem 67  33  67  33  ‐  ‐  ‐  ‐  ‐  ‐ 
KnapsackProblem 2833,00  2830,67 2817,33 2842,67 2821,67 2834,33 2842,67  2842,00  2835,67  2841,00 
Tabela 6.3  Wyniki strojenia algorytmów parametrem τ0  

55 
 
Podobnie jak poprzednio – dla problemu plecakowego dla algorytmów DAS i QAS
nie udało się uzyskać zbieżności.

Algorytm/problem  0,01  0,02  0,05  0,1  0,2  0,5 


Ant Colony System 
Shortest Route Problem  558,00  696,33  548,67  619,33  648,33  756,33 
Travelling Salesman Problem  6150,00  6183,67  6183,67  6253,67  6110,33  5904,67 
Quadratic Assignment Problem  110638,00  109817,33  109720,67  108945,67  108399,00  ‐ 
KnapsackProblem  2723,00  2713,00  2723,00  2710,33  2714,00  2720,33 

Ant‐Q System 
Shortest Route Problem  857,33  1036,33  1423,00  995,67  1098,67  888,33 
Travelling Salesman Problem  4974,67  4814,33  4709,67  4923,33  4859,00  4711,33 
Quadratic Assignment Problem  126598,00  127833,67  130168,67  129411,33  128178,33  134592,33 
KnapsackProblem  2576,67  2603,00  2604,00  2608,00  2590,00  2608,00 

Cycle Ant System 
Shortest Route Problem  1347,67  1202,00  1367,67  1239,67  1220,00  1167,33 

Travelling Salesman Problem  ‐  ‐  4771,00  4850,00  4954,67  4959,00 

Quadratic Assignment Problem  ‐  ‐  ‐  116650,00  114960,33  116943,00 

KnapsackProblem  2667,00  2665,67  2682,00  2661,33  2668,00  2673,67 

Density Ant System 
Shortest Route Problem  4392,00  5477,00  4691,67  4140,00  4178,33  5471,33 
Travelling Salesman Problem  9563,67  9790,00  9570,33  9921,67  10240,67  9798,67 
Quadratic Assignment Problem  130726,67  125404,33  128751,00  126693,33  123731,33  123410,00 
KnapsackProblem  ‐  ‐  ‐  ‐  ‐  ‐ 

Elitist Ant System 
Shortest Route Problem  795,33  835,67  478,67  505,00  476,00  628,33 
Travelling Salesman Problem  7827,00  7927,00  7851,67  7540,00  8080,00  7882,33 
Quadratic Assignment Problem  105355,33  104291,67  105689,00  105842,67  104755,00  104594,33 
KnapsackProblem  2502,67  2512,67  2461,00  2470,00  2525,00  2485,33 
Max‐Min Ant System 
Shortest Route Problem  ‐  503,33  503,33  516,33  525,33  622,00 
Travelling Salesman Problem  ‐  ‐  4419,67  4622,00  5079,00  6147,33 
Quadratic Assignment Problem  ‐  ‐  110272,00  109437,33  109977,33  113174,33 
KnapsackProblem  ‐  ‐  2730,33  2718,67  2702,33  2623,67 
Quantity Ant System 
Shortest Route Problem  1671,00  2283,00  2042,33  2918,33  2206,00  2209,67 

Travelling Salesman Problem  4614,33  4819,00  4924,00  4849,33  4736,67  4964,00 

Quadratic Assignment Problem  137145,33  134062,67  134803,67  136292,67  135287,33  132831,67 

KnapsackProblem  ‐  ‐  ‐  ‐  ‐  ‐ 
Rank‐Based Ant System 
Shortest Route Problem  ‐  698  737  695,3333  676  717 
Travelling Salesman Problem  ‐  ‐  ‐  4425,67  4641,00  4697,333 
Quadratic Assignment Problem  ‐  ‐  ‐  116780,33  115785,00  116222,3 
KnapsackProblem  2819,333  2834,667  2835  2838,333  2832  2821 
Tabela 6.4  Wyniki strojenia algorytmów parametrem ρ

56 
 
 

Algorytm/proble 1000 2000 5000 1000


m  1  2  5  10  20  50  100  200  500  1000  2000  5000  0  0  0  00 

Cycle Ant System 
Shortest Route  372,3 364,0 312,6 313,0 629,3 454,0 326,3 406,0 324,0 333,6 224,6 346,6 281,0 230,0 238,3 296,6
Problem  3  0  7  0  3  0  3  0  0  7  7  7  0  0  3  7 
Travelling  1673, 1695, 1690, 1593, 1588, 1751, 1781, 1529, 1657, 1680, 1939, 1884, 1997, 1832, 2031, 1926,
Salesman Problem  00  00  00  00  33  67  00  33  67  33  67  67  00  33  67  67 
Quadratic 
3666 3552 3577 3694 3592 3542 3657 3463 3638 3682 3783 3705 3722 3668 3481
Assignment 
0,67  9,00  1,00  3,00  3,67  4,00  8,67  0,00  0,67  7,33  8,00  8,67  8,67  7,33  8,33 
Problem  ‐ 
960,0 959,0 967,0 966,3 962,3 957,3 960,6 957,6 960,3 969,6 963,0 963,0 961,3 962,0 968,3 965,6
KnapsackProblem  0  0  0  3  3  3  7  7  3  7  0  0  3  0  3  7 
Density Ant 
System 
Shortest Route  2390, 1943, 1991, 2339, 2674, 1468, 1388, 2468, 1409, 1212, 1982, 2711, 1264, 1756, 2258, 1784,
Problem  00  00  33  33  67  67  33  67  00  67  33  33  00  67  67  67 
Travelling  2843, 3034, 3092, 3303, 3123, 3538, 3402, 3289, 3365, 3307, 3019, 3479, 3186, 3493, 2988, 3812,
Salesman Problem  00  67  00  67  33  33  00  33  67  00  00  67  00  00  33  00 
Quadratic 
Assignment  3895 3823 3931 3911 3889 4008 3896 4102 3847 3981 3900 3992 3895 3892 4018 3941
Problem  0,67  1,00  7,00  8,33  8,00  4,33  7,00  5,33  0,67  3,67  6,67  5,67  3,00  1,00  7,67  5,00 

KnapsackProblem  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐ 

Elitist Ant System 
Shortest Route  163,6 204,0 368,3 165,6 262,0 257,6 151,3 204,3 187,0 280,0 515,6 208,6 317,6 232,0 157,6 157,3
Problem  7  0  3  7  0  7  3  3  0  0  7  7  7  0  7  3 
Travelling  2560, 2637, 2819, 2685, 2891, 2768, 2566, 2660, 2654, 2637, 2552, 2678, 2765, 2562, 2269, 2059,
Salesman Problem  00  00  33  67  00  67  67  67  33  00  33  67  67  67  67  67 
Quadratic 
Assignment  3393 3349 3420 3346 3331 3402 3390 3407 3457 3352 3419 3310 3343 3337 3307 3346
Problem  8,33  4,33  5,00  3,33  8,00  9,00  2,33  9,00  7,33  3,33  2,00  4,67  2,33  8,67  2,00  6,33 
871,6 842,0 864,0 870,6 857,3 838,3 866,6 870,0 866,3 857,3 852,3 858,3 850,3 883,0 891,6 900,6
KnapsackProblem  7  0  0  7  3  3  7  0  3  3  3  3  3  0  7  7 
Quantity Ant 
System 
Shortest Route  863,6 823,6 755,3 603,0 1112, 839,0 1086, 717,0 1059, 1065, 1738, 1767, 1076, 1862, 855,6 2456,
Problem  7  7  3  0  00  0  67  0  00  33  67  00  33  67  7  67 
Travelling  1567, 1573, 1556, 1696, 1592, 1277, 1380, 1592, 2133, 1573, 2709, 3146, 2181, 2626, 3749, 2603,
Salesman Problem  67  00  33  67  00  67  00  33  67  33  00  33  33  33  33  00 
Quadratic 
Assignment  4389 4325 4454 4446 4325 4262 4282 4285 4312 4438 4466 4359 4291 4231 4350 4400
Problem  6,67  4,00  7,67  0,00  8,00  2,67  4,33  5,33  6,33  9,67  4,67  4,00  9,33  3,00  5,33  3,00 

KnapsackProblem  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐ 
Tabela 6.5  Wyniki strojenia algorytmów parametrem q 

6.1.3.6 Badanie wpływu parametru e

Parametr e odpowiada za ilość feromonu pozostawianego na najlepszej znalezionej


do tej pory drodze. Im jego wartość jest wyższa, tym więcej feromonu odłoży
mrówka na tej drodze.

W algorytmach, w których feromon odkładany jest tylko na najlepszej drodze, albo


na grupie dróg najlepszych, wartość ta przeważnie jest wysoka – widać to w tabeli
6.6. W algorytmie EAS, w którym feromon jest odkładany na wszystkich
znalezionych drogach, a na najlepszej tylko dodatkowo, jako jej wzmocnienie,
parametr e osiąga wartości niskie.

57 
 
10000 20000 50000 100000
Algorytm/problem  100  200  500  1000  2000  5000  10000  20000  50000  0  0  0  0 

Ant Colony System 

Shortest Route Problem ‐  ‐  497  586  702  701  789  830  711  626  783  781  687 
Travelling Salesman 
Problem ‐  ‐  ‐  ‐  ‐  ‐  ‐  5566  5910  6043  6148  5963  6056 
Quadratic Assignment  10992 10984
Problem ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  3  6  110676 

KnapsackProblem 2711  2713  2706  2711  2712  2716  2708  2705  2721  2719  2714  2708  2703 

Ant‐Q System 

Shortest Route Problem 2108  2488  2484  2061  1819  1078  768  1092  863  748  1033  1135  834 
Travelling Salesman 
Problem 5152  4848  5174  5158  5024  5189  5075  4995  4606  4753  4999  4740  4750 
Quadratic Assignment  13709 13788 13675 13801 13751 13924 13907 13612 13606 13557 13228 12850
Problem 1  3  4  8  3  1  9  9  4  2  3  2  127394 

KnapsackProblem 2588  2604  2606  2613  2596  2603  2607  2603  2607  2601  2602  2641  2597 

Elitist Ant System 

Shortest Route Problem 476  472  472  539  507  613  578  512  714  647  493  805  995 
Travelling Salesman 
Problem 5223  4382  4609  4759  4844 
5791  5267  6532  7719  8058  7762  7841  8337 
Quadratic Assignment  10091 10105 10233 10181 10229 10477
Problem ‐  99220  98981  99882  99290  99723  4  1  4  7  4  2  104249 

KnapsackProblem 2607  2589  2540  2513  2528  2509  2494  2498  2483  2516  2481  2509  2508 

Max‐Min Ant System 

Shortest Route Problem ‐  ‐  503  503  503  503  514  503  503  509  504  512  503 
Travelling Salesman 
Problem ‐  ‐  ‐  ‐  ‐  1506  1504  1501  1493  1512  1493  1511  1506 
Quadratic Assignment 
Problem ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  ‐  1010  999  1011  1005 

KnapsackProblem 2719  2713  2719  2712  2729  2710  2721  2723  2718  2724  2722  2718  2721 

Rank‐Based Ant System 

Shortest Route Problem 741  699  691  593  779  724  720  725  708  722  671  664  736 
Travelling Salesman 
Problem 4391  4411  4489  4474  4400  4453  4457  4418  4488  4383  4478  4343  4444 
Quadratic Assignment  11487 11492 11459 11437 11363 11529 11521 11419 11598 11329 11333
Problem ‐  3  9  9  1  9  4  1  8  0  9  3  114852 

KnapsackProblem 2819  2829  2836  2837  2841  2839  2834  2835  2831  2819  2829  2825  2831 
Tabela 6.6  Wyniki strojenia algorytmów parametrem e 

6.1.3.7 Badanie wpływu parametru γ

Algorytm/problem  0,01  0,02  0,05  0,1  0,2  0,5 


Ant‐Q System 
Shortest Route Problem  794,67  857,67  855,33  957,33  3232,33  3142,33 
Travelling Salesman Problem  5444,67  5407,33  5346,00  4862,33  5262,67  6452,67 
Quadratic Assignment Problem  128371,33  126558,00  129642,33  129855,33  134758,33  136090,33 
KnapsackProblem  2627,67  2623,33  2617,67  2602,67  2566,00  2546,00 
Tabela 6.7  Wyniki strojenia algorytmów parametrem γ 

Parametr ten zastosowanie ma tylko w algorytmie Ant-Q. Odpowiada on za ilość


feromonu pozostawianego przez mrówki podczas procesu szukania drogi. Im ten
współczynnik wyższy – tym więcej feromonu pozostanie na drodze podczas fazy
poszukiwania.

58 
 
Po fazie poszukiwania mrówki odkładają też feromon na najlepszej drodze,
podobnie jak w algorytmie ACS. Sterowanie tym parametrem doprowadza do
wniosków, że algorytm raczej stara się zaniżać wartość odkładanego feromonu
podczas wyszukiwania drogi – aż 75% wyników jest poniżej wartości 0,05.

Oznacza to, że Ant-Q, jako modyfikacja ACS stara się mieć jak najmniej charakteru
Ant-Q, a stara się sprowadzić swoje działanie do jak najbardziej zbliżonego do ACS.
Wywnioskować można zatem, że Ant-Q nie jest algorytmem, który znajdował
będzie najlepsze rozwiązania.

Różnica między nim a ACS sprowadza się do rozkładania feromonu już w trakcie
szukania drogi. Wychodzi zatem na to, że nie jest to dobry sposób. Podobnie
odkładanie feromonu odbywa się w algorytmach DAS i QAS – najprawdopodobniej
ich wyniki będą zatem też słabe, czego dowodzić mogą też kłopoty w ich
wysterowaniu do szukania drogi w problemie plecakowym.

6.1.3.8 Badanie wpływu parametru q0

Algorytm/problem  0,01  0,02  0,05  0,1  0,2  0,5 


Ant‐Q System/Ant Colony System 
Shortest Route Problem  729,67  788,67  818,33  881,00  766,67  1151,67 
Travelling Salesman Problem  6322,33  6309,00  5840,67  5787,67  5700,00  4820,33 
Quadratic Assignment Problem  132875,00  132333,67  128723,33  128425,00  129860,33  130991,00 
KnapsackProblem  2581,67  2573,67  2580,00  2575,33  2592,67  2586,00 
Tabela 6.8  Wyniki strojenia algorytmów parametrem q0 

Parametr ten sterowany jest w algorytmach Ant-Q i ACS. Jego działanie jest
analogiczne, dlatego jako wyniki biorę tutaj średnie wyniki z działania obu
algorytmów.

Współczynnik ten mówi, jak bardzo algorytm ma eksplorować, a jak bardzo


eksploatować przestrzeń rozwiązań. Im jego wartość jest niższa, tym algorytm
częściej eksploruje przestrzeń rozwiązań. Jak widać zatem, dla problemu SRP
algorytm bardziej stawia na przeszukiwanie całej przestrzeni rozwiązań. Z kolei w
pozostałych algorytmach częściej skłania się ku rozwiązaniom już znalezionym
bliższym. Biorąc pod uwagę charakter tych problemów – jest to uzasadnione.

59 
 
6.1.3.9 Badanie wpływu parametru w

Algorytm/problem  1  2  5  10 
Rank‐Based Ant System 
Shortest Route Problem 650,00  649,33  731,67  878,00 

Travelling Salesman Problem 4489,00  4458,00  4404,67  4439,33 

Quadratic Assignment Problem ‐  ‐  115602,67  117236,33 

KnapsackProblem 2690,33  2828,00  2830,33  2836,67 


Tabela 6.9  Wyniki strojenia algorytmów parametrem w 

Parametr w zastosowanie ma tylko w algorytmie Rank-Based Ant System. Określa


on, ile najlepszych rozwiązań upoważnionych jest do pozostawiania feromonu.
Widać, że dla różnych algorytmów wyniki są różne. Dla problemu plecakowego aż
10 mrówek jest upoważnionych do pozostawiania feromonu, z kolei w problemie
najkrótszej drogi tylko dwie.

6.1.3.10 Badanie wpływu parametrów τmin i τmax

5 10
Algorytm/problem  0,1  0,2  0,5  1  2  5  10  20  0  0 
Max‐Min Ant System 
Shortest Route Problem  508,67  503,33  503,33  522,33  508,67  503,67  515,00  ‐  ‐  ‐ 
4624,6
Travelling Salesman Problem  4799,67  4751,67  4816,00  4763,33  4718,33  4797,33  7  ‐  ‐  ‐ 
Quadratic Assignment  110246,3 109043,6 110226,0 109478,6 108819,6 109424,0
Problem  3  7  0  7  7  0  ‐  ‐  ‐  ‐ 
2720,6 2716,6
KnapsackProblem  2718,33  2722,33  2723,67  2716,67  2725,00  2716,33  7  7  ‐  ‐ 
Tabela 6.10  Wyniki strojenia algorytmów parametrem τ min 

Algorytm/problem  1  2  5  10  20  50  100  200  500  1000 


Max‐Min Ant System 
Shortest Route Problem  ‐  ‐  503,33  514,67  513,67  503,33  503,33  503,33  511,33 
Travelling Salesman 
Problem  ‐  ‐  6215,00  6037,00  6153,00  6800,00  6473,00  6218,00  6373,00  6240,00 
Quadratic Assignment  110216,0 110367,3 109259,0 109767,0 109373,6 109677,3 109192,6 108581,6
Problem  ‐  ‐  0  3  0  0  7  3  7  7 
KnapsackProblem  ‐  ‐  2722,67  2725,33  2723,00  2721,33  2723,33  2722,33  2717,67  2720,33 
Tabela 6.11  Wyniki strojenia algorytmów parametrem τ max 

Parametry te sterowalne są tylko dla algorytmu Max-Min Ant System. τmin określa
ile feromonu może być minimalnie rozkładanych na krawędziach/wierzchołkach
grafu, z kolei τmax ile tego feromonu może być maksymalnie.

Okazuje się, ze dla problemów takich jak SRP i QAP algorytm stara się jak
najbardziej poszerzyć przedział dostępnych wartości feromonu – algorytm ustawia
wartość minimalna na niskie wartości, z kolei wartość maksymalną wysoko.

60 
 
Odwrotna sytuacja ma miejsce problemie plecakowym i w problemie komiwojażera
– algorytm stara się ten przedział zawęzić.

W problemie komiwojażera zjawisko to jest widoczne na tyle, że znaleziona wartość


minimalna jest taka sama jak maksymalna. Oczywiście ustawienie algorytmu na
takie wartości spowodowałoby, że nie mógłby on działać skutecznie. Dlatego
wartość minimalną feromonu zmieniam na jeden.

Jest to miejsce w którym można zauważyć, że regulowanie parametrami niezależnie,


tak, jak to robię w mojej metodzie, nie jest w 100% skuteczne. Algorytm chcąc np.
tak jak tutaj, zawęzić przedział, zrobi to regulując parametrami oddzielnie tak
mocno, że uniemożliwia swoje działanie. Najprawdopodobniej podczas strojenia
innymi zaproponowanymi metodami (4.3.3) nie doszłoby do takiej sytuacji.

6.1.4 WNIOSKI

W fazie tej uzyskałem wartości parametrów, które powinny pozwolić skutecznie


porównać skuteczność algorytmów.

Jednak już na tym etapie doświadczeń da się zauważyć, że czasami regulowanie


parametrami oddzielnie doprowadzić może do niemożności skutecznego działania
algorytmu i wymaga przez to analizy i ustalenia wielkości parametrów przez
badacza.

Po tej fazie badań zaobserwowałem, że pozostawianie feromonu na krawędziach


podczas wyszukiwania drogi bardzo niekorzystnie wpływa na jakość rozwiązań.
Wywnioskowałem to po tym, że algorytm Ant-Q System osiąga najlepsze wyniki
wtedy, gdy pozostawia podczas wyszukiwania drogi najmniej feromonu. Z kolei
dwa pozostałe algorytmy, odkładające feromon podczas szukania drogi – Density
Ant System i Quantity Ant System nie uzyskują zbieżności dla problemu
plecakowego. Może to być sygnałem, że wyniki uzyskiwane przez te algorytmy nie
będą wysokiej jakości.

61 
 
6.2 PORÓWNANIE SKUTECZNOŚCI ALGORYTMÓW

6.2.1 PORÓWNANIE UZYSKANYCH WYNIKÓW

Problem najkrótszej drogi

algorytm  wynik 
Density Ant System  882,41
Quantity Ant System  802,42
Ant‐Q System  654,69
Ant Colony System  441,67
Cycle Ant System  438,42
Elitist Ant System  438,42
Max‐Min Ant System  438,42
Rank‐Based Ant System  438,42
Tabela 6.12  Najlepsze wyniki algorytmów dla problemu najkrótszej drogi 

1000

900

DAS
800
QAS
700 AQ
ACS
600
CAS

500 EAS
MMAS
400 RBAS

300
0
9
18
27
36
45
54
63
72
81
90
99
108
117
126
135
144
153
162
171
180
189
198

Rysunek 6.1  Wykres najlepszych wyników algorytmów dla problemu najkrótszej drogi 

Aż cztery z testowanych algorytmów uzyskały identyczny wynik. Są to algorytmy


CAS, EAS, AS i ASrank. Wszystkie wyniki uzyskane przez nie dla tego
problemu to były najlepsze jego znane rozwiązania.

Tuż za nimi, z niewiele gorszym wynikiem – w jednym problemie nie uzyskano


najlepszego znanego rozwiązania – plasuje się algorytm ACS. Później dopiero
daleko za nimi algorytmy Ant-Q, QAS i DAS, które uzyskały nawet ponad
dwukrotnie większą średnią wyników.

62 
 
Problem plecakowy

algorytm  wynik 
Max‐Min Ant System  2993,56
Ant‐Q System  2992,11
Rank‐Based System  2991,78
Ant Colony System  2991,22
Cycle Ant System  2990,44
Elitist Ant System  2990,33
Density Ant System  2818,33
Quantity Ant System  2773,44
Tabela 6.13  Najlepsze wyniki algorytmów dla problemu plecakowego  

3050

3000

2950 MMAS
AQ
2900
RBAS
2850 ACS

2800 CAS
EAS
2750
DAS
2700 QAS

2650
108
117
126
135
144
153
162
171
180
189
198
0
9
18
27
36
45
54
63
72
81
90
99

Rysunek 6.2  Wykres najlepszych wyników algorytmów dla problemu plecakowego 

W tym problemie, najprawdopodobniej żadnemu z algorytmów nie udało się


uzyskać najlepszych znanych wyników, co można wnioskować po tym, że
odnalezione wyniki nie pokrywają się. Najlepszy okazał się algorytm AS,
jednak różnica między nim i pozostałymi algorytmami jest na tyle niewielka, że
można ją pominąć.

Dużo gorsze od czołówki wyniki uzyskały, podobnie jak poprzednio, algorytmy


DAS i QAS. Tym razem algorytm Ant-Q znalazł się już na drugim miejscu
najlepszych wyników, wyżej nawet od algorytmu ACS, którego jest modyfikacją.
Należy jednak przypomnieć, że wartość współczynnika, który odpowiada za
odkładanie feromonu podczas przeszukiwania grafu była tutaj ustawiona na bardzo

63 
 
niską wartość γ=0,01, przez co jego przewaga nad ACS może być w zasadzie
przypadkowa i trudno o niej tutaj przesądzać.

Zarówno problem najkrótszej drogi jak i problem plecakowy nie pokazują wyraźnie
który algorytm można uznać za najbardziej skuteczny, jednak pokazują, że
algorytmy DAS i QAS najprawdopodobniej zwycięzcami porównania nie będą.

Problem komiwojażera

algorytm  wynik 
Ant Colony System  2706,87
Ant‐Q System  2655,33
Quantity Ant System  2595,73
Density Ant System  2592,33
Cycle Ant System  2518,24
Rank‐Based Ant System  2480,15
Elitist Ant System  2450,92
Max‐Min Ant System  2433,72
Tabela 6.14  Najlepsze wyniki algorytmów dla problemu komiwojażera

Wyniki zobrazowane zostały na wykresie 6.3.

Problem trudniejszy do rozwiązania, dzięki czemu zaobserwować da się większe


zróżnicowanie otrzymanych wyników. Przede wszystkim widać już wyraźnie
przewagę algorytmu AS nad innymi. Drugie miejsce zajmuje algorytm EAS,
trzecie ASrank. Algorytmy pozostawiające feromon podczas przeszukiwania grafu,
jak poprzednio, zajmują niskie miejsca. Zaskakujące jest, że najgorszym
algorytmem nie jest jednak AQ, a ACS.

Widać też, że wszystkie algorytmy oprócz ASrank jako najlepsze rozwiązanie w


pierwszej iteracji przyjmują w zasadzie to samo, a później tylko różnie rozwijają
swoje poszukiwania. ASrank zaczyna z rozwiązania o wiele gorszego, stopniowo
schodząc do rozwiązania bliskiego optymalnemu.

Interesującym faktem jest to, że do ok. 100 iteracji najlepsze rozwiązanie znalazł
algorytm EAS, zaś rozwiązanie algorytmu AS od ok. 35 iteracji zdaje się nie
zmieniać i pozostaje na nieznacznie gorszym poziomie. Dopiero od ok. 100 iteracji
algorytm AS zaczyna znajdować coraz lepsze rozwiązania, aby ostatecznie
uzyskać rozwiązanie najlepsze spośród wszystkich algorytmów.

64 
 
3600

3400

3200 ACS
AQ
3000 QAS
DAS
2800 CAS
RBAS
2600 EAS
MMAS
2400

2200
18
27
36
45
54
63
72
81
90
99
108
117
126
135
144
153
162
171
180
189
198
0
9

Rysunek 6.3  Wykres najlepszych wyników algorytmów dla problemu komiwojażera

Problem kwadratowego przydziału

Problem  wynik 
Density Ant System  57096,47
Quantity Ant System  52628,97
Ant‐Q System  53235,25
Ant Colony System  53062,3
Cycle Ant System  50882,49
Ealitist Ant System  50636,41
Rank‐Based Ant System  49964,33
Max‐Min Ant System  49375,96
Tabela 6.15  Najlepsze wyniki algorytmów dla problemu kwadratowego przydziału

W problemie kwadratowego przydziału różnice między algorytmami są jeszcze


większe. Znowu zwycięzcą jest AS, a drugie i trzecie miejsce zajmują
odpowiednio ASrank i EAS, z tym, że w odwrotnej kolejności niż poprzednio.
Najgorzej i daleko poza czołówką są znowu cztery algorytmy: QAS, DAS, ACS i
AQ.

65 
 
58000

57000

56000
DAS
55000
QAS
54000
AQ
53000 ACS
52000 CAS
EAS
51000
RBAS
50000
MMAS
49000

48000
0
9
18
27
36
45
54
63
72
81
90
99
108
117
126
135
144
153
162
171
180
189
198
Rysunek 6.4 Wykres najlepszych wyników algorytmów dla problemu komiwojażera

Zauważyć jednak należy, że uzyskane przez siebie, w sumie drugie rozwiązanie,


algorytm ASrank uzyskał już w ok. 35 iteracji, gdzie algorytm AS pochwalić się
mógł rozwiązaniami dużo słabszymi. Jednak zarówno AS, jak i EAS
polepszały swoje wyniki mniej więcej aż do 180 iteracji, gdzie dopiero nastąpiła ich
stabilizacja, podczas gdy ASrank zatrzymał swoje działanie.

6.2.2 SZYBKOŚĆ ALGORYTMÓW

Jak widać po wykresie 6.5, najwięcej czasu na wyszukiwanie rozwiązania


potrzebuje algorytm AS – średnio aż 16 sekund. Nie ma w tym nic dziwnego –
przebyć on musi pełne 200 iteracji, gdzie inne algorytmy mogą zatrzymać się
wcześniej

Algorytm EAS znajduje rozwiązanie w czasie o połowę krótszym. Najszybszy jest


algorytm ACS. Dzieje się tak najprawdopodobniej dlatego, że zarówno odkładanie,
jak i parowanie feromonu przebiega tylko na najlepszej drodze znalezionej do tej
pory.

66 
 
Warto zauważyć, że algorytm, który jest w pierwszej trójce najlepszych – ASrank –
na rozwiązanie problemu potrzebuje średnio zaledwie 2 sekundy, a jego wyniki są
na poziomie algorytmu EAS, który potrzebuje sekund aż czterokrotnie więcej.

18000

16000

14000

12000

10000

8000

6000

4000

2000

0
MMAS EAS DAS QAS CAS RBAS AQ ACS

Rysunek 6.5 Wykres średnich czasów wykonywania się poszczególnych algorytmów. Wyniki w milisekundach

Wnioski:

Niewątpliwie najlepszej jakości wyniki odnajduje algorytm AS. Jeśli mamy


zatem wystarczającą ilość czasu, aby go uruchomić – będzie to algorytm najlepszy.
Jeśli jednak zależy nam na szybkości – najlepszy okaże się algorytm ASrank, który
uzyskuje niemalże tak samo dobre wyniki jak zwycięzca, w o wiele krótszym czasie.

Absolutnie nieefektywne algorytmy to QAS, DAS, Ant-Q i ACS. Postaram się teraz
odpowiedzieć na pytanie dlaczego tak jest.

6.2.3 UZASADNIENIE WYNIKÓW

6.2.3.1 ŚREDNIE ROZWIĄZANIA

Problem najkrótszej drogi

Pierwsza rzecz, która się rzuca w oczy – brak zbieżności algorytmu EAS. Okazuje
się, że mimo strojenia algorytmów, dla tego nie udało się uzyskać zbieżności. Nie

67 
 
6000

5000
AQ
4000 ACS
CAS
3000 DAS
EAS
2000 MMAS
QAS
1000 RBAS

0
16
24
32
40
48
56
64
72
80
88
96
0
8

104
112
120
128
136
144
152
160
168
176
184
192
Rysunek 6.6 Wykres średnich wyników algorytmów dla problemu najkrótszej drogi

było tego w ogóle widać po najlepszych wynikach – pokrywały się one z


algorytmami które zbieżność uzyskały.

Najprawdopodobniej przez zwiększenie ilości feromonu startowego τ0 i jednoczesne


zmniejszenie ilości feromonu odkładanego przez mrówki przesterowałem algorytm.
Gdyby sterować tylko jedną z tych wartości, bądź dwoma wartościami jednocześnie,
najprawdopodobniej nie doszłoby do tego. Na szczęście owo przesterowanie nie ma
w tym przypadku negatywnego wpływu na wynik – algorytm uzyskał najwyższy
możliwy dla tego problemu.

Wykres ten może również uzasadnić, czemu algorytm AS jest najlepszy –


widać wyraźnie, że jego zbieganie się ku najlepszemu wynikowi jest najwolniejsze,
więc najprawdopodobniej przeszukuje on najszerzej przestrzeń dopuszczalnych
rozwiązań. Widać też wyraźnie moment jego reinicjalizacji – około 190 iteracji –
algorytm zaczyna szukać od początku.

Dosyć długo przeszukuje również przestrzeń algorytm ASrank – 40 iteracji, i CAS –


ok. 20 iteracji.

68 
 
Interesujące zachowanie przejawia algorytm ACS. Mimo szybkiego ustawienia się
na najlepszym rozwiązaniu (już w 8mej iteracji) przez cały czas działania algorytmu
podejmuje on próby znalezienia innego rozwiązania – wykres nie pozostaje stały.

Algorytmy pozostawiające feromon podczas przeszukiwania grafu w zasadzie od


pierwszej iteracji stabilizują się na znalezionym rozwiązaniu. Niestety rozwiązaniu
niskiej jakości.

Problem plecakowy

3050

3000

2950 AQ
ACS
2900
CAS
2850 DAS
EAS
2800
MMAS
2750 QAS

2700 RBAS

2650
0
8
16
24
32
40
48
56
64
72
80
88
96
104
112
120
128
136
144
152
160
168
176
184
192

Rysunek 6.7 Wykres średnich wyników algorytmów dla problemu plecakowego

Obserwując wykres dla średniej znalezionej wartości widać algorytmy znajdujące


rozwiązanie poprawnie dosyć szybko je odnajdują i kierują wszystkie mrówki na
prawidłowe „tory”. Algorytmy które gorzej radzą sobie z rozwiązywaniem tego
problemu próbują, inaczej niż to miało miejsce dla SRP, szukać innych,
alternatywnych ścieżek, jednak najprawdopodobniej poszukiwania są zawężone do
tak małego przedziału że nie udaje im się „wyrwać” z pierwszych znalezionych
rozwiązań.

69 
 
Problem komiwojażera

4500

4000
AQ
ACS
3500
CAS
DAS
3000 EAS
MMAS
QAS
2500
RBAS

2000
16
24
32
40
48
56
64
72
80
88
96
0
8

104
112
120
128
136
144
152
160
168
176
184
192
Rysunek 6.8 Wykres średnich wyników algorytmów dla problemu komiwojażera

Wykres średniego znalezionego rozwiązania dla problemu komiwojażera pokazuje


przede wszystkim, że odnalezione, najlepsze rozwiązanie przez algorytm EAS było
znalezione zupełnie przypadkowo. W rzeczywistości algorytm głównie przeszukiwał
rozwiązania o jakości na poziomie algorytmu ACS. Dobitniej podkreśla to zatem
przewagę algorytmu ASrank nad EAS.

Uzasadnienie też znajduje nagłe polepszanie najlepszego wyniku dla tego problemu
od ok. 140 iteracji dla algorytmu AS. Mniej więcej w 80 iteracji nastąpiły
reinicjalizacje algorytmu, i to mniej więcej w okolicach 140 iteracji algorytm zbliżył
się do rozwiązania optymalnego, znajdując je tym razem jeszcze lepiej niż w
pierwszym cyklu.

Po tym nastąpiła jeszcze jedna reinizcjalizacja i, gdyby algorytm działał dłużej,


nastąpiła by zapewne jeszcze nie jedna i wielce prawdopodobne jest, że algorytm ten
znalazłby jeszcze lepsze rozwiązania.

Z kolei jego konkurenci, poza algorytmem EAS, który przeszukiwał inną przestrzeń,
nie przejawiali tendencji do polepszenia znalezionych rozwiązań – szlaki
feromonowe zostały na nich ustabilizowane.

70 
 
Problem kwadratowego przydziału

60000

58000

AQ
56000
ACS
54000 CAS
DAS
52000
EAS
MMAS
50000
QAS
48000 RBAS

46000
18
27
36
45
54
63
72
81
90
99
0
9

108
117
126
135
144
153
162
171
180
189
198
Rysunek 6.9 Wykres średnich wyników algorytmów dla problemu kwadratowego przydziału

Na powyższym wykresie najdobitniej widać, że pierwsze kroki ku najlepszemu


rozwiązaniu najlepiej kieruje algorytm ASrank. Pierwsze uzyskane rozwiązania przez
AS nie są najlepsze, ale dzięki możliwości reinicjalizacji kolejne przewyższają
te odnalezione przez algorytm ASrank.

Ciekawym zjawiskiem jest też to, że algorytm CAS oscyluje po rozwiązaniach aż do


ok. 80 iteracji, po czym stabilizuje się na rozwiązaniu nienajlepszym. Oznacza to,
że sposób oznaczania drogi feromonem w klasyczny sposób może jednak nie być
najlepszym.

6.2.3.2 ENTROPIA I ODCHYLENIE STANDARDOWE

Problem najkrótszej drogi

Wykres entropii jeszcze dokładniej pozwala nam zaobserwować wcześniejsze


spostrzeżenia. Widać, że większość algorytmów dosyć szybko zaprzestaje
poszukiwań, do 20 iteracji rozwiązań szuka CAS, do 40 ASrank, a aż do 140
AS, a wtedy następuje reinicjalizacja feromonu i poszukiwania dla niego
rozpoczynają się od początku.

71 
 
0,3

0,25
ACS
0,2 AQ
CAS
0,15 DAS
EAS
0,1 MMAS
QAS
0,05
RBAS

0
0
8
16
24
32
40
48
56
64
72
80
88
96
104
112
120
128
136
144
152
160
168
176
184
192
Rysunek 6.10 Wykres entropii algorytmów dla problemu najkrótszej drogi

Wykres odchylenia standardowego „opada” wolniej niż wykres entropii. Oznacza to,
że pomimo, że zawęża się obszar poszukiwanych danych, to wyniki potrafią ciągle
być z szerokiego zakresu. Na potrzeby moich badań bardziej interesujący jest zatem
wykres entropii, gdyż bardziej mnie interesuje siła eksploracji algorytmu, a jej
wyniki mogę zobaczyć na wykresach najlepszego znalezionego rozwiązania, bądź
średniego uzyskanego rozwiązania. Biorąc powyższe pod uwagę, pomijam
umieszczanie wykresów średniego odchylenia w niniejszej pracy, gdyż w ich kształt
przebiega adekwatnie do entropii.

14000000

12000000 ACS
10000000 AQ

8000000 CAS
DAS
6000000
EAS
4000000
MMAS
2000000 QAS
0 RBAS
18
27
36
45
54
63
72
81
90
99
108
117
126
135
144
153
162
171
180
189
198
0
9

Rysunek 6.11 Wykres średniego odchylenia algorytmów dla problemu najkrótszej drogi

72 
 
Problem plecakowy

Na wykresie 6.12 da się zauważyć co najmniej siedem reinicjalizacji algorytmu


AS. Widać też, że przez cały czas działania próbują znaleźć rozwiązania
algorytmy DAS, CAS i QAS co można już było zauważyć na wykresie średniego
rozwiązania. Jednak na wykresie tym widać, że zakres poszukiwań jest najszerszy
dla DAS, a dla CAS najmniejszy, na wykresie średniego rozwiązania wręcz
niezauważalny.

0,16

0,14

0,12
ACS

0,1 AQ
CAS
0,08 DAS
EAS
0,06
MMAS

0,04 QAS
RBAS
0,02

0
0
8

104
112
120
128
136
144
152
160
168
176
184
192
16
24
32
40
48
56
64
72
80
88
96

Rysunek 6.12 Wykres entropii algorytmów dla problemu plecakowego

Problem komiwojażera

Potwierdzają się wcześniejsze spekulacje – algorytm AS szuka rozwiązania do


końca swojego działania, ASrank do ok. 50 iteracji, zaś CAS do ok. 25. Poszukiwania
przesterowanego EAS zawężają się ok. 25 iteracji, ale trwają niezmiennie aż do
zatrzymania algorytmu.

73 
 
0,4

0,35

0,3
ACS

0,25 AQ
CAS
0,2 DAS
EAS
0,15
MMAS
0,1 QAS
RBAS
0,05

0
104
112
120
128
136
144
152
160
168
176
184
192
0
8
16
24
32
40
48
56
64
72
80
88
96

Rysunek 6.13 Wykres entropii algorytmów dla problemu komiwojażera

Problem kwadratowego przydziału

0,3

0,25

ACS
0,2
AQ
CAS
0,15 DAS
EAS

0,1 MMAS
QAS
RBAS
0,05

0
16
24
32
40
48
56
64
72
80
88
96
104
112
120
128
136
144
152
160
168
176
184
192
0
8

Rysunek 6.14 Wykres entropii algorytmów dla problemu komiwojażera

74 
 
Zwyczajowo przeszukiwanie przestrzeni rozwiązań przez algorytm AS trwa
nieprzerwanie. Ciekawe efekty przynosi jednak przyjrzenie się wykresom
algorytmów ASrank i CAS.

Algorytm ASrank przeszukuje graf do 80 iteracji, podczas gdy nie uzyskuje poprawy
od iteracji ok. 65. Przy czym ostatnie przeszukiwania są mocno zawężone – entropia
jest niższa niż 0,05. Jest to mocno intuicyjne: algorytm jest znalazł najlepsze
rozwiązanie, ale szuka jeszcze w jego pobliżu być może lepszych opcji.

Z kolei algorytm CAS pomimo braku poprawy od 40 iteracji przeszukuje graf


jeszcze dosyć intensywnie. Skutkuje to tym, że średnie uzyskane przez niego
rozwiązanie ustala się powyżej najlepszego (wykres średniego przebiegu).

Powoduje to jeszcze większemu zwiększeniu przewagi algorytmu ASrank nad nim.

6.2.4 WNIOSKI

Badania wykazały, że najskuteczniejszym algorytmem mrówkowym spośród


badanych jest Max-Min Ant System stworzony przez Stutzle’a i Hoos’a w 1997 roku.
Z kolei algorytmem bardzo szybkim, zajmującym drugie miejsce pod względem
wydajności, okazał się algorytm Rank-Based Ant System zaproponowany przez
Bullnheimer’a w drugiej połowie 1999 roku. Najgorzej sprawowały się algorytmy
starające się wiernie oddać zachowanie żywych mrówek poprzez rozkładanie
feromonu już podczas swojej wędrówki w poszukiwaniu rozwiązania, czyli takie jak
Density Ant System i Quantity Ant System, które powstały jako zarodek algorytmów
mrówkowych, w rękach Marco Dorigo, w 1992 roku.

Algorytmem dającym najlepszy stosunek jakość/czas jest niewątpliwie algorytm


ASrank, który w ciągu zaledwie dwóch i pół sekundy potrafi znaleźć takie wyniki jak
AS w ciągu sekund dziesięciu. Jest to bardzo duża różnica czasu, dlatego
algorytm ten najlepiej się sprawdzi przy dużych problemach, które mają być
rozwiązane bardzo szybko. Przyroda jest dobrą inspiracją, ale nie zawsze wierne jej
oddawanie prowadzi do najlepszych rezultatów.

75 
 
Okazało się, że porównanie skuteczności algorytmów nie jest zagadnieniem łatwym
i jeśli sprowadzimy je do prostego porównania najlepszych uzyskanych wyników,
nie dostaniemy pełnego obrazu różnic wynikających między algorytmami. Dopiero
analiza wykresów średniego rozwiązania pozwoliła uściślić wyniki badań, zaś
analiza entropii pozwoliła dodatkowo te wyniki uzasadnić.

76 
 
7 ZAKOŃCZENIE

W pracy tej dokonałem skutecznego porównania algorytmów mrówkowych.


Wyraźnie udało mi się wskazać algorytm znajdujący najlepsze rozwiązania, jak i
algorytm, którego stosunek jakości znajdowanego rozwiązania do czasu działania
jest najkorzystniejszy. Opracowana i zastosowana metoda pozwoliła także uzasadnić
otrzymane wyniki, a przez to zwiększyć przeświadczenie o wyższości algorytmu
Max-Min Ant System nad innymi algorytmami.

Zaimplementowałem i przetestowałem większość, bo aż osiem, algorytmów


mrówkowych, do rozwiązywania czterech, różnych problemów optymalizacyjnych.
Dodatkowo opracowałem metodę dobierającą parametry uruchomieniowe
algorytmów na takie wartości, aby uzyskiwane przez nie wyniki były jak najwyższej
jakości. Podjąłem się też oceny tej metody i wskazałem propozycje innych,
alternatywnych rozwiązań.

Tym samym wszystkie cele i zadania postawione pracy zostały spełnione.

77 
 
8. BIBLIOGRAFIA

Opracowania książkowe:

[1] Boryczka Urszula: “Algorytmy Optymalizacji Mrowiskowej”, Wydawnictwo


Uniwersytetu Śląskiego, Katowice 2006

[2] Dorigo Marco, Stutzle Thomas: „Ant Colony Optimization”, Massachusetts


Institute of Technology, London 2004

Publikacje:

[3] Barton, A.: „A Simplified Ant Colony System Applied to the Quadratic
Assignment Problem”, National Research Council of Canada, March 2005

[4] Dorigo Marco, Gambardella Luca M.: “Ant-Q: A Reinforcement Learning


Approach to the Travelling Salesman Problem”, Twelfth International
Conferencing on Machine Learning, Morgan Kaufmann, 1995

[5] Dorigo Marco, Gambardella Luca M., Taillard E. D. : “Ant Colonies for the
Quadratic Assignment Problem”,

[6] Dorigo Marco, Maniezzo Vittorio, Colorni Alberto: “The Ant System:
Optimization by a Colony of Cooperating Agents”, IEEE Transactions on
Systems, 1996

[7] Górecka Roma, „Teoria i Technika Eksperymentu”, pomoc dydaktyczna,


Politechnika Krakowska, Kraków 1995

[8] Hooker J. N.: „Testing Heuristics: We Have It All Wrong”, Graduate School
Of Industrial Administration, Pittsburgh, USA 1995

[9] Jankowiak Michał: “Zastosowanie Algorytmów Mrówkowych do


Rozwiązywania Symetrycznego Problemu Komiwojażera”, Software 2.0,
2/2003.

[10] Linda Tomasz, Abrich Daniel: „Optymalizacja Kolonii Mrówek w


Zastosowaniu do Problemu Komiwojażera”, Wydział Informatyki i
Zarządzania, Wrocław 2001.

78 
 
[11] Maniezzo Vittorio, Colorni Alberto: “The Ant System Applied to the
Quadratic Assignment Problem”

[12] Mills Patrick: “Monitors for GLS and Other Meta-Heuristics”, Department of
Computer Science, University of Essex, May 2000

[13] Rostański Tomasz: „Teoria Gier w Ujęciu Systemów Mrowiskowych”, praca


licencjacka pod kierownictwem Boryczki Urszuli, Sosnowiec 2003

79 
 

You might also like