UNIWERSYTET JAGIELLOŃSKI W KRAKOWIE



Podobne dokumenty
Algorytm genetyczny (genetic algorithm)-

Algorytm Genetyczny. zastosowanie do procesów rozmieszczenia stacji raportujących w sieciach komórkowych

Algorytmy genetyczne

Algorytmy genetyczne. Materiały do laboratorium PSI. Studia stacjonarne i niestacjonarne

Algorytmy genetyczne. Materiały do laboratorium PSI. Studia niestacjonarne

PLAN WYKŁADU OPTYMALIZACJA GLOBALNA ZADANIE KOMIWOJAŻERA METODY ROZWIĄZYWANIA. Specyfika zadania komiwojażera Reprezentacje Operatory

Algorytmy mrówkowe (optymalizacja kolonii mrówek, Ant Colony optimisation)

Wybrane podstawowe rodzaje algorytmów

Optymalizacja. Wybrane algorytmy

6. Klasyczny algorytm genetyczny. 1

Algorytmy genetyczne

ALGORYTMY GENETYCZNE ćwiczenia

Zadanie 5 - Algorytmy genetyczne (optymalizacja)

Algorytmy ewolucyjne NAZEWNICTWO

SCHEMAT ROZWIĄZANIA ZADANIA OPTYMALIZACJI PRZY POMOCY ALGORYTMU GENETYCZNEGO

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott

Metody przeszukiwania

Algorytmika Problemów Trudnych

Struktury danych i złożoność obliczeniowa Wykład 5. Prof. dr hab. inż. Jan Magott

Techniki optymalizacji

Algorytmy metaheurystyczne Wykład 6. Piotr Syga

Algorytmy genetyczne. Paweł Cieśla. 8 stycznia 2009

Efektywność Procedur Obliczeniowych. wykład 5

MIO - LABORATORIUM. Imię i nazwisko Rok ak. Gr. Sem. Komputer Data / EC3 VIII LAB...

Problem Komiwojażera - algorytmy metaheurystyczne

Struktury danych i złozoność obliczeniowa. Prof. dr hab. inż. Jan Magott

Generowanie i optymalizacja harmonogramu za pomoca

Algorytmy ewolucyjne. wprowadzenie

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle

Obliczenia ewolucyjne - plan wykładu

Algorytmy ewolucyjne - algorytmy genetyczne. I. Karcz-Dulęba

Obliczenia inspirowane Naturą

Droga i cykl Eulera Przykłady zastosowania drogi i cyku Eulera Droga i cykl Hamiltona. Wykład 4. Droga i cykl Eulera i Hamiltona

Optymalizacja. Przeszukiwanie lokalne

TEORETYCZNE PODSTAWY INFORMATYKI

Metody Optymalizacji: Przeszukiwanie z listą tabu

Porównanie czasów działania algorytmów sortowania przez wstawianie i scalanie

Algorytmy genetyczne. Dariusz Banasiak. Katedra Informatyki Technicznej Wydział Elektroniki

Odkrywanie algorytmów kwantowych za pomocą programowania genetycznego

operacje porównania, a jeśli jest to konieczne ze względu na złe uporządkowanie porównywanych liczb zmieniamy ich kolejność, czyli przestawiamy je.

Wykład 4. Droga i cykl Eulera i Hamiltona

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA

Algorytmy Mrówkowe. Daniel Błaszkiewicz. 11 maja Instytut Informatyki Uniwersytetu Wrocławskiego

Algorytmy metaheurystyczne podsumowanie

Teoria obliczeń i złożoność obliczeniowa

Aproksymacja funkcji a regresja symboliczna

Lista 6 Problemy NP-zupełne

Matematyczne Podstawy Informatyki

Wyznaczanie optymalnej trasy problem komiwojażera

Plan. Zakres badań teorii optymalizacji. Teoria optymalizacji. Teoria optymalizacji a badania operacyjne. Badania operacyjne i teoria optymalizacji

PLAN WYKŁADU OPTYMALIZACJA GLOBALNA OPERATOR KRZYŻOWANIA ETAPY KRZYŻOWANIA

Algorytmy genetyczne dla problemu komiwojażera (ang. traveling salesperson)

Programowanie dynamiczne cz. 2

Drzewa spinające MST dla grafów ważonych Maksymalne drzewo spinające Drzewo Steinera. Wykład 6. Drzewa cz. II

Algorytmy Równoległe i Rozproszone Część X - Algorytmy samostabilizujące.

AiSD zadanie trzecie

Algorytmy genetyczne w optymalizacji

Działanie algorytmu oparte jest na minimalizacji funkcji celu jako suma funkcji kosztu ( ) oraz funkcji heurystycznej ( ).

1 Wprowadzenie do algorytmiki

Algorytmy genetyczne

Algorytm dyskretnego PSO z przeszukiwaniem lokalnym w problemie dynamicznej wersji TSP

Algorytmy sztucznej inteligencji

Matematyka dyskretna dla informatyków

Maszyna Turinga języki

Algorytmy stochastyczne, wykład 01 Podstawowy algorytm genetyczny

Algorytmy mrówkowe. P. Oleksyk. Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie Inteligentne systemy informatyczne

Algorytmy ewolucyjne 1

Minimalne drzewa rozpinające

Systemy mrówkowe. Opracowali: Dawid Strucker, Konrad Baranowski

ALGORYTMY GENETYCZNE (wykład + ćwiczenia)

Systemy uczące się Lab 4

Heurystyki. Strategie poszukiwań

Strefa pokrycia radiowego wokół stacji bazowych. Zasięg stacji bazowych Zazębianie się komórek

Programowanie celowe #1

Problem komiwojażera ACO. Zagadnienie optymalizacyjne, polegające na znalezieniu minimalnego cyklu Hamiltona w pełnym grafie ważonym.

Matematyka dyskretna

Zofia Kruczkiewicz, Algorytmu i struktury danych, Wykład 14, 1

Zaawansowane algorytmy i struktury danych

Przykłady grafów. Graf prosty, to graf bez pętli i bez krawędzi wielokrotnych.

Algorytmy mrówkowe. H. Bednarz. Wydział Informatyki Zachodniopomorski Uniwersytet Technologiczny w Szczecinie Inteligentne systemy informatyczne

Klasyczne zagadnienie przydziału

LABORATORIUM 4: Algorytmy ewolucyjne cz. 2 wpływ operatorów krzyżowania i mutacji na skuteczność poszukiwań AE

Ćwiczenie 1 Planowanie trasy robota mobilnego w siatce kwadratów pól - Algorytm A

Algorytmiczna teoria grafów

Metody Programowania

Heurystyczne metody przeszukiwania

Algorytmy genetyczne w interpolacji wielomianowej

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami

Metoda tabel semantycznych. Dedukcja drogi Watsonie, dedukcja... Definicja logicznej konsekwencji. Logika obliczeniowa.

Algorytm. Krótka historia algorytmów

Algorytmy genetyczne

Programowanie dynamiczne i algorytmy zachłanne

Dobór parametrów algorytmu ewolucyjnego

Zadania laboratoryjne i projektowe - wersja β

Suma dwóch grafów. Zespolenie dwóch grafów

TEORIA GRAFÓW I SIECI

Techniki optymalizacji

Techniki optymalizacji

Tomasz M. Gwizdałła 2012/13

OPTYMALIZACJA HARMONOGRAMOWANIA MONTAŻU SAMOCHODÓW Z ZASTOSOWANIEM PROGRAMOWANIA W LOGICE Z OGRANICZENIAMI

Transkrypt:

UNIWERSYTET JAGIELLOŃSKI W KRAKOWIE Praca magisterska Zastosowanie metod inteligencji obliczeniowej do rozwiązania problemu komiwojażera Łukasz Piętoń Pracę wykonano w Zakładzie Technologii Informatycznych pod kierunkiem Dr Katarzyny Grzesiak-Kopeć Wydział Fizyki, Astronomii i Informatyki Stosowanej Kraków 2011

Wydział Fizyki, Astronomii i Informatyki Stosowanej Uniwersytet Jagielloński Oświadczenie Ja niżej podpisany Łukasz Piętoń (nr indeksu: 1059900) student Wydziału Fizyki, Astronomii i Informatyki Stosowanej Uniwersytetu Jagiellońskiego kierunku informatyka, oświadczam, że przedłożona przeze mnie praca magisterska pt. Zastosowanie metod inteligencji obliczeniowej do rozwiązania problemu komiwojażera przedstawia wyniki badań wykonanych przeze mnie osobiście, pod kierunkiem dr Katarzyny Grzesiak-Kopeć. Pracę napisałem samodzielnie. Oświadczam, że moja praca dyplomowa została opracowana zgodnie z Ustawą o prawie autorskim i prawach pokrewnych z dnia 4 lutego 1994 r. (Dziennik Ustaw 1994 nr 24 poz. 83 wraz z późniejszymi zmianami). Jestem świadom, że niezgodność niniejszego oświadczenia z prawdą ujawniona w dowolnym czasie, niezależnie od skutków prawnych wynikających z ww. ustawy, może spowodować unieważnienie tytułu nabytego na podstawie tej pracy. Kraków, dnia.. podpis studenta

Spis treści WSTĘP... 5 Motywacja... 5 Cel pracy... 6 Organizacja pracy... 6 1. PROBLEM KOMIWOJAŻERA... 8 1.1 Historia... 8 1.2 Opis...10 1.3 Złożoność obliczeniowa...11 1.3.1 Klasa P, problemy rozstrzygalne w czasie wielomianowym... 13 1.3.2 Klasa NP, problemy weryfikowalne w czasie wielomianowym... 15 1.3.3 Klasa NPC... 16 1.4 Metody rozwiązywania TSP...19 1.4.1 Algorytmy dokładne... 19 1.4.2 Algorytmy heurystyczne... 20 1.4.2.1 Metody heurystyki konstruktywnej... 20 1.4.2.2 Metody heurystyki ulepszającej... 21 2. INTELIGENTNE METODY ROZWIĄZYWANIA TSP... 23 2.1 Algorytm genetyczny...23 2.2 Inteligencja rojowa...34 2.2.1 Kolonia mrówek... 34 2.2.2 Rój cząstek... 39 3. OPIS EKSPERYMENTÓW... 47 3.1 Algorytm genetyczny...48 3.2 Algorytm optymalizacji kolonią mrówek...52 [3]

3.3 Algorytmu optymalizacji rojem cząstek...56 3.4 Porównanie algorytmów...59 PODSUMOWANIE... 66 SPIS RYSUNKÓW... 67 SPIS TABEL... 68 BIBLIOGRAFIA... 69 OPIS ZAWARTOŚCI DOŁĄCZONEGO NOŚNIKA... 71 [4]

Wstęp Motywacja Problem komiwojażera towarzyszy człowiekowi od wieków. Choć został przypisany człowiekowi, którego głównym zadaniem było podróżowanie i kolejność odwiedzanych przez niego punktów podróży miała duży wpływ na całkowity czas jego pracy to w pewnym niewielkim stopniu z problemem komiwojażera do czynienia w codziennym życiu ma każdy z nas. Odwiedzając sklepy, urzędy, centra handlowe czy hipermarkety, każdy stara się zminimalizować czas potrzebny na zmianę lokalizacji odpowiednio planując kolejność załatwiania codziennych spraw. Jest to przykład problemu komiwojażera składający się z kilku może kilkunastu punktów, gdzie już przy odpowiednim rozwiązaniu możemy dostrzec korzyści. Nietrudno sobie wyobrazić jakie ma to znaczenie w przypadku problemu składającego się z kilkuset, kilku tysięcy czy nawet kilku milionów punktów. W czasach szybkiego rozwoju cywilizacyjnego, gdzie ciągle szuka się szybszych, lepszych oraz tańszych rozwiązań, problem komiwojażera ze względu na optymalizacyjny charakter ma szerokie zastosowanie w praktyce. Choć przede wszystkim jest wykorzystywany w dziedzinie logistyki transportu oraz dystrybucji, która jest podstawą funkcjonowania dzisiejszej gospodarki to jego zastosowania są znacznie szersze. Wykorzystywany jest w elektronice w celu optymalnego rozmieszczenia obwodów elektrycznych. W przemyśle podczas organizacji linii produkcyjnych zapewniających jak najniższą rotację elementu produkcyjnego przez obrabiające go maszyny, czy też w sterowaniu ruchem robotów odpowiedzialnych m.in. za nawiercanie otworów, spawanie, cięcie oraz inną obróbkę materiałów. Problem komiwojażera jest wykorzystywany również w informatyce do optymalizacji tras routingu w sieciach komputerowych oraz systemach telekomunikacyjnych. Swoje zastosowanie znalazł, także we współczesnej medycynie np. w analizach mikromacierzy DNA. Z pozoru łatwy problem, okazuje się być w praktyce niemożliwy do rozwiązania przez tradycyjne algorytmy nawet przy użyciu dzisiejszych bardzo szybkich komputerów. Dlatego [5]

jest bardzo dobrym przykładem problemu, który można rozwiązać wykorzystując metody inteligencji obliczeniowej, stosowane wszędzie tam gdzie nie są znane lub nie istnieją efektywne metody rozwiązywania problemów. Inteligencja obliczeniowa jest dziedziną szybko rozwijającą się. Pomimo krótkiej historii zawiera wiele opracowanych metod i ciągle jest tematem wielu badań naukowych. Metody sztucznej inteligencji są inspirowane inteligencją dostrzeganą w naturze, dlatego powstałe w ich wyniku algorytmy są niezwykle fascynujące, ponieważ dają rzeczy martwej, jaką jest komputer zdolność do nieprzewidywalnych zachowań. Ponadto w wielu zastosowaniach charakteryzują się wysoką skutecznością oraz efektywnością obliczeń komputerowych. Cel pracy Inteligencja obliczeniowa zawiera zbiór wielu opracowanych metod. Dlatego celem niniejszej pracy będzie weryfikacja działania oraz możliwości wykorzystania tych metod do rozwiązania problemu komiwojażera. Realizacja tego celu będzie obejmowała: Zbadanie problemu komiwojażera. Opracowanie oraz wybór metod inteligencji obliczeniowej. Stworzenie oprogramowania pozwalającego na porównanie wybranych metod. Zbadanie możliwości oraz efektywności wybranych metod inteligencji obliczeniowych. Organizacja pracy W rozdziale pierwszym sformułowano problem komiwojażera oraz przedstawiono jego historię. Dokonano przeglądu klas złożoności obliczeniowej i opisano znane sposoby rozwiązania tego problemu. Rozdział drugi zawiera szczegółowy opis teoretyczny wybranych metod inteligencji obliczeniowej. Do każdej metody opisano budowę stworzonego algorytmu rozwiązującego problem komiwojażera. [6]

Rozdział trzeci obejmuje opis przeprowadzonych eksperymentów, które dotyczyły: porównania efektywności proponowanych algorytmów, wpływu poszczególnych parametrów na wyniki obliczeń oraz jakości otrzymanych wyników. Wszystkie eksperymenty zostały przeprowadzone w oparciu o stworzoną aplikację, w której zaimplementowano wybrane algorytmy. [7]

1. Problem komiwojażera 1.1 Historia Termin komiwojażer pochodzi z francuskiego zwrotu commis-voyageur (ang. sales representative), który oznaczał wędrownego sprzedawcę-domokrążcę, podróżującego po kraju. Dzisiaj komiwojażerem możemy nazwać typowego przedstawiciela handlowego, czyli agenta zajmującego się szeroko rozumianą sprzedażą związaną m.in. z pozyskiwaniem nowych klientów, zbieraniem zamówień, podpisywaniem umów itd. (1). Celem komiwojażera jest odwiedzenie pewnej określonej liczby miast. Problem stanowi taki wybór trasy, aby wyruszając z określonego miasta wrócić do niego odwiedzając po drodze wszystkie pozostałe miasta tylko jeden raz. Przy czym trasę podróży należy zaplanować w sposób gwarantujący możliwie jak najkrótszą drogę. Oczywiście określenie najkrótsza droga nie zawsze będzie rozumiane jako odległość w kilometrach. Może to być również czas trwania podróży, albo koszt jaki wynika z wyboru danej trasy, na który może się składać np. wartość potrzebnego paliwa lub cena biletu. Powyższy problem określany skrótem TSP (ang. TSP - Travelling Salesman Problem) stał się jednym z najintensywniej badanych problemów optymalizacyjnych na świecie. Już w roku 1800 możemy znaleźć informację na temat badań problemów matematycznych związanych z problemem komiwojażera. Byli to dwaj matematycy: Sir William Rowan Hamilton oraz Thomas Penyngton Kirkman. Natomiast ogólne badania nad TSP zostały zapoczątkowane w 1930 roku przez Karla Mengera w Wiedniu oraz Uniwersytecie Harvard. Problem następnie był badany przez różnych statystyków: Mahalanobis (1940), Jessen (1942), Gosh (1948), Marks (1948), którzy opracowywali problem w połączeniu z aplikacjami agrokulturalnymi (2). Sposób rozwiązania problemu, który polegał na analizie trasy punkt po punkcie stał się niemożliwy w realizacji ze względu na ich bardzo dużą liczbę, natomiast brak innych pomysłów przez długi okres czasu spowodował, iż ostatecznie TSP zyskał miano trudnego problemu optymalizacji kombinatorycznej. Ze względu na złożoność obliczeniową, formalnie problem należy do klasy problemów NP-zupełnych, co dokładniej zostało opisane w Rozdziale 1.3.3. [8]

Pierwsze rozwiązania problemu zaczęły pojawiać się w połowie lat 50-tych (2), a zapoczątkowała je wcześniejsza publikacja Julii Robinson z 1949 roku On the Hamiltonian Game (A Traveling Salesman Problem), która poruszyła znany problem cyklu hamiltonowskiego i opisała rozwiązanie problemu, który był podobny do TSP. Przełom nastąpił w roku 1954, gdy George Dantzig, Ray Fulkerson, i Selmer Johnson opublikowali, opis metody rozwiązania TSP pt. Solution of a large-scale traveling-salesman problem, gdzie przedstawili możliwości tej metody rozwiązując przykład z 49 miastami. Wybrano do tego celu Waszyngton oraz 48 innych miast, po jednym z każdego z ówczesnych stanów w USA. Obliczenia dotyczyły 42 punktów, ponieważ pozostałe 7 miast znajdowało się na optymalnej drodze pomiędzy tymi punktami. Jednak ostatecznie uznano optymalny wyniki dla 49 miast. Znacznie lepszy wynik otrzymał M. Grötschel w 1977 roku, który przedstawił optymalne rozwiązanie dla 120 miast, należących wtedy do RFN, wykorzystując metodę płaszczyzn tnących (ang. cutting-plane) (2). W następnych latach pojawiło się wiele wyników, które dotyczyły rozwiązań optymalnych, z upływem czasu dla coraz większej liczby miast. Dokładne wyniki na przestrzenni lat prezentuje Tabela 1-1. Rok Autorzy Liczba miast 1954 G. Dantzig, R. Fulkerson, and S. Johnson 49 1971 M. Held and R.M. Karp 64 1975 P.M. Camerini, L. Fratta, and F. Maffioli 67 1977 M. Grötschel 120 1980 H. Crowder and M.W. Padberg 318 1987 M. Padberg and G. Rinaldi 532 1987 M. Grötschel and O. Holland 666 1987 M. Padberg and G. Rinaldi 2,392 1994 D. Applegate, R. Bixby, V. Chvátal, and W. Cook 7,397 1998 D. Applegate, R. Bixby, V. Chvátal, and W. Cook 13,509 2001 D. Applegate, R. Bixby, V. Chvátal, and W. Cook 15,112 2004 D. Applegate, R. Bixby, V. Chvátal, W. Cook, and K. Helsgaun 24,978 Tabela 1-1 Historia rozwoju TSP na podstawie (2). Imponujący wynik otrzymano w maju 2004 roku, kiedy David Applegate et al. znaleźli optymalną trasę dla 24 978 miast Szwecji (3). Stwierdzono, że cała trasa liczy łącznie około [9]

72500km i udowodniono, że krótsza trasa nie istnieje. Większość obliczeń została wykonana na klastrze złożonym z 96 dwurdzeniowych procesorów Intel Xeon 2,8 GHz. Do obliczeń użyto kodu Concorde TSP, rozwiązującego problem za pomocą programowania liniowego metodą simplexu w wersji 6.5 CPLEX. Z uwagi na to, że do obliczeń wykorzystano klaster, który w tym samym czasie był używany również do przeprowadzenia innych obliczeń, trudno jest podać rzeczywisty czas jaki zajęły obliczenia. Natomiast w przeliczeniu na jeden procesor, z jakich składa się klaster, całkowity czas wszystkich obliczeń wynosiłby 91,9 lat (3). 1.2 Opis Problem komiwojażera ma ścisły związek z cyklem Hamiltona. Otóż rozwiązanie TSP w najprostszej postaci sprowadza się do znalezienia minimalnego cyklu Hamiltona w nieskierowanym, pełnym grafie ważonym, gdzie miasta są reprezentowane przez wierzchołki. Każdy z wierzchołków tego grafu musi być połączony z pozostałymi krawędzią, której długość odpowiada odległości między miastami. Rozwiązaniem będzie więc taki cykl w grafie, w którym każdy z wierzchołków oprócz pierwszego (powrót do miejsca startu) będzie przechodzony tylko jeden raz w taki sposób, aby suma krawędzi w ścieżce była minimalna. Przedstawiony powyżej opis dotyczy symetrycznego TSP oznaczanego czasami skrótem STSP (ang. symmetric TSP), czyli takiego problemu komiwojażera, gdzie na odległość między dwoma miastami nie ma wpływu kierunek, tzn. odległość z miasta A do miasta B jest taka sama, jak z miasta B do miasta A. Jeśli natomiast odległości między miastami w zależności od kierunku są różne lub nie istnieje droga w dwóch kierunkach, wtedy mamy do czynienia z asymetrycznym problemem komiwojażera, (ang. asymmetric TSP, ATSP) wówczas wykorzystuje się graf skierowany. Kluczową rolę w TSP odgrywa odległość. Ze względu na sposób obliczenia tego parametru problem komiwojażera dzieli się na metryczny i niemetryczny. O metrycznym pomiarze odległości mówimy, jeżeli długości krawędzi spełniają nierówność trójkąta. Oznacza to, że odległość wynikająca z bezpośredniego połączenia dwóch wierzchołków zawsze będzie mniejsza lub równa odległości między tymi wierzchołkami uwzględniającej na swej drodze dodatkowy wierzchołek:, gdzie,, to punkty, to odległość między punktami i. [10]

Powyższy przypadek odpowiada np. sytuacji, gdy przyjmiemy, że wszystkie miasta leżą na płaszczyźnie. Obliczamy między nimi odległość euklidesową przyjmując, że komiwojażer porusza się za pomocą samochodu, jadąc dokładnie w linii prostej między kolejnymi punktami. Jeśli przedstawiona wyżej nierówność trójkąta nie jest spełniona wtedy mówimy o niemetrycznym problemie komiwojażera. Z takim problemem mamy do czynienia jeśli np. komiwojażer decyduje się na podróż samolotem, ponieważ czas podróży jest krótszy pomimo większej odległości między miastami. Poza metryką euklidesową stosuje się jeszcze m.in. metrykę Manhattan lub metrykę maksimum. W metryce Manhattan odległość między dwoma punktami jest równa sumie wartości bezwzględnych różnic ich współrzędnych. Z kolei w metryce maksimum odległość między dwoma punktami jest równa maksymalnej wartości bezwzględnej różnic współrzędnych (porównanie przedstawia Rysunek 1-1). Kolor żółty: metryka euklidesowa = Kolor czerwony: metryka Manhattan = 5 Kolor zielony: metryka maksimum = 3 Rysunek 1-1 Porównanie metryk odległości Metryki Manhattan oraz maksimum są wykorzystywane głównie w przemyśle. Np. w sytuacji jeśli ramię maszyny poruszające się w dwóch wymiarach odpowiedzialne jest za nawiercanie otworów, to w momencie, gdy konstrukcja maszyny pozwala na zmianę położenia jednocześnie tylko według jednej osi współrzędnych x albo y, wtedy korzystne będzie zastosowanie metryki Manhattan. Natomiast w przypadku, gdy urządzenie może zmieniać położenie jednocześnie w dwóch osiach x oraz y, wówczas całkowity czas potrzebny na zmianę położenia jest równy wolniejszemu z dwóch ruchów i w takiej sytuacji wykorzystuje się metrykę maksimum. 1.3 Złożoność obliczeniowa Złożoność obliczeniowa jest często definiowana za pomocą problemów decyzyjnych, z wykorzystaniem aparatu języków formalnych i tak też postanowiliśmy przyjąć w tej pracy, opierając całą tą sekcję na literaturze (4). Przed przystąpieniem do opisu klas złożoności [11]

konieczne jest przywołanie kilku definicji, które zawiera Tabela 1-2 Definicje i oznaczenia z teorii języków formalnych na podstawie.tabela 1-2. Alfabet Język nad DEFINICJE I OZNACZENIA skończony, niepusty zbiór symboli dowolny zbiór napisów (słów) złożonych z symboli alfabetu słowo puste język pusty język złożony z wszystkich słów nad alfabetem język nad alfabetem dopełnienie języka : konkatenacja dwóch języków i domknięcie (gwiazdka Kleene ego) języka, gdzie to język otrzymany przez -krotną konkatenację ze sobą Tabela 1-2 Definicje i oznaczenia z teorii języków formalnych na podstawie (4). Przykłady: 1) Jeśli 0, 1 to zbiór 10, 11, 101, 111, 1011, 1101, 10001, jest językiem binarnych reprezentacji liczb pierwszych. 2) Jeśli 0, 1 to, 0, 1, 00, 01, 10, 11, 000, jest zbiorem wszystkich ciągów binarnych. Można teraz przedstawić problem decyzyjny na podstawie teorii języków formalnych. Zbiór egzemplarzy dowolnego problemu decyzyjnego to po prostu zbiór, gdzie 0, 1. Ponieważ problem jest w pełni określony przez te jego egzemplarze, dla których odpowiedzią jest 1 (tak), możemy traktować jako język nad 0, 1, gdzie x : Q x 1 Klasę złożoności nieformalnie można zdefiniować jako zbiór języków, do którego przynależność jest określana pewną miarą złożoności (jak np. czas działania) algorytmu rozstrzygającego, czy dane słowo należy do języka. [12]

1.3.1 Klasa P, problemy rozstrzygalne w czasie wielomianowym Problemy klasy P (ang. deterministic polynomial; deterministycznie wielomianowy) dotyczą rozwiązań, które można znaleźć w czasie wielomianowym czyli stosunkowo małym w porównaniu do czasu wykładniczego. Do zdefiniowania klasy P za pomocą terminologii języków formalnych konieczne jest wyrażenie związku między problemami decyzyjnymi, a rozwiązującymi je algorytmami. Mówimy, że Definicja 1-1 Algorytm akceptuje słowo 0, 1, jeśli dla danych wejściowych algorytm oblicza 1. Algorytm odrzuca słowo, jeśli 0. Stąd język akceptowany przez algorytm jest definiowany następująco: Definicja 1-2 Język akceptowany przez algorytm to zbiór 0, 1 : 1, czyli zbiór tych słów, które algorytm akceptuje. Należy zauważyć, że nawet jeśli język jest akceptowany przez algorytm, algorytm nie musi koniecznie odrzucać danego mu na wejściu słowa. Algorytm może się na przykład zapętlić. Dlatego odróżniamy język akceptowany (Definicja 1-2) od języka rozstrzyganego (Definicja 1-3). Definicja 1-3 Język jest rozstrzygany przez algorytm, jeśli każdy ciąg binarny jest albo akceptowany, albo odrzucany przez. Definicja 1-4 Język jest rozstrzygalny w czasie wielomianowym za pomocą algorytmu, jeśli istnieje stała taka, że dla dowolnego słowa 0, 1 długości algorytm rozstrzyga przynależność do w czasie. [13]

Korzystając z przedstawionej terminologii języków formalnych, zapis definicji klasy złożoności obliczeniowej P ma postać: Definicja 1-5 0, 1 : istnieje algorytm rozstrzygający o w czasie wielomianowym. Postawienie granicy między wielomianami a funkcjami wykładniczymi jest istotne z kilku powodów (5). Przede wszystkim znacząca różnica w tempie wzrostu typowych funkcji wielomianowych, jak i typowych funkcji wykładniczych, jak 2. Rozważmy n 1000, co jest sensownym rozmiarem słowa wejściowego dla algorytmu. W takim przypadku wartość wynosi miliard, co jest wartością dużą, ale można sobie z nią dać radę. Natomiast 2 jest w tym przypadku liczbą znacznie przekraczającą liczbę atomów we wszechświecie. Algorytmy wielomianowe są więc zazwyczaj wystarczająco szybkie, a algorytmy wykładnicze rzadko kiedy są użyteczne. Powstają najczęściej wówczas, gdy przeszukujemy całą przestrzeń możliwych rozwiązań, co często jest nazywane przeszukiwaniem siłowym. Na przykład, jednym ze sposobów rozłożenia liczby na czynniki pierwsze jest sprawdzenie wszystkich dzielników. Rozmiar przeszukiwania przestrzeni jest wykładniczy, więc przeszukiwanie także zajmuje czas wykładniczy. Czasami wniknąwszy głębiej w problem, można uniknąć przeszukiwania siłowego, co może doprowadzić do odkrycia przydatnego algorytmu wielomianowego. Klasa P jest związana z praktycznymi zastosowaniami. Problemy, które należą do klasy P, mogą być rozwiązane za pomocą metody działającej w czasie, dla pewnej stałej k. Czy jest to czas do zaakceptowania w praktyce, zależy od wartości k i od zastosowania. Oczywiście mało prawdopodobne, by metoda działająca w czasie miała zastosowanie praktyczne. Jednak nazwanie czasu wielomianowego granicą, na której kończy się praktyczna rozwiązywalność problemu ma sens, gdy dla problemu, który jak się dotychczas wydawało wymagał czasu wykładniczego, znajduje się algorytm wielomianowy. Wówczas pojawia się istotnie inny sposób rozumienia tego problemu, za którym często podążają kolejne redukcje złożoności, co w rezultacie może prowadzić do powstania algorytmu przydatnego w praktyce. [14]

1.3.2 Klasa NP, problemy weryfikowalne w czasie wielomianowym Kolejną klasą definiującą złożoność obliczeniową jest NP (ang. nondeterministic polynomial; niedeterministycznie wielomianowy) czyli klasa języków, które można weryfikować za pomocą algorytmu wielomianowego. Do zapisu formalnej definicji klasy NP, konieczne jest zdefiniowanie algorytmu weryfikacji. Definicja 1-6 Algorytm weryfikacji definiujemy jako algorytm o dwóch parametrach, z których jeden jest zwykłym wejściowym ciągiem, a drugi to ciąg binarny, zwany świadectwem. Dwuparametrowy algorytm weryfikuje ciąg wejściowy, jeśli istnieje świadectwo takie, że, 1. Definicja 1-7 Język weryfikowalny przez algorytm to 0, 1 : istnieje 0, 1 takie, że, 1 Algorytm weryfikuje język, jeśli dla każdego słowa istnieje świadectwo, którego może użyć w celu wykazania, że. Co więcej dla żadnego słowa nie może istnieć świadectwo tego, że. Odwołując się do powyższego algorytmu weryfikacji, formalna definicja klasy NP ma postać: Definicja 1-8 Język należy do klasy NP wtedy i tylko wtedy, gdy istnieją dwuparametrowy wielomianowy algorytm i stała takie, że 0, 1 : istnieje takie świadectwo, gdzie, że, 1 Mówimy wtedy, że algorytm weryfikuje język w czasie wielomianowym. Nie wiadomo, czy, ale większość badaczy uważa, że i nie są tą samą klasą. Podstawowa różnica między klasą P, a NP polega na tym, iż w przypadku klasy P znalezienie rozwiązania musi mieć złożoność wielomianową, natomiast w klasie NP sprawdzenie konkretnego rozwiązania ma mieć złożoność wielomianową. Jak wiadomo, [15]

często trudniej jest rozwiązać problem od początku, niż sprawdzić jasno przedstawione rozwiązanie, zwłaszcza przy narzuconych ograniczeniach czasowych. Większość informatyków sądzi, że analogia ta rozciąga się na klasy i, a więc że zawiera języki nie należące do. Bardziej przekonującym argumentem za tym, że jest istnienie klasy NP zupełnej opisanej w kolejnym podrozdziale. 1.3.3 Klasa NPC Jeśli przyjmiemy za obliczenia szybkie, te które są rozwiązywane w czasie wielomianowym to można podsumować(5): P = klasa języków, dla których przynależność może być szybko rozstrzygnięta. NP = klasa języków, dla których przynależność może być szybko zweryfikowana. Do zdefiniowania klasy NP zupełnej (ang. NP complete) zapisywanej również w skrócie NPC konieczne jest zdefiniowanie terminu redukowalności. Powracając do terminologii języków formalnych: Definicja 1-9 Język jest redukowalny w czasie wielomianowym do języka, co zapisujemy jako, jeśli istnieje obliczalna w czasie wielomianowym funkcja : 0,1 0,1, taka że dla każdego 0,1 wtedy i tylko wtedy, gdy. Funkcję nazywamy funkcją redukcji. [16]

Redukcje w czasie wielomianowym dają formalną metodę dowodzenia, że jeden problem jest przynajmniej tak samo trudny jak inny, z dokładnością do czynnika wielomianowego. Znaczy to, że jeśli, to jest nie więcej niż o wielomianowy czynnik trudniejszy od co tłumaczy użycie w oznaczeniu symbolu mniejsze bądź równe. Możemy teraz zdefiniować zbiór języków NP-zupełnych, czyli najtrudniejszych problemów w klasie NP z punktu widzenia wielomianowej rozwiązywalności: Definicja 1-10 Język 0, 1 jest NP zupełny, jeśli: 1) oraz 2) dla każdego. Pomocna w odpowiedzi na pytanie czy, postawione w poprzednim podrozdziale okazuje się być klasa NPC. Według twierdzenia: Twierdzenie 1-1 Jeśli jakikolwiek problem NP zupełny jest rozwiązywalny w czasie wielomianowym, to. Równoważnie, jeśli jakikolwiek problem w nie jest rozwiązywalny w czasie wielomianowym, to żaden problem NP zupełny nie jest rozwiązywalny w czasie wielomianowym. Powyższe twierdzenie stało się powodem, dla którego próby odpowiedzi na odwrotnie postawione z kolei pytanie do poprzedniego: czy, koncentrują się wokół problemów NP zupełnych. Być może, ktoś znajdzie algorytm wielomianowy dla jakiegoś problemu NP zupełnego, dowodząc w ten sposób, że. Ponieważ jednak dotychczas nie jest znany taki algorytm, większość informatyków sądzi, że, a układ zależności między klasami P, NP, i NPC jest kojarzony według schematu, który prezentuje Rysunek 1-2. NP P NPC Rysunek 1-2 Układ zależności między klasami P, NP i NPC postrzegany przez większość informatyków. [17]

Analizowany przez nas problem komiwojażera jest klasy NPC i można go łatwo transponować do cyklu Hamiltona. Modelując problem za pomocą grafu pełnego o wierzchołkach symbolizujących miasta, można powiedzieć, że komiwojażer chce znaleźć marszrutę, czyli cykl Hamiltona, odwiedzając każde miasto tylko raz i wracając do miasta, z którego wystartował. Formalnie, cykl Hamiltona w grafie nieskierowanym G = (V, E) to cykl prosty (przebiega przez wszystkie wierzchołki tylko raz z wyjątkiem pierwszego i ostatniego) przebiegający przez wszystkie wierzchołki zbioru V. Koszt podróży z miasta i do miasta j dla uproszczenia przykładu zostanie oznaczony jako liczba całkowita, którą zaznaczamy c(i, j), a komiwojażer chce przebyć marszrutę o minimalnym łącznym koszcie, na który składa się koszt poszczególnych krawędzi. Rysunek 1-3 przedstawia problem komiwojażera, dla którego optymalną marszrutą jest <u, w, v, x, u> o koszcie 7. u 1 4 v 3 2 1 Rysunek 1-3 Problem komiwojażera dla n=4. x 5 w Wracając do teorii języków formalnych, problem komiwojażera można sformułować w następujący sposób: = <,, >: =(, ) jest grafem pełnym, :,, w G istnieje marszruta komiwojażera o koszcie co najwyżej k}. Zgodnie z definicją problemów NPC (Definicja 1-10), dowód przynależności TSP do problemów klasy przeprowadza się w dwóch krokach. Najpierw wykazujemy, że TSP należy do NP. Dla danego egzemplarza jako świadectwa używamy ciągu n wierzchołków marszruty. Stosujemy algorytm weryfikacji, który polega na upewnieniu się, że ciąg zawiera każdy wierzchołek dokładnie raz, zsumowaniu krawędzi i sprawdzeniu, czy otrzymana suma nie przekracza k. Wszystkie te operacje możemy wykonać w czasie wielomianowym. [18]

W drugim kroku skorzystamy z tego, że HAMCYCLE (problem cyklu Hamiltona), jest problemem NP zupełnym, co udowodniono w (4). Aby dowieść, że problem TSP jest ostatecznie problemem NP zupełnym, wykażemy, że. Egzemplarzem problemu HAMCYCLE jest,, natomiast egzemplarz problemu TSP konstruujemy w następujący sposób. Tworzymy graf pełny,, gdzie, :,, i definiujemy następującą funkcję kosztu c : 0, ś (,, (, 1, ś (,. Należy zauważyć, że graf G jest nieskierowany czyli nie zawiera pętli więc,, 1 dla każdego wierzchołka. Egzemplarzem problemu jest wówczas trójka <G, c, 0>, którą możemy skonstruować w czasie wielomianowym. Graf G ma natomiast cykl Hamiltona wtedy i tylko wtedy, gdy graf G zawiera marszrutę o koszcie co najwyżej 0. Załóżmy, że graf G zawiera cykl Hamiltona h. Każda krawędź cyklu h należy do E, a zatem w Grafie G ma koszt 0. Cykl h jest więc marszrutą w G o koszcie 0. Dla dowodu odwrotnej implikacji: graf G zawiera marszrutę h o koszcie co najwyżej 0. Ponieważ koszty krawędzi z E są równe 0 lub 1, koszt marszruty h wynosi dokładnie 0, czyli każda krawędź z marszruty musi mieć koszt 0. Marszruta h zawiera zatem jedynie krawędzie z E. Wnioskujemy stąd, że h jest cyklem Hamiltona w grafie G. 1.4 Metody rozwiązywania TSP 1.4.1 Algorytmy dokładne Klasycznym rozwiązaniem jest próba porównania cykli Hamiltona dla wszystkich możliwych permutacji wierzchołków i wybrania w ten sposób optymalnego rozwiązania. W rzeczywistości jednak takie rozwiązanie nie jest praktyczne, bo w konsekwencji prowadzi do złożoności wykładniczej 0 n!. Przy zadaniu z 20 miastami staje się to z praktycznego punktu widzenia niewykonalne przy możliwościach obliczeniowych dzisiejszych, nawet najszybszych procesorów. Dodanie choćby jednego miasta zwiększa w tym wypadku czas obliczeń 21 razy. Dzięki zastosowaniu programowania dynamicznego poprawiono ten wynik uzyskując złożoność obliczeniową: 2. Metoda polega na zapamiętywaniu wyników dla [19]

ograniczonej grupy miast. Rozwiązanie rozpoczyna się od pustej grupy, do której dodawane są kolejne miasta i w ten sposób oblicza się najlepszy wynik dla danej grupy. 1.4.2 Algorytmy heurystyczne Metody heurystyczne nie gwarantują rozwiązania optymalnego, natomiast charakteryzują się bardzo dużą szybkością, dzięki czemu są z powodzeniem stosowane w rozwiązywaniu TSP. Do scharakteryzowania ich możliwości oraz sposobu działania wykorzystano informacje zawarte w (6). Nowoczesne metody potrafią znaleźć rozwiązanie dla ogromnych problemów z milionową liczbą miast w rozsądnym czasie, odbiegające zaledwie 2-3% od optymalnego rozwiązania. Natomiast jest to dział dosyć obszerny, który możemy podzielić na heurystykę konstruktywną, gdzie rozwiązanie jest sukcesywnie budowane z otrzymanych fragmentów, które nie są modyfikowane przez algorytm oraz heurystykę ulepszającą, w której znajdują się metody ulepszające już istniejące rozwiązanie. 1.4.2.1 Metody heurystyki konstruktywnej Najbliższy sąsiad (ang. nearest neighbour, NN) Algorytm NN w kolejnym ruchu wybiera najbliższe nieodwiedzone miasto i dołącza je do marszruty komiwojażera. Daje szybkie rozwiązanie, natomiast minusem tego algorytmu jest m.in. fakt, iż nie uwzględnia on odległości między pierwszym i ostatnim miastem. W przypadku losowo wybranych miast na płaszczyźnie, takie podejście daje średnio o 25% dłuższą drogę od najkrótszej. Minimalne drzewo rozpinające (ang. minimum spanning tree, MST) Zasada działania algorytmu MST polega na skonstruowaniu minimalnego drzewa rozpinającego dla grafu miast, w którym wszystkie krawędzie są podwajane. W kolejnym kroku tworzy się cykl Eulera dla otrzymanego grafu (cykl zawierający wszystkie krawędzie grafu i przechodzący przez nie dokładnie jeden raz). Ostatnim krokiem jest przekształcenie cyklu Eulera w cykl Hamiltona. Rozwiązany w ten sposób problem komiwojażera daje rozwiązanie maksymalnie dwukrotnie dłuższe od optymalnego. [20]

Metoda Christofidesa Algorytm jest bardzo podobny do MST i również dotyczy skonstruowania minimalnego drzewa rozpinającego. Natomiast zamiast dublowania krawędzi dołączane są krawędzie stanowiące minimalny koszt (odległość) pomiędzy wierzchołkami drzewa posiadającymi nieparzysty stopień. Następnie, tak jak w poprzedniej metodzie, następuje utworzenie cyklu Eulera i przekształcenie go w końcowym etapie w cykl Hamiltona. Dla metrycznego TSP metoda pozwala na uzyskanie w najgorszym przypadku o 50% dłuższej drogi od optymalnej. 1.4.2.2 Metody heurystyki ulepszającej Wymiana parami Metoda polega na usuwaniu w kolejnych iteracjach dwóch krawędzi i zastępowaniu ich dwiema innymi krawędziami w taki sposób, aby nowy fragment powstały w wyniku tej operacji dawał w rezultacie krótszą drogę. Jest to szczególny przypadek metody k opt (2- opt). k-opt Zasada działania algorytmu jest podobna do wymiany parami. Różnica polega na możliwości doboru parametru k, czyli liczby krawędzi, które są zastępowane. Najczęściej stosowana konfiguracja to 3-opt. V-opt Jest to odmiana metody k-opt, jednak w tym wypadku parametr k, nie jest sztywno ustalany, lecz zmienia się w czasie działania algorytmu. Najbardziej znana z tej rodziny jest metoda Lin-Kernighana, w której przy każdej iteracji algorytm określa ile krawędzi powinno być zamienionych, w celu znalezienia krótszej trasy. Obliczenia ewolucyjne Polegają na przeszukiwaniu alternatywnych rozwiązań naśladując procesy naturalnej ewolucji jak dziedziczenie, mutacja, krzyżowanie, selekcja. Prowadzą do otrzymywania coraz [21]

lepiej przystosowanych osobników, co w tym wypadku oznacza znalezienie coraz krótszej trasy. Dokładniej algorytmy genetyczne zostały opisane w Rozdziale 2.1. Symulowane wyżarzanie Sposób działania algorytmu nawiązuje do procesu wyżarzania w metalurgii, który w uproszczeniu polega na kontrolowanych zmianach temperatury materiału prowadzących do ograniczenia wad w materiale. Poprzez analogię do tego procesu fizycznego, w każdej iteracji algorytmu następuje próba poprawy rozwiązania przez zmniejszanie temperatury układu za pomocą parametru T. Przeszukiwanie Tabu (ang. tabu serach TS) Metoda rozpoczyna operację bazując na wstępnym rozwiązaniu. Mając daną trasę optymalizacja w uproszczeniu sprowadza się do wielokrotnego procesu zamiany kolejności dwóch miast z wykorzystaniem tablicy tabu, która przechowuje zabronione fragmenty trasy. Dzięki tablicy tabu realizowana jest zasada zakazu powrotu do miejsc ostatnio odwiedzonych. Drugą zasadą metody TS jest dopuszczenie wyboru najlepszego spośród niezakazanych ruchów nawet jeżeli prowadzi do gorszego rozwiązania. Dzięki temu metoda ta unika lokalnych optimów. Inteligencja rojowa (ang. swarm intelligence SI) Algorytmy typu SI bazują na samoorganizujących się systemach naturalnych mających miejsce w przyrodzie. System zazwyczaj składa się z populacji agentów, którzy współpracują lokalnie ze sobą i swoim otoczeniem. Agenci nie mają narzuconych zasad, jak powinni się zachowywać i do pewnego stopnia ich zachowania są zupełnie przypadkowe. Jednak interakcja między wszystkimi czynnikami w tej strukturze prowadzi do inteligentnych zachowań globalnych. Naturalne przykłady inteligencji rojowej obejmują różne zachowania: kolonie mrówek, stado ptaków, zwierząt, rozwój bakterii, oraz zjawiska: kształtowania dynamiki rzek, grawitacji, kropli wody, roju cząstek. Dokładniej metoda została opisana w Rozdziale 2.2. [22]

2. Inteligentne metody rozwiązywania TSP Inteligencja obliczeniowa (ang. computational intelligence, CI) jest działem, który bardzo intensywnie rozwinął się w ostatnich latach. Metody CI są najczęściej stosowane tam, gdzie tradycyjne metody są nieskuteczne lub nawet niewykonalne. Powstały w wyniku inspiracji światem naturalnym: sieci neuronowe powstały w wyniku zainteresowania funkcjonowaniem układu nerwowego, algorytmy genetyczne inspirowane były teorią ewolucji i genetyką, a z kolei algorytmy rojowe powstały w wyniku obserwacji etologicznych. W analogiczny sposób powstawały kolejne metody m.in. z teorii logicznych, logiki rozmytej itd. Problem komiwojażera okazuje się być tematem, gdzie z powodzeniem można stosować inteligentne metody obliczeniowe. Większość metod należących do CI została wymieniona w Rozdziale 1.4 w grupie metod heurystycznych. Opis działania i sposób funkcjonowania algorytmów kilku z tych metod znajduje się w kolejnych podrozdziałach. Po scharakteryzowaniu metod, na końcu każdego podrozdziału zamieszczono wyznaczoną złożoność obliczeniową proponowanego algorytmu, która została obliczona przyjmując przypadek pesymistyczny każdej rozważanej procedury. 2.1 Algorytm genetyczny Obliczenia ewolucyjne to klasa obliczeń inspirowanych teorią doboru naturalnego i dziedziczenia. Należą do nich algorytmy genetyczne, programowanie genetyczne, strategie ewolucyjne, programowanie ewolucyjne i inne. Algorytmy genetyczne (ang. genetic algorithm, GA) zostały zapoczątkowane przez Johna Hollanda, w wyniku jego prac w późnych latach sześćdziesiątych i wczesnych siedemdziesiątych (7). Do opisu GA wykorzystuje się terminy zapożyczone z genetyki naturalnej. Algorytm bazuje na populacji, która składa się ze zbioru osobników reprezentujących rozwiązanie. Dowolny osobnik zbudowany jest z zespołu chromosomów, z których każdy jest uporządkowanym zbiorem genów (genom). Gen natomiast jest najmniejszą jednostką informacji genetycznej i reprezentuje pojedynczą cechę osobnika. Wartości genu są nazywane allelami i w przypadku, gdy gen jest wartością binarną, to jego allelami są wartości: 0 lub 1. Potencjalne rozwiązanie zadania, reprezentuje genotyp czyli zespół chromosomów opisujących osobnika. Poza genotypem każdy osobnik jest [23]

charakteryzowany przez fenotyp, który stanowią rzeczywiste cechy określające jego stopień przystosowania na tle innych osobników w danej przestrzeni rozwiązań. Podsumowując, w populacji mogą znajdować się osobniki o różnych genotypach i tym samym fenotypie natomiast osobniki o tych samych genotypach nie mogą posiadać różnych fenotypów. Podstawowy model algorytmu genetycznego ma postać (Rysunek 2-1): START UTWORZENIE POPULACJI POCZĄTKOWEJ OCENA OSOBNIKÓW STOP? STOP ZASTOSOWANIE OPERATORÓW GENETYCZNYCH SELEKCJA RODZICÓW Rysunek 2-1 Podstawowy algorytm genetyczny (schemat blokowy) Zgodnie z powyższym schematem algorytm dokonuje różnych operacji na osobnikach. Selekcja powoduje na ogół wybór najlepiej przystosowanych osobników do tzw. populacji rodzicielskiej. Rodzicem jest nazywany osobnik, który w parze z drugim rodzicem bierze udział w procesie krzyżowania. Proces ten prowadzi do powstania nowych osobników nazywanych potomkami w wyniku wymiany fragmentów chromosomów rodziców. Poza krzyżowaniem, stosuje się również drugi operator genetyczny nazywany mutacją. Jest to proces polegający na zmianie pojedynczego genu w chromosomie. Dla genów o wartościach binarnych proces sprowadza się do zamiany alleli z wartością 0 na 1 i odwrotnie. Ocena osobników jest przeprowadzana w oparciu o funkcję przystosowania, która polega na ocenie osobnika według jego fenotypu (forma niezakodowana). Służy ona do tego, aby wyłonić [24]

najlepszego osobnika dla populacji końcowej, a jeśli populacja nie jest końcowa, zostaje użyta do procesu selekcji rodziców. Przed implementacją algorytmu genetycznego należy wybrać odpowiedni sposób reprezentacji pojedynczego osobnika. W rozważanym algorytmie osobnik jest reprezentowany przez pojedynczy chromosom. W podstawowym modelu zaproponowanym przez Hollanda jest stosowana reprezentacja binarna. Jeśli każdy osobnik populacji reprezentowałby liczbę całkowitą z przedziału: 0, 255, wówczas chromosom przechowywałby zakodowaną wartość w postaci ciągu binarnego składającego się z 8 bitów. Populacja składająca się z 5 osobników mogłaby mieć więc postać: chromosom fenotyp wartość funkcji przystosowania 0 1 1 1 1 1 1 0 126 120 1 1 1 1 0 1 0 0 244 160 0 1 0 0 1 1 1 0 78 70 0 0 1 0 0 0 0 1 33 200 0 0 0 0 1 1 0 0 12 30 W klasycznym GA stosowana jest selekcja metodą proporcjonalną, koła ruletki. Selekcja prowadzi do wyboru osobników, którym na kole (koło ruletki) przydzielane są sektory proporcjonalne do obliczonych za pomocą funkcji przystosowania wartości. Licząc wkład każdego osobnika w sumę wartości przystosowania wszystkich osobników populacji (Rysunek 2-2). [25]

200 34% 30 5% 120 21% osobnik 1 osobnik 2 osobnik 3 70 12% 160 28% osobnik 4 osobnik 5 Rysunek 2-2 Selekcja metodą koła ruletki dla populacji liczącej pięciu osobników. Większa wartość przystosowania powoduje częstszy wybór do populacji rodzicielskiej, np. osobnik 4 o wartości przystosowania 200 posiada prawdopodobieństwo 34% wylosowania jako potencjalnego rodzica (Rysunek 2-2). Dzięki tej metodzie lepiej przystosowane osobniki mogą być wybierane wielokrotnie powodując eliminację słabszych. Główną metodą reprodukcji w podstawowym algorytmie genetycznym jest krzyżowanie. Mając dwóch rodziców wyłonionych w wyniku procesu selekcji tworzy się dwóch potomków. W tym celu wybierany jest losowo punkt krzyżowania dzielący łańcuch binarny chromosomów rodziców na dwie części, które są następnie wymieniane. Dla losowo wybranego punktu o wartości proces ten wygląda następująco: 0 1 0 0 1 1 1 0 0 1 1 0 0 0 0 1 0 0 1 0 0 0 0 1 0 0 0 0 Rysunek 2-3 Krzyżowanie w podstawowym algorytmie genetycznym. 1 1 1 0 Drugim operatorem genetycznym jest mutacja. Jej najprostszy przypadek jest procesem, który powoduje zmianę wartości losowo wybranego genu w chromosomie, czyli negację bitu jaki reprezentuje. Mutacja zachodzi bardzo rzadko, jej prawdopodobieństwo jest zwykle dużo mniejsze niż krzyżowania. Celem tej operacji jest wprowadzenie różnorodności w populacji. Dla wybranego w sposób losowy genu o numerze 3, mutacja chromosomu będzie przebiegać następująco: 0 1 0 0 1 1 1 0 0 1 1 0 Rysunek 2-4 Mutacja w podstawowym algorytmie genetycznym. 1 1 1 0 [26]

W problemie komiwojażera chromosom reprezentuje konkretną trasę podróży czyli kolejność odwiedzanych miast. Od rodzaju reprezentacji zależy później sposób zastosowania operatorów krzyżowania oraz mutacji. Podstawowy algorytm genetyczny zaproponowany przez Hollanda z praktycznego punktu widzenia nie nadaje się do zastosowania w TSP jak zauważono w (8). Problemem jest zakodowanie trasy jako łańcucha binarnego, w którym nie ma zależności od ustawienia lub w którym można w rozsądny sposób używać operatorów. Proste krzyżowanie łańcuchów powoduje podwójne wystąpienia miast lub ich brak. Dlatego do rozwiązania problemu komiwojażera zastosowano odmianę podstawowego algorytmu genetycznego powołując się na (9). Dla TSP można wymienić kilka sposobów reprezentacji: a) Reprezentacja przyległościowa. Polega na reprezentowaniu trasy jako ciągu miast. Miasto znajduje się na pozycji wtedy i tylko wtedy, jeżeli trasa wiedzie z miasta do miasta. Na przykład ciąg: przedstawia trasę: 2 4 8 3 9 7 1 5 6 1 2 4 3 8 5 9 6 7 Każda trasa ma tylko jedną reprezentację przyległościową, jednak pewne reprezentacje przyległościowe mogą przedstawiać trasy niedopuszczalne, na przykład: czemu odpowiada trasa: 2 4 8 1 9 3 5 7 6 1 2 4 1 Co jest trasą niekompletną. Ponadto w reprezentacji przyległościowej nie można użyć wprost klasycznego operatora krzyżowania bez użycia algorytmu naprawy. b) Reprezentacja porządkowa. W reprezentacji porządkowej trasa jest reprezentowana jako ciąg miast, przy czym -ty element jest liczbą z zakresu od 1 do 1. Idea reprezentacji porządkowej jest następująca. Mając uporządkowany ciąg miast, który jest punktem odniesienia dla ciągów w reprezentacji porządkowej, na przykład: [27]

1 2 3 4 5 6 7 8 9 Trasa: jest reprezentowana przez ciąg wskazań: 1 3 2 4 8 5 9 6 7 1 2 1 1 4 1 3 1 1 co należy interpretować następująco: Pierwszą liczbą w ciągu jest 1, więc pierwszym miastem na trasie będzie miasto znajdujące się na pozycji 1 w ciągu, które ustanawiamy punktem startowym trasy i usuwamy z ciągu : Częściowa trasa: Aktualny ciąg : 1 2 3 4 5 6 7 8 9 Następną liczbą w ciągu jest 2, więc do trasy dopisujemy miasto znajdujące się na pozycji drugiej aktualnego ciągu i usuwamy daną pozycję z ciągu otrzymując: Częściowa trasa: Aktualny ciąg : 1 3 2 4 5 6 7 8 9 Postępując analogicznie przechodzimy przez wszystkie elementy ciągu kompletując całą trasę: 1 3 2 4 8 5 9 6 7 Główną zaletą reprezentacji porządkowej jest to, że działa przy niej klasyczne krzyżowanie. Jakiekolwiek dwie trasy w reprezentacji porządkowej, przecięte w pewnym punkcie i zamienione ze soną, prowadzą do dwóch potomków, reprezentujących dopuszczalne trasy. Jednak jak stwierdzono (9), słabe wyniki eksperymentalne wskazują, [28]

że ta reprezentacja pomimo zastosowania klasycznego krzyżowania nie jest odpowiednia dla zadania komiwojażera. c) Reprezentacja ścieżkowa. W tworzonym algorytmie zastosowano reprezentację ścieżkową, która jest najbardziej naturalną reprezentacją trasy. Np. trasa przebiegająca przez cztery miasta: 1. Kraków 2. Poznań 3. Warszawa 4. Wrocław Reprezentowana przez ciąg: 1 3 2 4 oznacza następującą kolejność punktów: Kraków Warszawa Poznań Wrocław Podstawą działania algorytmu genetycznego jest cykliczne powtarzanie operacji mające na celu tworzenie nowych lepiej przystosowanych osobników zgodnie ze schematem, który przedstawia Rysunek 2-1. Punktem startowym algorytmu jest tworzenie osobników stanowiących populację początkową. Trasa każdego osobnika jest wybierana w sposób zupełnie losowy poprzez losowanie kolejnego punktu na trasie z danej listy wszystkich punktów. Po każdym wyborze, wybrany punkt jest usuwany z listy w celu uniknięcia powstania trasy niedopuszczalnej (trasa przebiega przez każde miasto tylko raz). Następnie ocenia się przystosowanie osobników. Chromosom najlepiej przystosowany będzie reprezentował trasę o najkrótszej drodze. Każdy punkt jest reprezentowany za pomocą współrzędnych geograficznych w przestrzeni dwuwymiarowej, a całkowita droga jest sumą odległości euklidesowej pomiędzy kolejnymi punktami na trasie. Do kalkulacji odległości algorytm wykorzystuje macierz, która przechowuje obliczone odległości pomiędzy wszystkimi punktami: [29]

0 53 84 53 0 63 84 63 0 gdzie element x ij reprezentuje odległość x między punktami i i j. Kolejnym bardzo ważnym krokiem w algorytmie genetycznym jest selekcja, która polega na wyborze osobników biorących udział w tworzeniu nowej populacji. Poza znaną już z algorytmu podstawowego selekcją ruletkową istnieją również inne metody selekcji. W algorytmie zaimplementowano selekcję elitarną oraz turniejową, poza nimi znana jest również selekcja rankingowa: Selekcja rankingowa polega na ustawieniu kolejno osobników populacji w zależności od wartości ich funkcji przystosowania na liście rankingowej w kolejności od najlepszego lub najgorszego osobnika. Każdemu z osobników przypisuje się parametr nazywany rangą, natomiast prawdopodobieństwo przejścia i liczba kopii każdego osobnika jest ustalana za pomocą odpowiedniej funkcji dopasowania i ściśle zależy od wyznaczonej rangi. Selekcja turniejowa opiera się na losowaniu par osobników z danej populacji, a następnie dla każdej pary przeprowadzany jest pojedynek pod względem jakości rozwiązania. Do nowej populacji wchodzą zwycięzcy z poszczególnych par. Dzięki temu metoda umożliwia odrzucenie najsłabszych osobników, jak również uniemożliwia zdominowanie populacji przez najlepszego osobnika. Selekcja elitarna - cały proces selekcji sprowadza się do posortowania listy osobników od najlepiej przystosowanego do najgorszego i zatrzymaniu określonej liczby osobników, podanej funkcji jako parametr określający liczebność populacji. Cała reszta osobników jest likwidowana i nie bierze udziału w dalszych operacjach genetycznych. Kolejnym krokiem algorytmu jest proces krzyżowania. Dla wybranej reprezentacji ścieżkowej istnieją co najmniej trzy służące do tego celu operatory opisane dokładnie w (10): krzyżowanie z częściowym odwzorowaniem (PMX), z porządkowaniem (OX) oraz cykliczne (CX). W algorytmie wykorzystano metodę PMX. Metoda polega na tworzeniu potomka wybierając w sposób losowy podtrasę od jednego z rodziców i pozostawiając porządek reszty punktów od drugiego rodzica jeśli tylko jest to możliwe. Mając dwóch rodziców losuje się [30]

dwa punkty cięcia zaznaczone czerwoną linią (Rysunek 2-5), a potomków tworzy się wymieniając odcinki między tymi punktami cięcia: Rodzic 1 1 2 3 4 5 6 7 8 9 Potomek 1 1 8 5 2 Rodzic 2 7 4 1 8 5 2 9 6 3 Rysunek 2-5 Krzyżowanie PMX (krok 1). Potomek 2 3 4 5 6 Ta wymiana określa ciąg odwzorowań: Rysunek 2-6 Krzyżowanie PMX (ciąg odwzorowań). 3 4 5 6 1 8 5 2 Następnie wstawia się punkty od początkowych rodziców dla, których nie zachodzi konflikt (nie mogą się dublować): Rodzic 1 1 2 3 4 5 6 7 8 9 Potomek 1 1 8 5 2 7 9 Rodzic 2 7 4 1 8 5 2 9 6 3 Rysunek 2-7 Krzyżowanie PMX (krok 2). Potomek 2 7 3 4 5 6 9 Miejsca, w których nastąpił konflikt wypełnia się korzystając z ciągu odwzorowań (Rysunek 2-6). Do potomka pierwszego w miejsce gdzie powinna być wartość 1 z powodu konfliktu (znajduje się na miejscu trzecim) zastępuje się wartością: 3 według odwzorowania: 1 3; wartość: 2 zastępuje się wartością: 6 (odwzorowanie 2 6) oraz w ten sam sposób wartość: 8 zastępuje się wartością: 4 otrzymując kompletnego potomka. W analogiczny sposób tworzy się drugiego potomka, gdzie oryginalna wartość: 4 zastępowana jest według odwzorowania 8 4 wartością: 8; wartość: 6 według 2 6 wartością: 2 oraz wartość: 3 (odwzorowanie: 1 3) wartością: 1. Otrzymując w ten sposób kompletną parę potomków: [31]

Rodzic 1 1 2 3 4 5 6 7 8 9 Potomek 1 3 6 1 8 5 2 7 4 9 Rodzic 2 7 4 1 8 5 2 9 6 3 Rysunek 2-8 Krzyżowanie PMX (krok 3). Potomek 2 7 8 3 4 5 6 9 2 1 Ostatnim krokiem w algorytmie genetycznym jest proces mutacji. W algorytmie wykorzystano operator IVM (ang. Inversion Mutation), który zaproponował David Fogel, ponieważ osiąga bardzo dobre wyniki w stosunku do innych tego typu operatorów jak np. ISM (ang. Insertion Mutation), który powoduje losowe przemieszczenie jednego wybranego miasta. Dokładne informacje na temat tych i innych operatorów można znaleźć w (11). Operator IVM jest podobny do operatora 2-opt, którego autorami są Lin i Kerningham. Polega on na wybraniu podtrasy przez losowe wybranie dwóch punktów oznaczonych linią czerwoną (Rysunek 2-9) i usunięcia jej z oryginalnej trasy osobnika, a następnie wstawia się ją w losowe miejsce (linia zielona Rysunek 2-9) w odwrotnej kolejności. Przykład: 9 5 1 2 3 6 4 7 8 9 5 1 7 8 9 5 1 7 8 Rysunek 2-9 Mutacja IVM. 9 4 6 3 2 5 1 7 8 Na podstawie przedstawionych powyżej metod powstał algorytm genetyczny rozwiązujący problem komiwojażera. Postać tego algorytmu przedstawia poniższy pseudokod: Algorytm 1 Algorytm genetyczny dla TSP 1) losowe inicjowanie populacji wielkości POP_SIZE 2) 1 3) while _ do 4) ocena przystosowania( ) [32]

5) selekcja( ) 6) for ż 7) if rand(0,1)<cros_prob then 8) 1 9) 2 losuj rodzica z populacji 10) krzyżowanie( 1, 2) 11) end if 12) end for 13) for ż 14) if rand(0,1)<mut_prob then 15) mutacja( ) 16) end if 17) end for 18) end while Constants: POP_SIZE liczna osobników MAX_IT liczba iteracji CROS_PROB prawdopodobieństwo krzyżowania <0,1> MUT_PROB - prawdopodobieństwo mutacji <0,1> Variables: - licznik iteracji 1, 2 osobnik populacji Złożoność obliczeniowa elementów algorytmu genetycznego ( ): 1. - losowe inicjowanie osobnika. 2. - ocena przystosowania osobnika. 3. - krzyżowanie. 4. - mutacja. Złożoność obliczeniowa procesu selekcji ( ść ): 1. - selekcja elitarna. [33]

2. - selekcja turniejowa. 2.2 Inteligencja rojowa 2.2.1 Kolonia mrówek Mrówki należą do bardzo rozpowszechnionej grupy owadów, występującej prawie pod każdą szerokością geograficzną. Do opisu ich charakterystycznych cech, sposobu zachowań oraz algorytmów mrówkowych, których były inspiracją, posłużymy się informacjami zgromadzonymi przez Engelbrechta (12). Mrówki pojawiły się już 100 milionów lat temu, a ich aktualna populacja jest szacowana na liczbę 10 osobników. Większość z nich to owady społeczne żyjące w koloniach od 30 do miliona osobników. Mrówki jako pojedyncze jednostki są prymitywnymi owadami z ograniczoną pamięcią i możliwościami ułatwiającymi wykonanie jedynie prostych czynności. Ze względu na budowę anatomiczną, można je podzielić przynajmniej na trzy rodzaje. Samice i samce zajmują się wyłącznie tworzeniem potomstwa, inne zadania są wykonywane przez wyspecjalizowane robotnice. Polegają one przede wszystkim na: obronie, furażowaniu czyli poszukiwaniu i dostarczaniu pożywienia, opiekowaniu się potomstwem, budowaniu i utrzymaniu mrowiska przez nowe konstrukcje oraz czyszczeniu starych kanałów. Do prowadzenia tych wszystkich zadań niezbędna jest komunikacja. Może ona przebiegać w sposób bezpośredni za pomocą m.in. chemicznego kontaktu lub w sposób pośredni, gdy np. na modyfikacje otoczenia przez jednego osobnika drugi odpowiada w nowym otoczeniu, w późniejszym czasie. Ta forma komunikacji pośredniej nazywana jest stygmerią. Metoda optymalizacyjna z wykorzystaniem kolonii mrówek ACO (ang. ant colony optimization) powstała w wyniku obserwacji przez entymologów procesu furażowania. Mrówki posiadają interesującą umiejętność znajdywania najkrótszej ścieżki z mrowiska do źródła pożywienia, według której powstał pierwszy model algorytmu ACO stworzony przez Marco Dorigo na początku lat 90-tych. Do osiągnięcia tego celu niezbędna jest komunikacja. Mrówki korzystają w tym wypadku ze sposobu komunikacji pośredniej, bazującego na pozostawianiu feromonu (substancji chemicznej) na przebytej ścieżce. Pojedyncza mrówka porusza się w sposób losowy, aż do napotkania śladu feromonu. Wtedy z dużym prawdopodobieństwem podąża za napotkanym śladem. W miarę upływu czasu [34]