Praca dyplomowa magisterska

Wielkość: px
Rozpocząć pokaz od strony:

Download "Praca dyplomowa magisterska"

Transkrypt

1 POLITECHNIKA ŚLĄSKA WYDZIAŁ AUTOMATYKI, ELEKTRONIKI i INFORMATYKI KIERUNEK INFORMATYKA Praca dyplomowa magisterska System gromadzenia i udostępniania informacji o ruchu pojazdów i przesyłek w przedsiębiorstwie kurierskim Autor: inż. Karol Podsiadło Kierujący pracą: dr inż. Ewa Płuciennik-Psota Gliwice, wrzesień 2012

2

3 Spis treści 1. Wstęp Problem komiwojażera Opis problemu Historia problemu Metody rozwiązań problemu Algorytm siłowy Metaheurystyki optymalizacyjne Przeszukiwanie lokalne Wersja zachłanna Wersja stroma Symulowane wyżarzanie Przeszukiwanie tabu Wstawiania najbliższego miasta Algorytmy genetyczne Reprezentacje danych Krzyżowanie Mutacje Selekcja Warunki zatrzymania Analiza algorytmów komiwojażera Wybrane narzędzia Wzorzec projektowy MVC ASP.NET MVC SQL Server ADO.NET Entity Framework LINQ JQuery Serwisy internetowe udostępniające mapy geograficzne Google Maps Yahoo! Maps Bing Maps OpenStreetMap MapQuest... 64

4 Porównanie map Analiza oczekiwanej funkcjonalności aplikacji Opis aplikacji Specyfikacja wymagań Analiza przypadków użycia Administrator Kierownik Kurier Klient Przegląd konkurencyjnych rozwiązań UPS DHL Specyfikacja wewnętrzna Warstwa modelu Warstwa widoku Warstwa kontrolera Schemat bazy danych Testowanie Specyfikacja zewnętrzna Uruchomienie aplikacji Zakładki Administrator Kierownik Kurier Klient Podsumowanie Bibliografia Załączniki

5 Spis rysunków Rysunek 1: Przykładowa trasa wyznaczona przy użyciu symulowanego wyżarzania Rysunek 2: Przykładowa trasa wyznaczona przy użyciu algorytmu lokalnego zachłannego Rysunek 3: Przykładowa trasa wyznaczona przy użyciu algorytmu lokalnego stromego Rysunek 4: Przykładowa trasa wyznaczona przy użyciu algorytmu genetycznego Rysunek 5: Google Maps z przykładowym wyświetlonym miejscem Rysunek 6: Yahoo Maps z przykładowym wyświetlonym miejscem Rysunek 7: Bing Maps z przykładowym wyświetlonym miejscem Rysunek 8: OpenStreetMaps z przykładowym wyświetlonym miejscem Rysunek 9: MapQuest z przykładowym wyświetlonym miejscem Rysunek 10: MapQuest open z przykładowym wyświetlonym miejscem Rysunek 11: Przykład wykorzystujący Google Distance Matrix API Rysunek 12: Google Maps - prezentacja trasy wraz ze wskazówkami dojazdu Rysunek 13: Bing Maps - prezentacja trasy wraz ze wskazówkami dojazdu Rysunek 14: MapQuest - prezentacja trasy wraz ze wskazówkami dojazdu Rysunek 15: Google Maps i natężenie ruchu drogowego Rysunek 16: Diagram przypadków użycia administratora Rysunek 17: Diagram przypadków użycia kierownika Rysunek 18: Diagram przypadków użycia kuriera Rysunek 19: Diagram przypadków użycia rezerwacji miejsc Rysunek 20: Strona internetowa firmy UPS Rysunek 21: Strona internetowa firmy DHL Rysunek 22: Diagram sekwencji obsługi żądania użytkownika przez aplikację Rysunek 23: Schemat bazy danych Rysunek 24: Strona powitalna Rysunek 25: Zakładka logowania Rysunek 26: Zakładka rejestracji Rysunek 27: Opcje dostępne dla klienta Rysunek 28: Sprawdzanie stanu przesyłki Rysunek 29: Szczegółowe informacje o przesyłce Rysunek 30: Menu ze wszystkimi uprawnieniami Rysunek 31: Opcje dostępne dla administratora Rysunek 32: Formatka Użytkownicy zakładki Administrator Rysunek 33: Formularz nowego użytkownika Rysunek 34: Edycja użytkownika Rysunek 35: Szczegóły użytkownika Rysunek 36: Usuwanie użytkownika Rysunek 37: Opcje dostępne dla kierownika Rysunek 38: Lista kursów stworzonych przez kierownika Rysunek 39: Edycja kursu Rysunek 40: Szczegóły kursu Rysunek 41: Wybór oddziału, dla którego będzie tworzony kurs Rysunek 42: Wybór terminu oraz listy paczek dla kursu Rysunek 43: Wybór kierowcy i pojazdu Rysunek 44: Realizacja kursu Rysunek 45: Lista aktualnie wykonywanych kursów Rysunek 46: Rejestrowanie kursu kuriera

6 Rysunek 47: Lista kurierów Rysunek 48: Lista kursów wybranego kuriera Rysunek 49: Opcje dostępne dla klienta Rysunek 50: Składanie zamówienia Rysunek 51: Lista zamówień klienta Rysunek 52: Podgląd stanu realizacji zamówienia

7 Spis tabel Tabela 1: Odległości między punktami dla problemu komiwojażera Tabela 2: Kolejność zamian przy generowaniu sąsiedztwa bieżącego Tabela 3: Przebieg algorytmu zachłannego dla sekwencji początkowej A-F-E-B-B-C-A Tabela 4: Przebieg algorytmu zachłannego dla sekwencji początkowej A-E-C-D-B-F-A Tabela 5: Przebieg algorytmu w wersji stromej dla sekwencji początkowej A-E-C-D-B-F-A Tabela 6. Przebieg algorytmu symulowanego wyżarzania dla sekwencji A-E-C-D-B-F-A Tabela 7: Tablica tabu Tabela 8: Pomocnicza dane dla przeszukiwania tabu po 1 iteracji Tabela 9: Historia częstotliwości i ostatnich ruchów po 1 iteracji Tabela 10: Tabela pomocnicza dla przeszukiwania tabu po 2 iteracji Tabela 11: Historia częstotliwości i ostatnich ruchów po 2 iteracji

8 Spis wykresów Wykres 1: Zależność długości trasy od wybranego prawdopodobieństwa (symulowane wyżarzanie) Wykres 2: Zależność długości trasy od czasu wykonania algorytmu (symulowane wyżarzanie) Wykres 3: Zależność liczby miast od długości trasy dla algorytmu genetycznego (PMX) Wykres 4: Zależność liczby miast od długości trasy dla algorytmu genetycznego (OX) Wykres 5: Zależność liczby miast od długości trasy dla algorytmu genetycznego (CX) Wykres 6: Zależność liczby miast od długości trasy dla algorytmu genetycznego (Inwersja) Wykres 7: Zależność liczby miast od czasu wykonania dla poszczególnych wartości parametrów (PMX) Wykres 8: Porównanie czasów wykonania algorytmów dla metody turniejowej oraz ruletkowej Wykres 9: Porównanie metod krzyżowania algorytmu genetycznego Wykres 10: Porównanie algorytmów problemu komiwojażera Wykres 11: Porównanie czasów wykonania algorytmów problemu komiwojażera

9 Spis kodów źródłowych Kod źródłowy 1: Pseudokod algorytmu lokalnego w wersji zachłannej Kod źródłowy 2: Pseudokod algorytmu lokalnego w wersji stromej Kod źródłowy 3: Pseudokod algorytmu symulowanego wyżarzania Kod źródłowy 4: Pseudokod algorytmu przeszukiwania tabu Kod źródłowy 5: Pseudokod algorytmu genetycznego Kod źródłowy 6: Metoda zwracająca oddział o określonym ID Kod źródłowy 7: Metoda zwracająca listę kursów Kod źródłowy 8: Walidacja atrybutów klasy Address Kod źródłowy 9: Implementacja krzyżowania CX algorytmu genetycznego Kod źródłowy 10: Widok odpowiedzialny za wyświetlanie formularza zamówienia Kod źródłowy 11: Fragment implementacji wyświetlania trasy za pomocą Google Maps Kod źródłowy 12: Metoda kontrolera odpowiadająca za wyświetlanie listy oddziałów Kod źródłowy 13: Metoda kontrolera wyświetlająca formularz stworzenia użytkownika

10

11 1. Wstęp Szybki rozwój Internetu w znacznym stopniu wpłynął na postęp w różnych dziedzinach gospodarki, co pozwoliło na przyśpieszenie rozwoju ich działalności. Jedną z głównych dziedzin wykorzystujących globalną sieć komputerową jest handel. Taka forma aktywności pozwala na dostęp do znacznej liczby klientów. Każdego dnia dzięki tym usługom dochodzi do wielu transakcji zakupu, za realizację których, w dużej mierze odpowiadają firmy kurierskie. Z ich usług korzystają nie tylko firmy, których działalność oparta jest na handlu, ale również klienci indywidualni, którzy liczą na wysoką jakość oferowanych usług oraz terminowość. Aby oferta takich przedsiębiorstw mogła być konkurencyjna, firmy te muszą nieustannie podnosić jakość swoich usług. Poprawa zasad działania firmy może nie tylko przynieść wymierne korzyści w postaci nowej grupy klientów, ale również umożliwić redukcję kosztów w firmie m.in. poprzez lepsze rozplanowanie kursów, które muszą przebyć kurierzy w celu dostarczenia, bądź odebrania przesyłki. Celem pracy jest stworzenie aplikacji wspomagającej zarządzanie firmą kurierską. Program będący jej główną częścią powinien pozwalać na gromadzenie informacji o pozycji i przemieszczaniu się pojazdów oraz przesyłek w przedsiębiorstwie kurierskim. Aplikacja powinna przechowywać dane o tym, jakie przesyłki znajdują się w danym samochodzie firmowym oraz posiadać informacje o przypisanych do nich nadawcach i adresatach. Program powinien pozwalać na śledzenie aktualnej pozycji danego pojazdu, a tym samym konkretnej przesyłki oraz określać optymalne trasy dla poszczególnych adresów, z których przesyłki powinny zostać odebrane, bądź też do których powinny zostać dostarczone. Bardzo istotnym elementem pracy jest wybór algorytmu wyznaczającego trasę kuriera. Najlepsza trasa lub zbliżona do doskonałego rozwiązania powinna być wyznaczona na podstawie jednego z algorytmów problemu komiwojażera lub rozwinięcia tego zagadnienia, a mianowicie problemu marszrutyzacji. Dzięki przeprowadzonym testom, jeden z zaimplementowanych algorytmów powinien zostać wskazany, jako dający lepsze rozwiązania w określonym czasie przy założonej liczbie miejsc, które powinny zostać odwiedzone. Podsumowując, aplikacja powinna pozwalać na kierowanie różnymi działami funkcjonującymi w przedsiębiorstwach kurierskich. Program powinien umożliwiać również administrowanie osobami zatrudnionymi oraz ich uprawnieniami, które będą zależne od roli pełnionej w firmie. Również opcje przeznaczone dla potencjalnych klientów powinny być przejrzyste i oferować jak najwięcej możliwości m.in. śledzenia przesyłki. 11

12 Praca została podzielona na kilka rozdziałów. Pierwszy rozdział jest wprowadzeniem do tematu pracy. W rozdziale drugim zostały omówione zagadnienia dotyczące problemu komiwojażera. Trzeci opisuje narzędzia wykorzystane przy pisaniu aplikacji, natomiast rozdziały od czwartego do szóstego prezentują aplikację: jej funkcjonalność, specyfikację wewnętrzną i zewnętrzną. W rozdziale siódmym zawarte zostało podsumowanie pracy. 12

13 2. Problem komiwojażera W rozdziale zostały opisane zagadnienia dotyczące problemu komiwojażera. Na początku został sformułowany sam problem komiwojażera. W kolejnym podrozdziale przedstawiona została historia tego problemu, w dalszej części działu zostały zaprezentowane przykładowe algorytmy służące do rozwiązania tego problemu. Na końcu rozdziału została opisana analiza wybranych algorytmów komiwojażera Opis problemu Komiwojażer musi odwiedzić n miast, przy czym droga, którą pokona powinna być najkrótsza, najtańsza lub najszybsza, w zależności od wybranego kryterium oceny oraz powinna zaczynać się i kończyć w określonym punkcie [1]. Problem komiwojażera jest ściśle związany z problemem cyklu Hamiltona. Cyklem Hamiltona nazywamy ścieżkę w grafie, która przechodzi przez wszystkie jego wierzchołki dokładnie jeden raz i wraca do wierzchołka, z którego rozpoczął się cykl. Jeżeli ścieżka taka nie wraca do wierzchołka startowego, ale przechodzi przez pozostałe węzły grafu dokładnie jeden raz, to nazywamy ją ścieżką Hamiltona. Graf posiadający cykl Hamiltona nazywamy grafem Hamiltona. Grafem Hamiltonowskim jest w szczególności każdy graf, który posiada przynajmniej 3 wierzchołki oraz jest grafem pełnym tzn. takim, który posiada krawędź dla każdej pary węzłów wchodzącej w skład grafu. W teorii grafów marszrutą nazywamy skończony ciąg węzłów, nie posiadający powtarzających się wierzchołków, który tworzy drogę, nazywaną również często ścieżką. Zadanie znalezienia drogi dla komiwojażera polega na znalezieniu marszruty, czyli cyklu Hamiltona, odwiedzającego każde miasto (stanowiące wierzchołek grafu) dokładnie jeden raz i kończącego się w mieście, z którego rozpoczęła się marszruta. Kosztem podróży pomiędzy miejscami i oraz j nazywamy liczbę określającą odległość pomiędzy tymi punktami. Problem komiwojażera polega na wyznaczeniu marszruty o minimalnym łącznym koszcie, gdzie łączny koszt jest sumą poszczególnych wartości krawędzi marszruty [2] Historia problemu Pierwsze wzmianki o problemie komiwojażera sformułowano dosyć dawno. Już w 1759 roku Euler zajmował się rozwiązaniem ruchu skoczka po szachownicy [3], co można przyjąć za początki historii zadania rozwiązania problemu komiwojażera. W tym zagadnieniu uczony szukał optymalnego rozwiązania dla problemu odwiedzenia wszystkich pól szachownicy przez skoczka przy jednorazowym odwiedzeniu każdego pola. Historia samego 13

14 problemu komiwojażera sięga XIX wieku, natomiast pierwsze publikacje i propozycje algorytmów rozwiązujących ten problem pojawiły się w latach dwudziestych XX wieku, dzięki znanemu matematykowi Karlowi Mengerowi, który opublikował pracę poruszającą zagadnienie problemu komiwojażera. W 1932 roku wydał on publikację pod tytułem Das Botenproblem [4], w której opisał on problem posłańca jako: Zadanie znalezienia, dla skończonej liczby punktów, których parami odległości są znane, najkrótszej ścieżki łączącej te punkty Zasada, wg której dla punktu startowego powinno się wybrać punkt leżący najbliżej niego, itd., nie daje w rezultacie najkrótszej ścieżki." W 1949 roku Julia Robinson opublikowała dokument pt. On the Hamiltonian Game" [5], w którym po raz pierwszy został poruszony znany problem cyklu Hamiltona i przedstawiła w nim metodę rozwiązania problemu podobnego do zagadnienia komiwojażera. W 1954 roku Vašek Chvátal, William Cook, George B. Dantzig, Delbert R. Fulkerson i Selmer M. Johnson zaproponowali metodę, rozwiązania problemu, która przez dziesięciolecia pozostawała jedyną dla liczby miast rzędu kilkuset. Przedstawili oni w tym czasie optymalne rozwiązanie problemu komiwojażera dla 49 amerykańskich miast [6]. W 1955 został przedstawiony przez G. Mortona i A. H. Landa algorytm 3-przybliżeniowy [7] tzn. algorytm dający co najwyżej trzy razy gorszy wynik od optymalnego. Merill M. Flood w 1956 roku w swoje pracy The travelling-salesman problem przedstawił algorytm 2-przybliżeniowy [8]. W 1975 roku N. Christofides w pracy pt. Worst-case analysis of a new heuristic for the travelling salesman problem przedstawił algorytm 1,5-przybliżony oparty na twierdzeniu o nierówności trójkąta, będący najlepszym dostępnym, tej klasy algorytmem [9]. Istnieją algorytmy dające dokładniejsze rozwiązania, oparte o sztuczną inteligencję i genetykę, które wykorzystują elementy losowe. W dalszym ciągu nie jest znany wielomianowy algorytm znajdujący doskonałe rozwiązanie [1, 10] Metody rozwiązań problemu Zagadnienie komiwojażera jest zaliczane do problemów NP-trudnych, co oznacza, że nieznane są algorytmy o wielomianowej złożoności obliczeniowej rozwiązujące to zagadnienie. Do rozwiązania tego typu problemów w praktyce jesteśmy zmuszeni do posługiwania się wielomianowymi algorytmami heurystycznymi, które w przystępnym czasie są zdolne do znalezienia rozwiązania, które będzie zbliżone do wyniku optymalnego Algorytm siłowy Metoda ta polega na sprawdzeniu wszystkich możliwych permutacji wierzchołków występujących w grafie, co powoduje, że złożoność takiego rozwiązania jest wykładnicza, 14

15 ponieważ musimy sprawdzić (n-1)! kombinacji dla n elementów [11]. Przy większej liczbie węzłów zastosowanie tego algorytmu powoduje, że nie jesteśmy w stanie otrzymać rozwiązania w akceptowalnym czasie. Modyfikacja tego algorytmu polegająca na zastosowaniu powracania, czyli odrzucania rozwiązań gorszych na podstawie już wcześniej wyliczonych, nie pozwala jednak na zmniejszenie złożoności, która nadal pozostawałaby wykładnicza. Zakładając, że kierunek pokonywania tras nie ma znaczenia, jesteśmy w stanie zmniejszyć liczbę możliwości do, co również przy większej ilości węzłów, nie spowoduje, że rozwiązanie otrzymamy w akceptowalnym czasie. Problem można sobie uzmysłowić analizując kilka prostych faktów dotyczących permutacji wierzchołków, które przekładają się w tym przypadku na liczbę tras, które trzeba przeanalizować: dla 2 miast mamy 1 możliwość: {ABA}, dla 3 miast mamy 2 możliwości: {ABCA; ACBA}, dla 4 węzłów liczba kombinacji wzrasta do 6: {ABCDA; ACDBA; ACBDA; ADCBA; ABDCA; ADBCA}, przy 5 miastach mamy 24 trasy, przy 6 liczba kombinacji wzrasta już do 120 tras, dla 10 miast mamy możliwości, co pokazuje w jak szybkim tempie wzrasta ilość kombinacji wraz z niewielkim wzrostem liczby węzłów, dla 20 punktów mamy 1, * kombinacji, bez zaokrąglania jest ich dokładnie , dla 49 miast tych możliwości jest 1, * Zakładając, że możliwe byłoby wyliczenie miliarda tras na sekundę, to w minutę bylibyśmy w stanie wyliczyć 6 * możliwości, a w godzinę ilość ta wynosiłaby już 3,6* W tym wypadku w czasie jednej doby możliwe byłoby wyliczenie 8,64 * kombinacji. W rok sprawdzonoby 3,1536 * tras. Obliczenia rozwiązania dla 49 miast tą metodą, zajęłoby 3, * lat. Opierając się na badaniach, że Wszechświat ma około 13,75 miliardów lat [12], można wyliczyć, że nasz program działałby w przybliżeniu 2, * razy dłużej niż czas istnienia naszego Wszechświata Metaheurystyki optymalizacyjne W praktycznych zastosowaniach do tego typu problemów stosuje się algorytmy optymalizacyjne. 15

16 Optymalizacja zwykle sprowadza się do minimalizacji bądź maksymalizacji pewnej funkcji wyrażającej jakość rozwiązania danego problemu, definiowanej w zależności od zadania. W przypadku poszukiwania minimum należy znaleźć rozwiązanie X opt, spełniające warunek: ƒ (X opt) ƒ (X i ), dla każdego X i ϵ R, gdzie ƒ jest funkcją jakości (kosztu) rozwiązań, a R jest przestrzenią wszystkich możliwych rozwiązań. Problem poszukiwania maksimum odpowiada poszukiwaniu najmniejszej wartości funkcji ( -ƒ) [4]. W życiu codziennym spotyka się wiele problemów, dla których nie jest znany algorytm, który rozwiązywalny dawałby rozwiązanie w czasie wielomianowym. Jednym z takich przykładów jest problem komiwojażera. Chociaż dla danych o niewielkich rozmiarach czas wykonania tego typu zadań może być zadowalający, to wraz ze wzrostem ich wielkości czas oczekiwania może stać się nieakceptowalny. Na ratunek w takim wypadku przychodzą algorytmy heurystyczne. Pozwalają one na skrócenie czasu obliczeń, ale ceną jaką musimy zapłacić za to udogodnienie jest otrzymanie potencjalnie gorszego rozwiązania. Sam termin heurystyka pochodzi od greckiego słowa heuresis, które oznacza odnaleźć. Metoda ta polega na wykorzystywaniu zdobytych faktów i reguł, które wraz ze wcześniej zdobytym doświadczeniem na temat danego problemu, pozwalają na jego rozwiązanie lub zbliżenie się do poprawnej odpowiedzi. Heurystykę można podzielić na dwa rodzaje: algorytmy probabilistyczne, w których wykorzystuje się czynnik losowości oraz algorytmy deterministyczne, których działanie jest całkowicie zdeterminowane przez warunki początkowe danego problemu. Podejście heurystyczne można stosować "piętrowo", tworząc metaheurystyki, czyli heurystyki nadrzędne, sterujące, w procesie iteracyjnego przeszukiwania heurystykami niższego rzędu. W ostatnich kilkudziesięciu latach opracowano wiele niekonwencjonalnych metod heurystycznego przeszukiwania, inspirowanych często mechanizmami fizycznymi lub biologicznymi, zaliczanych obecnie do rzędu metaheurystyk Przeszukiwanie lokalne Przykładami prostych heurystyk są algorytmy przeszukiwania lokalnego, które są proste w implementacji oraz pozwalają w dość szybkim czasie otrzymać rozwiązanie. Niestety algorytmy te nie dają wyników wysokiej jakości. Dlatego należy je stosować do problemów, gdzie jakość rozwiązania nie jest priorytetem. Metody te polegają na poprawie 16

17 bieżącego wyniku z każdym kolejnym przebiegiem algorytmu. Najczęściej rozróżniane są dwie wersje przeszukiwania lokalnego: wersja zachłanna oraz wersja stroma Wersja zachłanna W wersji zachłannej każde nowe rozwiązanie jest określane na podstawie znalezionego pierwszego wyniku, który jest lepszy od bieżącego. Sam algorytm, jak nazwa wskazuje, pozwala na znajdowanie optymalnych rozwiązań lokalnych. Początek działania tej metody polega na wylosowaniu wartości, wokół której poszukiwane jest optymalne rozwiązanie. Algorytm kończy swoje działanie, w przypadku nie znalezienia rezultatu, który poprawiłby bieżące rozwiązanie. W celu polepszenia jakości wyników zwracanych, często losuje się wiele punktów startowych, z których wylicza się ich lokalne ekstrema. Algorytm zapisany w pseudokodzie [13] przedstawia kod źródłowy 1. begin Wyznaczenie wartości początkowej X; repeat bool brak_poprawy := false; for i:= 1 to liczebność_sąsiedztwa do X := wyznaczenie_rozwiązania_z_sąsiedztwa(i); if f(x ) < f(x) then X := X break; else brak_poprawy := true; end if; end for; until brak_poprawy; return X; end. Kod źródłowy 1: Pseudokod algorytmu lokalnego w wersji zachłannej. Przykład Działanie algorytmu przedstawiono na prostym przykładzie składającym się z sześciu punktów. Oznaczone zostały one sześcioma pierwszymi dużymi literami alfabetu, a jako węzeł początkowy podróży komiwojażera wybrano punkt A. Przyjęte odległości między węzłami są opisane w tabeli 1. 17

18 A B C D E F A - 14,00 6,54 15,05 2,00 19,67 B 14,00-5,65 12,11 10,02 17,17 C 6,54 5,65-3,10 13,79 19,01 D ,11 3,10-5,07 11,90 E 2,00 10,02 13,79 5,07-7,00 F 19,67 17,17 19,01 11,90 7,00 - Tabela 1: Odległości między punktami dla problemu komiwojażera. Za sąsiedztwo danego rezultatu przyjęto te trasy, które różnią się od bieżącego rozwiązania położeniem dwóch punktów, czyli w każdej kolejnej iteracji sprawdzana jest wartość długości trasy po zamianie punktów leżących na pozycjach i, j dla i, j ϵ {1...n}. Za rozwiązanie początkowe została przyjęta trasa tworząca sekwencje A-F-E-B-B-C-A o długości Δ = 56,04. Kolejność zamian, na podstawie których generowane są rozwiązania, przedstawione są w tabeli 2. Lp. Zamiana Sekwencja trasy Tabela 2: Kolejność zamian przy generowaniu sąsiedztwa bieżącego. Przebieg algorytmu zachłannego dla sekwencji A-F-E-B-B-C-A jest przedstawiony w tabeli 3. Początkowa losowa trasa ma długość 56,04. Po pierwszej zamianie miejsc punktu F i E, które według tabeli oznaczają miejsca o indeksie 2 i 3. Długość trasy po tej zamianie wynosi 45,20 i ten rezultat staje się nowym bieżącym rozwiązaniem. Kolejne permutacje dokonywane według tabeli zamian, nie osiągają lepszego wyniku. Po przejściu wszystkich możliwych kombinacji, można stwierdzić, że wartością wyznaczoną za pomocą tego algorytmu jest trasa o sekwencji A-E-F-D-B-C-A, której długość wynosi 45,20. Iteracja Zamiana Rozwiązanie z sąsiedztwa (F E) A-E-F-D-B-C-A Δ = 45,20 Opis Rozwiązanie początkowe Uaktualnienie rozwiązania bieżącego Rozwiązanie bieżące A-F-E-B-B-C-A Δ = 56,04 A-E-F-D-B-C-A Δ = 45,20 18

19 Iteracja Zamiana Rozwiązanie z sąsiedztwa Opis Rozwiązanie bieżące 2 4 (E D) A-D-F-E-B-C-A Δ = 56,16 Gorszy wynik, rozwiązanie bieżące bez zmian 2 5 (E B) A-B-F-D-E-C-A Δ = 68,47 Gorszy wynik, rozwiązanie bieżące bez zmian 2 6 (E C) A-C-F-D-B-E-A Δ = 61,58 Gorszy wynik, rozwiązanie bieżące bez zmian 3 4 (F D) A-E-D-F-B-C-A Δ = 48,24 Gorszy wynik, rozwiązanie bieżące bez zmian 3 5 (F B) A-E-B-D-F-C-A Δ = 61,58 Gorszy wynik, rozwiązanie bieżące bez zmian 3 6 (F C) A-E-C-D-B-F-A Δ = 67,84 Gorszy wynik, rozwiązanie bieżące bez zmian 4 5 (D B) A-E-F-B-D-C-A Δ = 47,92 Gorszy wynik, rozwiązanie bieżące bez zmian 4 6 (D C) A-E-F-C-B-D-A Δ = 60,82 Gorszy wynik, rozwiązanie bieżące bez zmian 5 6 (B C) A-E-F-D-C-B-A Δ = 50,76 Gorszy wynik, rozwiązanie bieżące bez zmian Tabela 3: Przebieg algorytmu zachłannego dla sekwencji początkowej A-F-E-B-B-C-A. W tabeli 4 został przedstawiony przebieg algorytmu dla innej losowo wybranej sekwencji początkowej, której rozkład pomiędzy współrzędnymi był następujący A-E-C-D-B-F-A, a wartość dla tej kolejności wynosiła 67,84. Iteracja Zamiana Rozwiązanie z sąsiedztwa Opis Rozwiązanie bieżące 1 Rozwiązanie początkowe A-E-C-D-B-F-A 2 3 (E C) A-C-E-D-B-F-A Δ = 74,35 Gorszy wynik, rozwiązanie bieżące bez zmian Δ = 67, (E D) A-D-C-E-B-F-A Δ = 78,80 Gorszy wynik, rozwiązanie bieżące bez zmian 2 5 A-B-C-D-E-F-A Uaktualnienie rozwiązania bieżącego (E B) Δ = 54, (B F) A-F-C-D-E-B-A Δ = 70,87 Gorszy wynik, rozwiązanie bieżące bez zmian A-B-C-D-E-F-A Δ = 54, (C D) A-B-D-C-E-F-A Δ = 69,67 Gorszy wynik, rozwiązanie bieżące bez zmian 3 5 (C E) A-B-E-D-C-F-A Δ = 70,87 Gorszy wynik, rozwiązanie bieżące bez zmian 3 6 (C F) A-B-F-D-E-C-A Δ = 68,47 Gorszy wynik, rozwiązanie bieżące bez zmian 4 5 (D E) A-B-C-E-D-F-A Δ = 70,08 Gorszy wynik, rozwiązanie bieżące bez zmian 4 6 (D F) A-B-C-F-E-D-A Δ = 65,78 Gorszy wynik, rozwiązanie bieżące bez zmian 5 6 A-B-C-D-F-E-A Uaktualnienie rozwiązania bieżącego (E F) Δ = 43, A-C-B-D-F-E-A Gorszy wynik, rozwiązanie bieżące A-B-C-D-F-E-A 19

20 Iteracja Zamiana Rozwiązanie z sąsiedztwa Opis Rozwiązanie bieżące (B C) Δ = 45,20 bez zmian Δ = 43, (B D) A-D-C-B-F-E-A Δ = 49,97 Gorszy wynik, rozwiązanie bieżące bez zmian 2 5 (B F) A-F-C-D-B-E-A Δ = 65,91 Gorszy wynik, rozwiązanie bieżące bez zmian 2 6 (B E) A-E-C-D-F-B-A Δ = 61,96 Gorszy wynik, rozwiązanie bieżące bez zmian 3 4 (C D) A-B-D-C-F-E-A Δ = 57,22 Gorszy wynik, rozwiązanie bieżące bez zmian 3 5 (C F) A-B-F-D-C-E-A Δ = 61,96 Gorszy wynik, rozwiązanie bieżące bez zmian 3 6 (C E) A-B-E-D-F-C-A Δ = 66,54 Gorszy wynik, rozwiązanie bieżące bez zmian 4 5 (D F) A-B-C-F-D-E-A Δ = 57,63 Gorszy wynik, rozwiązanie bieżące bez zmian 4 6 (D E) A-B-C-E-F-D-A Δ = 67,39 Gorszy wynik, rozwiązanie bieżące bez zmian 5 6 (F E) A-B-C-D-E-F-A Δ = 54,49 Gorszy wynik, rozwiązanie bieżące bez zmian Tabela 4: Przebieg algorytmu zachłannego dla sekwencji początkowej A-E-C-D-B-F-A. Porównując powyższe rozwiązania dla dwóch losowych elementów startowych, można zauważyć wcześniej przedstawiony mankament tego rozwiązania, którym jest wyszukiwanie ekstremów, ale niestety tylko lokalnych. Algorytm ten nie pozwala na wydostanie się z pewnej grupy odpowiedzi, które są wynikami najlepszymi, ale tylko w pewnej grupie lokalnych rozwiązań. Sposobem na poprawę tego efektu, jest zastosowanie większej liczby punktów startowych, dla których zostaną sprawdzone wyniki i zostaną one ze sobą porównane, w celu wybrania najlepszego rozwiązania Wersja stroma W wersji stromej, w odróżnieniu od zachłannej, nie jest wybierane pierwsze rozwiązanie, które jest lepsze, ale dokonuje się przeglądu rezultatów występujących wokół bieżącego wyniku i z tej grupy wybierana zostaje wartość, która staje się bieżącym rozwiązaniem. Pseudokod wersji stromej [13] przedstawia kod źródłowy 2. 20

21 begin end. Przykład Wyznaczenie wartości początkowej X; repeat X := wyznaczenie_rozwiązania_z_sąsiedztwa(); end for; if f(x ) < f(x) then end if; until brak_poprawy; return X; X := X break; Kod źródłowy 2: Pseudokod algorytmu lokalnego w wersji stromej. Zasadę działania algorytmu przedstawiono w tabeli 5. Odległości między punktami są analogiczne jak w przykładzie dla algorytmu zachłannego. Za sekwencję początkową wybrano A-E-C-D-B-F-A, której wartość wynosiła 67,84. Przebieg algorytmu polega na tym, że z każdą iteracją sprawdzone zostają wszystkie możliwe wartości sąsiedztwa, spośród których wybierana jest wartość najlepsza, o ile jest ona korzystniejsza od rozwiązania bieżącego. W przypadku gdy nie znaleziono lepszego rozwiązania od aktualnego, algorytm kończy swoje działanie. Iteracja Zamiana Rozwiązanie z sąsiedztwa Opis Rozwiązanie początkowe Rozwiązanie bieżące A-E-C-D-B-F-A Δ = 67, (C F) A-E-F-D-B-C-A Δ = 45,20 Uaktualnienie rozwiązania bieżącego A-E-C-D-B-F-A Δ = 67, (B C) A-E-F-C-B-D-A Δ = 43,65 Uaktualnienie rozwiązania bieżącego A-E-F-D-B-C-A Δ = 45, Gorszy wynik, rozwiązanie bieżące bez zmian A-E-F-C-B-D-A Δ = 43,65 Tabela 5: Przebieg algorytmu w wersji stromej dla sekwencji początkowej A-E-C-D-B-F-A Symulowane wyżarzanie Algorytm symulowanego wyżarzania został opisany po raz pierwszy przez Nicolasa Metropolisa w 1953 roku [14]. Swoją nazwę, jak i sposób działania zawdzięcza procesom fizycznym wykorzystywanym w metalurgii. Proces wyżarzania jest jednym z podstawowych 21

22 rodzajów obróbki cieplnej stopów żelaza. Polega on na rozgrzaniu ciała stałego do pewnej temperatury, a następnie na jego stopniowym schładzaniu. Skutkami takiego działania mogą być zmiany fazowe lub modyfikacje struktury krystalicznej wyżarzanego materiału. W procesach ochładzania metali zaobserwowano, że wraz ze stopniowym schładzaniem, cząsteczki ciała, oddając energię, rozkładają się w sposób bardziej systematyczny tworząc bardziej równomierne struktury. Gdy spadek temperatury jest zbyt szybki, cząsteczki ciała nie znajdują optymalnego położenia i rozkład ich jest bardziej chaotyczny. Poprzez odpowiedni dobór temperatury w jakiej wyżarzanie jest przeprowadzane oraz stopnia chłodzenia, osiąga się materiały o określonych właściwościach. Algorytm symulowanego wyżarzania jest rozwinięciem wcześniejszych metod, które polegały na stałym ulepszaniu bieżącego rozwiązania do momentu, gdy nie udało się znaleźć lepszego rezultatu. Wadą ich było to, że kończyły swoje działanie przy znalezieniu ekstremum lokalnego optymalizowanej funkcji. Algorytmy te nie posiadały zdolności, kontynuowania swojego działania w kierunku najlepszego globalnego rozwiązania. Ważną cechą opisywanego w tym punkcie algorytmu jest możliwość wyboru gorszego rezultatu, który jest akceptowany z pewnym prawdopodobieństwem, dzięki czemu nie jesteśmy skazani jedynie na znajdowanie określonej maksymalnej wartości, w obrębie której dokonujemy poszukiwań. Metoda ta pozwala na wyjście ze znalezionego ekstremum lokalnego i pozwala na dalsze podążanie w kierunku rozwiązania optymalnego. Podstawowym parametrem algorytmu jest temperatura, która wpływa na prawdopodobieństwo wyboru gorszego rozwiązania, im jest ona większa tym większa jest szansa na przyjęcie gorszego rozwiązania. W czasie ochładzania, gdy wartość temperatury jest niższa, algorytm coraz bardziej swoim działaniem przypomina typowe metody iteracyjne. W początkowej fazie algorytmu, gdy temperatura jest wysoka, częstym zmianom ulega rozwiązanie bieżące. Z biegiem czasu działania metody, temperatura zmniejsza swoją wartość oraz wybierane są coraz częściej tylko lepsze rozwiązania. W końcowej fazie algorytmu, kiedy temperatura jest na tyle niska, że prawdopodobieństwo wyboru gorszego rozwiązania jest bliskie zeru, algorytm zachowuje się jak typowy algorytm iteracyjny i stara się znaleźć ekstremum w swoim sąsiedztwie. Zakładając, że X jest bieżącym rozwiązaniem, natomiast X oznacza losowo wybrany wynik, prawdopodobieństwo zaakceptowania wylosowanej wartości wyraża się wzorami: P t (X ) = (1.1) 22

23 ,gdzie: P t oznacza prawdopodobieństwo akceptacji wylosowanego rozwiązania, t oznacza bieżącą temperaturę, f funkcja celu, dla danego problemu. Algorytm symulowanego wyżarzania w postaci pseudokodu [13] prezentuje kod źródłowy 3. Ważnym elementem w tym algorytmie jest odpowiedni dobór parametrów, które mają wpływać na końcowy wynik. Rozróżniane są cztery podstawowe elementy: początkowa wartość parametru temperatury t 0, sposób obniżania temperatury, warunki zatrzymania algorytmu, liczba iteracji w obrębie danej temperatury. Begin Wyznacz rozwiązanie początkowe X; Wyznacz temperaturę początkową t; i := 0; repeat for j := 1 to L i do X = wybierz_rozwiązanie_z_sąsiedztwa(); Δf := f(x ) f(x); if dla Δf spełnione_kryterium_akceptacji then X := X ; end if; end for; t := wyznacz_wartosc_temperatury(); i := i + 1; until spełniony_warunek_zatrzymania; return X; end. Kod źródłowy 3: Pseudokod algorytmu symulowanego wyżarzania. Parametr temperatury początkowej Jedną z metod wyznaczenia temperatury początkowej jest przyjęcie pewnego prawdopodobieństwa P 0, które określa szansę na przyjęcie gorszego rozwiązania w pierwszej iteracji algorytmu. Na tej podstawie wykonuje się zadaną liczbę sprawdzeń rozwiązań sąsiednich, obliczając różnice funkcji kosztu dla przejść pogarszających rozwiązanie. 23

24 Następnie, po obliczeniu średniej wartości pogorszenia rozwiązania początkową oblicza się na podstawie zależności:, temperaturę t 0 = (1.2). Obniżanie wartości temperatury Do stopniowego zmniejszania temperatury najczęściej stosuje się wzór: t i+1 = αt i, i = 1, 2,, (1.3). gdzie α < 1 jest z góry określonym współczynnikiem, który najczęściej przyjmuje wartości z przedziału [0,8 ; 0,99]. Wyznaczanie końca algorytmu Jest kilka metod określenia końca wykonywania algorytmu. Jedną z nich jest zatrzymanie działania, gdy wartość temperatury spadnie poniżej określonej wartości. Kolejnym sposobem, który jest bardziej efektywny, jest przerwanie działania metody, jeżeli dla pewnej liczby przedziałów temperatury nie udaje się zmienić rozwiązania. Innym ograniczeniem, które można wprowadzić jest ograniczenie czasu działania algorytmu. Takie podejście może być stosowane w sytuacjach, w których czas wykonywania nie może być zbyt długi, ponieważ wyniki muszą zostać wygenerowane w określonym terminie. Określanie długości cyklu dla określonej temperatury Liczba iteracji dla danej temperatury również jest ważnym parametrem, który wpływa na wyniki działania symulowanego wyżarzania. Jedną z metod jest założenie pewnej stałej liczby przejść do nowego rozwiązania w danym cyklu, ale w tym przypadku istnieje ryzyko, że przy niskich wartościach temperatury, cykl ten będzie stawał się zbyt długi. Dla wyeliminowania tego efektu zakłada się dodatkową górną wartość długości danego etapu. Innym możliwym podejściem jest założenie, że długość epoki jest równa rozmiarowi sąsiedztwa. Przykład Przykładowe rozwiązanie algorytmu symulowanego wyżarzania przedstawia tabela 6. Za początkową kolejność punktów przyjęto sekwencję A-E-C-D-B-F-A, która daje wynik równy 67,84. Sąsiedztwa rozwiązań dla tego przykładu znajdują się w tabeli 2. Do wyznaczenia wartości początkowej temperatury skorzystano ze wzoru 1.2. Po wyliczeniu różnicy funkcji kosztów dla przejść pogorszających rozwiązanie i wyznaczeniu średniej z tej 24

25 wartości otrzymano wynik 9,59. Za prawdopodobieństwo przyjęcia gorszego rozwiązania na początku algorytmu wybrano wartość. Podstawiając do wzoru: t 0 = = Po zaokrągleniu wyniku do wartości całkowitych, wartość t 0 wyniosła 10. Dla parametru α, odpowiedzialnego za obniżanie temperatury, ustalono wartość 0,95. Każdy cykl dla danej temperatury trwał cztery iteracje. Po przebiegu algorytmu można zaobserwować, że możliwe jest akceptowanie gorszych rozwiązań, w celu poszukiwania jeszcze lepszych wyników. Przykład przedstawia tylko 3 etapy przebiegu tej metody, ale oczywiście można dalej poszukiwać optymalnej trasy. Obliczenia prowadzi się, dopóki nie zostaną spełnione warunki końcowe przebiegu algorytmu, które zostały opisane powyżej. W ostatniej iteracji można dostrzec, że posiadając już dość satysfakcjonujące rozwiązanie, algorytm przeskakuje do rezultatu znacznie gorszego. Co jeśli bieżące rozwiązanie było wynikiem optymalnym lub zbliżonym do niego i zrezygnowano z niego na rzecz rozwiązania dużo gorszego? Istnieje również zmodyfikowana wersja tej metody, która dodatkowo przechowuje najlepszy osiągnięty rezultat. t Iteracja Zamiana Rozwiązanie z sąsiedztwa Opis Rozwiązanie bieżące 10 Rozwiązanie początkowe A-E-C-D-B-F-A A-D-C-E-B-F-A Obliczanie = 0,334 Δ = 67,84 (E D) Δ = 78,80 Wylosowana wartość: 0,621 Brak akceptacji (D B) A-E-C-B-D-F-A Δ = 65,12 Uaktualnienie rozwiązania bieżącego A-E-B-D-F-C-A Uaktualnienie rozwiązania A-E-C-B-D-F-A (C B) (E F) (B E) (F E) (D C) (F C) (D C) Δ = 61,58 A-F-B-D-E-C-A Δ = 74,35 A-F-E-D-B-C-A Δ = 56,04 A-E-F-D-B-C-A Δ = 45,20 A-E-F-C-B-D-A Δ = 60,82 A-E-C-D-B-F-A Δ = 67,84 A-E-F-C-B-D-A Δ = 60,82 bieżącego Obliczanie = 0,278 Wylosowana wartość: 0,053 Akceptacja Uaktualnienie rozwiązania bieżącego Uaktualnienie rozwiązania bieżącego Obliczanie = 0,193 Wylosowana wartość: 0,360 Brak akceptacji Obliczanie = 0,092 Wylosowana wartość: 0,206 Brak akceptacji Obliczanie = 0,177 Wylosowana wartość: 0,679 Brak akceptacji Δ = 65,12 A-E-B-D-F-C-A Δ = 61,58 A-F-B-D-E-C-A Δ = 74,35 A-F-E-D-B-C-A Δ = 56,04 A-E-F-D-B-C-A Δ = 45,20 25

26 t Iteracja Zamiana Rozwiązanie z sąsiedztwa A-F-E-C-B-D-A (E F) Δ = 73, (B C) (D C) A-E-F-D-C-B-A Δ = 43,65 A-E-F-C-D-B-A Δ = 57,22 Opis Obliczanie = 0,044 Wylosowana wartość: 0,851 Brak akceptacji Uaktualnienie rozwiązania bieżącego Obliczanie = 0,222 Wylosowana wartość: 0,052 Akceptacja Rozwiązanie bieżące A-E-F-D-C-B-A Δ = 43,65 Tabela 6. Przebieg algorytmu symulowanego wyżarzania dla sekwencji A-E-C-D-B-F-A Przeszukiwanie tabu Metoda ta została przedstawiona przez Freda Glovera w 1986 roku [15]. Jest ona zbliżona do metody przeszukiwania lokalnego z dodatkowym mechanizmem pozwalającym na wychodzenie z minimów lokalnych. Cechą główną tego rozwiązania jest przechodzenie do gorszych wartości funkcji celu, ale dodatkowo algorytm jest zabezpieczony przed sprawdzaniem wyników wcześniej już odwiedzonych. Dzięki temu badana jest większa przestrzeń rozwiązań. Do realizacji tego celu wykorzystuje się struktury przechowujące historię obliczeń. Zakazy Inną nazwą na to ograniczenie jest tabu. Zasada działania tego mechanizmu polega na zapamiętywaniu ostatnio wykonanych ruchów. Zaznaczone tak ruchy są zabronione przez określoną liczbę iteracji, czas tego ograniczenia nazywany jest czasem trwania tabu. Pozwala to na opuszczenie przestrzeni wokół minimów lokalnych i poszukiwanie optymalnego rozwiązania w innych rejonach dozwolonych wartości dla danej funkcji celu. Unikamy dzięki temu ponownego przeszukiwania odwiedzonych już wcześniej miejsc. Do przechowywania informacji o zakazach zwykle nie stosuje się rozwiązań, które zawierają wszystkie możliwe kombinacje ruchów, ponieważ może to się okazać bardzo kosztowne ze względu na ilość zajmowanej pamięci oraz czasu przeszukiwania takiej struktury. Zwykle zapamiętuje się tylko te elementy lub przejścia, na których dokonaliśmy transformacji naszego bieżącego rozwiązania. Dopuszczalne jest też zezwolenie na wykonanie ruchów oznaczonych jako tabu, nosi to nazwę stosowania kryterium aspiracji. Polega to przejściu do ruchu oznaczonego zakazem w przypadku, gdy rozwiązanie jest lepsze od najlepszego dotychczas uzyskanego, uzasadnieniem tego wyboru jest fakt, że przechodzimy do wartości, która wcześniej nie była rozpatrywana. 26

27 Wyznaczanie końca algorytmu Do zakończenia działania algorytmu przeszukiwania tabu najczęściej stosuje się jeden z poniżej przedstawionych warunków. Pierwszym wyznacznikiem jest ustalona liczba iteracji lub założony z góry czas działania. Innym warunkiem może być określona wartość iteracji, w czasie której nie została poprawiona wartość rozwiązania. Można też założyć warunek dopuszczalnej wartości funkcji celu, która byłaby akceptowalna. Ten warunek zależy od sformułowania problemu i nie zawsze może być wykorzystany. Opis algorytmu Pseudokod algorytmu [13] przedstawia kod źródłowy 4. Schemat ten jest bardzo ogólny. W pętli while dokonuje się przeglądu sąsiedztwa bieżącego rozwiązania i wyboru najlepszego rozwiązania, uwzględniając tablicę tabu przy wyborze. W następnych krokach następuje aktualizacja aktualnego rozwiązania, sprawdzenie czy znaleziona wartość nie jest rozwiązaniem najlepszym wśród dotychczas osiągniętych. Na końcu następuje uaktualnienie tablicy tabu. Cykl ten jest powtarzany dopóki nie zostanie spełniony jeden z warunków zakończenia algorytmu. begin Wyznaczenie wartości początkowej X; X min := X; T := null; {T zbiór rozwiązań objętych tabu } while not warunek_zatrzymania do Utwórz sąsiedztwo N(X) bieżącego rozwiązania; Wybierz najlepsze rozwiązanie y ϵ N(X) \ T; X := Y; if koszt(x) < koszt(x min ) then X min := X; end if; Uaktualnij T; end while; return X min ; end. Kod źródłowy 4: Pseudokod algorytmu przeszukiwania tabu. Dla wyznaczania kolejnych wartości można przeszukiwać całe sąsiedztwo bieżącego rozwiązania, jednak może powodować to zbyt długi czas wykonania algorytmu. Alternatywą dla tego rozwiązania jest wyznaczenie pewnego podzbioru, zwanego listą kandydatów. Jest wiele możliwości do wygenerowania takiej listy, jedną z opcji jest generowanie losowej 27

28 próbki sąsiedztwa. Takie rozwiązanie zmniejsza prawdopodobieństwo występowania cykli, jednak istnieje również ryzyko, że pewne rejony, w których może znajdować się optymalne rozwiązanie, nie zostaną zbadane. Ważnym pojęciem przy metodzie przeszukiwania tabu jest dywersyfikacja. Polega ona na ograniczeniu kombinacji ruchów, które często były wykonywane w przeszłości. Pozwala to na przeniesienie poszukiwania w przestrzenie wcześniej nieodwiedzone. W tym celu wprowadza się czynnik kary do rozwiązań o dużej częstotliwości występowania, który wpływa na ostateczny wynik funkcji celu dla danego problemu. Przykład Do zaprezentowania działania zostaną wykorzystane dane z tabeli 1. Początkowa sekwencja trasy będzie opisana jako A-E-C-D-B-F-A, która ma długość wynoszącą 67,84. Jako tabu została zdefiniowana tablica o rozmiarze 5 x 5, która będzie określała zakaz zamiany miejscami miast na poszczególnych indeksach trasy. Numer 1 został pominięty, ponieważ wierzchołek ten nie ulega zamianom. Czas tabu został ustalony na 3 iteracje. Tablicę tabu prezentuje tabela 7. Nad przekątną główną w tablicy znajdować się będą informacje o zakazach, natomiast poniżej jej zachowana będzie historia wykonanych przekształceń Tabela 7: Tablica tabu. Do przechowywania informacji o najlepszych znalezionych rozwiązaniach z sąsiedztwa stworzona zostanie nowa tablica zawierająca informacje o: zmianach sekwencji na danej trasie, w celu uzyskania lepszego rezultatu, przyroście długości trasy dla poszczególnych sekwencji, wpływie częstotliwości ruchów na jakość rozwiązań. Zmienna ta będzie oznaczona jako z, a c będzie określało częstotliwość ruchów. Wartość ta będzie wyliczana według wzorów: z = 28

29 W przykładzie zostały przedstawione 2 iteracje, a w każdej z nich losowane były 4 wartości z sąsiedztwa bieżącego rozwiązania. Iteracja 1 Przebieg pierwszej iteracji przedstawiony jest w tabeli 8. Spośród czterech wylosowanych możliwości z sąsiedztwa, wybierana jest ta wartość, której współczynnik z jest najmniejszy. Naszą nową wartością jest kombinacja A-E-F-D-B-C-A, o łącznej długości 45,2. Zamiana Rozwiązanie z sąsiedztwa Δ dx Z 2 4 A-D-C-E-B-F-A 74,35 6,51 6, A-E-F-D-B-C-A 45,20-22,64-22, A-E-B-D-C-F-A 65,91-1,93-1, A-E-C-D-E-B-A 61,96-5,88-5,88 Tabela 8: Pomocnicza dane dla przeszukiwania tabu po 1 iteracji. Po wyborze nowego bieżącego rozwiązania uzupełniana jest historia dokonywanych ruchów. Jako, że tabu było ustalone na 3 iteracje, to w miejsce symbolizujące zamianę miejscami pozycji o indeksach 3 i 6 wpisujemy wartość 3. Oznacza to, że przez 3 kolejne iteracje ta zamiana nie będzie możliwa, chyba że okaże się ona lepsza od najlepszego rozwiązania. Pod główną przekątną zapisywana jest informacja o częstotliwości występowania zmian na poszczególnych indeksach w trasie, ponieważ wcześniej nie została odnotowana żadna zamiana to w tabeli dla wartości 3 i 6 wpisywana jest wartość 1. Końcowy rezultat przedstawiony jest w tabeli 9. Iteracja Tabela 9: Historia częstotliwości i ostatnich ruchów po 1 iteracji. W drugiej iteracji ponownie losowane jest sąsiedztwo bieżącego rozwiązania, z którego wybierana jest wartość o najmniejszym współczynniku z. Najkorzystniejszy współczynnik posiada sekwencja A-F-E-D-B-C-A. Przejście 2 3 nie jest objęte zakazem, zatem można przyjąć ten rezultat za nowe bieżące rozwiązanie. Zamiana Rozwiązanie z sąsiedztwa Δ dx Z 2 3 A-F-E-D-B-C-A 56,04 10,84 10, A-B-F-D-E-C-A 68,47 23,27 23, A-E-F-C-B-D-A 60,82 15,62 15, A-E-B-D-F-C-A 61,58 16,38 16,38 Tabela 10: Tabela pomocnicza dla przeszukiwania tabu po 2 iteracji. 29

30 Po wyborze nowej aktualnej wartości, uzupełniana jest tabela z informacjami o zakazach oraz częstotliwościach występowania Tabela 11: Historia częstotliwości i ostatnich ruchów po 2 iteracji. Zakończenie algorytmu następuje, gdy zostanie spełniony jeden z założonych warunków. Najlepszym osiągniętym wynikiem w czasie dwóch iteracji był rezultat 45,2. Dla odpowiednio większej liczby cykli oraz większej badanej przestrzeni ten rezultat mógłby być lepszy, wszystko zależy od przyjętych parametrów algorytmu i oczekiwań jakie mamy wobec otrzymanych wyników. Przy większej liczbie danych mają one bardziej istotne znaczenie i mogą bardziej wpływać na wyniki rezultatów oraz czas wykonania samego algorytmu Wstawianie najbliższego miasta Algorytm charakteryzuje się tym, że do ścieżki jaką ma przebyć komiwojażer, za każdym razem dołączane jest miasto znajdujące się najbliżej od ostatnio dodanego. Zaletami tego rozwiązania jest szybkość znalezienia rozwiązania oraz prostota implementacji. Jednak algorytm ten nie daje zazwyczaj rozwiązań, które mogłyby być satysfakcjonujące. Załóżmy, że mamy rozkład odległości pomiędzy miastami, taki jak został przedstawiony w tabeli 1. Rozpoczynając od węzła A, najbliższym punktem od niego jest miasto E i koszt tego połączenia wynosi 2. Następną najmniejszą wartością dla ostatnio dodanego wierzchołka jest A, ale już zostało to miejsce wykreślone, więc bierzemy następną wartość, czyli miasto D o odległości równej 5,07. Postępując według tego schematu otrzymujemy ścieżkę: A E D C B F A o łącznym koszcie wynoszącym 52, Algorytmy genetyczne Wiele współczesnych rozwiązań bierze swoje inspiracje z mechanizmów działania przyrody. Jednym z tych rozwiązań jest algorytmika. John Henry Holland jako pierwszy zaproponował algorytm genetyczny przypominający zjawisko ewolucji biologicznej [16]. Terminologia wykorzystywana w tej metodzie została zaczerpnięta z genetyki. Algorytm genetyczny polega na przetwarzaniu populacji osobników reprezentujących pewne rozwiązanie określonego problemu. Każdy taki element z grupy rozwiązań nazywany jest 30

31 chromosomem, a poszczególne jego części noszą nazwę genów. Możliwe wartości genów to allele, które są umieszczane na pozycjach zwanych locusami. Do reprezentacji jednego chromosomu najczęściej wykorzystuje się pojedynczego osobnika. Główną ideą tego algorytmu jest wytworzenie osobników potomnych, za pomocą pewnych kombinacji chromosomów osobników rodzicielskich. Powstanie nowego pokolenia jest wynikiem zastosowania operatorów krzyżowania oraz mutacji. Tak jak odbywa się to w świecie przyrody, ważne jest, aby osobniki, które mają być dawcami genów dla kolejnych pokoleń były jak najbardziej dopasowane do wymagań danego problemu i pozwalały na osiągnięcie osobnika, który najlepiej przybliżałby do rozwiązania danego zagadnienia. Pseudokod algorytmu genetycznego [13] prezentuje kod źródłowy 5. begin Utwórz populację początkową; Oceń chromosomy populacji; while not warunek_zatrzymania do Utwórz pulę rodzicielską z populacji bieżącej; Zmień populację stosując operatory krzyżowania i mutacji; Oceń chromosomy nowej populacji; end while; end. Kod źródłowy 5: Pseudokod algorytmu genetycznego. Dla każdego problemu, którego rozwiązanie opierałoby się na algorytmie genetycznym powinny zostać zdefiniowane następujące elementy: reprezentacja danych, sposób generowania początkowej populacji, funkcja oceny, operatory genetyczne: krzyżowanie i mutacja, parametry: rozmiar populacji, prawdopodobieństwo krzyżowania, prawdopodobieństwo mutacji, warunki zatrzymania algorytmu Reprezentacja danych W klasycznym algorytmie genetycznym do przechowywania informacji o osobnikach wykorzystuje się kodowanie binarne, w którym każdy gen ma wartość 0 lub 1, więc chromosom jest ciągiem bitów. Problem komiwojażera polega na znalezieniu odpowiedniej 31

32 permutacji miejsc, które muszą być odwiedzone, dlatego taka reprezentacja wydaje się nie przynosić wymiernych korzyści. Powodowałoby to mało czytelną reprezentację oraz prowadziłoby do powstawania błędnych danych, które wymagałyby naprawy. Zatem w tego typu zagadnieniach najczęściej stosuje się reprezentacje wektorowe [1]. Lista sąsiedztwa W tej reprezentacji trasa jest zakodowana jako lista n miast. Miasto j jest wymienione na pozycji i wtedy i tylko wtedy, gdy trasa prowadzi z miasta i do miasta j. Na przykład wektor ( ) reprezentuje trasę: Metoda ta może prowadzić do niedopuszczalnych tras np.: ( ) zawiera w sobie cykl , a więc rozwiązanie to kończyłoby się przedwczesnym cyklem i nie wszystkie węzły zostałyby odwiedzone. Dla reprezentacji w postaci list sąsiedztwa nie jest możliwe stosowanie krzyżowania przez cięcie i łączenie, bez wprowadzania operatora naprawy, który korygowałby niepoprawne pozycje. Przy tej postaci reprezentowania danych stosuje się operatory rekombinacji. Poszczególne metody to: krzyżowanie przez naprzemienne wybieranie krawędzi, krzyżowanie przez wymianę podtras i krzyżowanie heurystyczne. Krzyżowanie przez naprzemienne wybieranie krawędzi polega na tworzeniu potomka przez wybranie naprzemiennie kolejnych krawędzi z dwójki rodziców. Jeśli kolejna krawędź wprowadza cykl wcześniej kończący trasę to następuje losowanie następnej wartości, która nie powoduje tego typu problemów. Na przykład dla pary rodziców: P 1 = ( ), P 2 = ( ), potomek mógłby wyglądać następująco: O 1 = ( ). W tym przykładzie proces zaczął się od pierwszej krawędzi z rodzica P 1, a jedyną losową krawędzią, która mogła zostać wybrana to (7 6), zamiast (7 8), która wprowadziłaby przedwczesny cykl. Krzyżowanie przez wymianę podtras polega na wyborze podtrasy o losowej długości z jednego rodzica, a następnie z drugiego i tak na przemian. Jeśli jakaś krawędź wprowadza 32

33 cykl wcześniej kończącą trasę to losowana jest inna krawędź spośród jeszcze niewybranych, która nie wprowadza cyklu. Operator krzyżowania heurystycznego polega na wybraniu losowego punktu początkowego trasy dla potomka, a następnie porównuje się dwie krawędzie, które wychodzą z tego miasta w obu rodzicach i wybiera się tę z korzystniejszą wartością i takie działanie prowadzi się, aż do przejścia przez wszystkie wierzchołki. W przypadku, gdy jakaś krawędź wprowadza cykl, to losuje się nową z pozostałych, która nie wprowadza cyklu. Reprezentacja porządkowa Trasa w tym przypadku zakodowana jest jako lista n punktów, przy czym i-ty element listy jest liczbą z zakresu od 1 do n i + 1. Cała koncepcja tej metody polega na pewnej z góry ustalonej, uporządkowanej liście miast C, która służy jako punkt odniesienia dla poszczególnych reprezentacji tras. Załóżmy, że nasza ustalona lista C ma postać: C = ( ). Przykładowa reprezentacja trasy ma postać: L = ( ). Pierwsza na liście L jest 1, co oznacza, że z listy C wybierane jest pierwsze miasto, a następnie jest ono usuwane z listy C. Trasa ma postać: 1. Tymczasowa lista C prezentuje się następująco: ( ). Kolejną liczbą z listy L jest również 1, a więc znowu brany jest pod uwagę pierwszy wierzchołek, który pozostał na liście C i usuwany jest on z kolekcji. Mamy teraz naszą trasę w postaci: 1 2. Lista C składa się teraz z elementów: ( ). Następną liczbą z listy L jest 2, zatem wybierany jest drugi element z bieżącej listy C, który ma wartość 4 i zostaje on wykluczony z listy C. Aktualna trasa prezentuje się następująco: Listę C tworzą elementy: ( ). Kolejnym elementem z listy L jest 1 co odpowiada znowu pierwszemu elementowi z listy C, którym jest 3, więc trasa ma już postać: 33

34 Lista C posiada elementy: ( ). Następna na liście jest 4, co oznacza czwarty element z listy C, a sekwencja trasy jest w postaci: Lista C zawiera elementy: ( ). Kolejnym elementem listy L jest 1, a odpowiada mu wartość 5 z listy C. Sekwencja prezentuje się teraz następująco: W liście C pozostały już trzy elementy: (6 7 9). Następną wartością jest 3, więc kolejnym elementem trasy jest 9 i ma ona teraz postać: W liście C znajdują się już tylko 2 elementy: (6 7). Kolejną wartością w liście L jest 1. Wskazuje ona na element o wartości 6 z kolekcji odniesienia. Sekwencja ma teraz postać: Ostatnim elementem w liście C jest: 7. Końcowym krokiem jest dodanie elementu, który pozostał z listy odniesienia tj. wartości 7. Ostatecznie trasa zawiera elementy: Podsumowując ten przykład, z postaci L = ( ) otrzymano sekwencję: Główną zaletą tej metody jest to, że można w niej korzystać z klasycznego cięcia i łączenia. Przebieg takiego krzyżowania dla dwóch rodziców: P 1 = ( ), P 2 = ( ), gdzie oznacza miejsce przecięcia chromosomu, a postać tras dla tych osobników to odpowiednio: ,

35 Potomstwo jakie otrzymano po krzyżowaniu rodziców P 1 oraz P 2 to: O 1 = ( ), O 2 = ( ). Osobniki te w postaci trasy odpowiadają odpowiednio sekwencją: , Charakterystyczne w tym przykładzie jest to, że jedynie pierwsza część jest dziedziczona po rodzicu, natomiast druga część powstaje w sposób losowy, co jest cechą niepożądaną. Algorytm genetyczny ma za zadanie dziedziczenie dobrych cech i to one powinny być powielane w kolejnych pokoleniach, w celu osiągnięcia optymalnego rozwiązania. Przeszukiwanie w sposób losowy nie jest efektywnym rozwiązaniem dla algorytmów genetycznych. Reprezentacja ścieżkowa Najpopularniejszą i najbardziej naturalną postacią trasy, wykorzystywaną w algorytmach genetycznych, jest reprezentacja ścieżkowa. Przykładowa sekwencja: jest przedstawiana jako ( ). Dla tej reprezentacji najbardziej znane operatory krzyżowania to: krzyżowanie z częściowym odwzorowaniem (PMX), krzyżowanie z zachowaniem porządku (OX), krzyżowanie cykliczne (CX), inwersja Krzyżowanie Do generowania nowych pokoleń wykorzystuje się operatory krzyżowania. Swoją idee czerpią one z procesów rozmnażania organizmów żywych, w których potomek swój materiał genetycznego dziedziczy od rodziców. Dla kodowania binarnego można wyróżnić dwie najprostsze metody: 35

36 Krzyżowanie jednopunktowe, Krzyżowanie dwupunktowe. Pierwsza z nich polega na wylosowaniu punktu k, który jest miejscem przecięcia chromosomów rodzicielskich. Następnie następuje wymiana pomiędzy rodzicami fragmentów znajdujących się przed i za rozcięciem. Następuje krzyżowanie tzn. początkowa część od pierwszego rodzica jest łączona z końcowym fragmentem rodzica drugiego i odwrotnie. W ten sposób powstają dwa osobniki następnego pokolenia. W przypadku krzyżowania dwupunktowego losowane są dwa punkty. Jeden osobnik potomny otrzymuje geny do pierwszego przecięcia i po drugim punkcie wylosowanym od pierwszego rodzica, a wartości znajdujące się pomiędzy rozcięciami brane są od rodzica drugiego. Analogicznie sytuacja wygląda dla drugiego potomka. Najpopularniejszą reprezentacją danych wykorzystywaną w problemie komiwojażera jest reprezentacja ścieżkowa. Poniżej przedstawiono najpopularniejsze operatory krzyżowania dla tego rodzaju danych. PMX Krzyżowanie tym operatorem polega na wybraniu podciągu trasy z jednego rodzica i zachowaniu porządku i pozycji tak wielu miast jak to jest możliwe z drugiego rodzica. Fragment trasy wybiera się na podstawie dwóch wybranych losowo punktów przecięcia, które określają granice operacji zamiany. Na przykład dla rodziców P 1 i P 2, gdzie oznacza miejsce przecięcia: P 1 = ( ), P 2 = ( ). Kolejne pokolenie będzie utworzone w następujący sposób, na początku wymianie ulegną segmenty pomiędzy punktami rozcięcia, gdzie x oznacza nieznany stan: O 1 = (x x x x x), O 2 = (x x x x x). Na tej podstawie możemy określić ciąg odwzorowań: 1 4, 8 5, 7 6, 6 7. (1.4) 36

37 Kolejnym krokiem jest wstawianie dodatkowych miast z pierwotnych rodziców, które nie powodują konfliktów: O 1 = (x x 9), O 2 = (x x ). Następnie dla wartości, które powodowały konflikty stosuje się ciągi odwzorowań i np. dla potomka O 1, gdzie dla pierwszej wartości pierwotnie powinna być 1, należy w to miejsce wstawić 4, według ciągu z punktu 1.4, ponieważ 1 jest wartością niedozwoloną. Po analogicznym uzupełnieniu wszystkich pól chromosomów otrzymujemy ostatecznie osobniki: O 1 = ( ), O 2 = ( ). Główną zaletą operatora PMX jest wykorzystywanie podobieństwa w uporządkowaniu, co może wpływać na jakość otrzymywanych wyników. OX Potomstwo tworzone za pomocą tego operatora składa się z podciągu jednego z rodziców, natomiast z drugiego kopiowane są po kolei wszystkie wartości począwszy od drugiego cięcia, które nie występują we wcześniej wybranym podciągu, w takim przypadku pomija się dane miasto i przechodzi do kolejnej wartości. Mając dwóch rodziców: P 1 = ( ),, P 2 = ( ), w których dokonujemy wymiany podciągów pomiędzy wcześniej wylosowanymi punktami: O 1 = (x x x x x), O 2 = (x x x x x). Biorąc pod uwagę osobnika O 1, mamy z drugiego rodzica następujący ciąg miast licząc od 2 przecięcia: Po usunięciu wartości występujących w podciągu otrzymujemy listę: 37

38 Według tego ciąg uzupełniane są pola zaczynając od drugiego punktu w chromosomie. Ostatecznie potomek O 1 ma postać: O 1 = ( ). W analogiczny sposób otrzymujemy drugiego osobnika: O 2 = ( ). CX Operator ten polega na losowym wyborze kilku pozycji w chromosomie, a następnie kolejność miast na wybranych pozycjach jest narzucana odpowiednim wartościom w drugim rodzicu. Załóżmy, że mamy dwóch rodziców: P 1 = ( ), P 2 = ( ), a wylosowanymi punktami są pozycje 3, 4, 6 i 9 Uporządkowanie miast na tych pozycjach w rodzicu P 2 zostanie narzucone rodzicowi P 1. Miasta na tych pozycja u drugiego rodzica to : 2, 8, 6 i 5. U osobnika P 1 te wartości występują na pozycjach 2, 5, 6 i 8. W potomku elementy na tych pozycjach są tak przestawiane, żeby zgadzały się co do kolejności z tymi samymi elementami z P 2. Pierwszy potomek to kopia P 1, na wszystkich pozycjach oprócz 2,5, 6 i 8: O 1 = (1 x 3 4 x x 7 x 9). Pozostałe elementy są uzupełniane według kolejności, w której występują u drugiego z rodziców, tzn. 2, 8, 6, 5, ostatecznie otrzymujemy: O 1 = ( ). Analogicznie otrzymuje się drugiego potomka: O 2 = ( ). Inwersja Operator inwersji polega na wyborze dwóch losowych punktów, które wyznaczają podciąg. Następnie na wybranym fragmencie dokonuje się odwrócenia kolejności całej listy 38

39 wybranych punktów. Operator ten działa na jednym rodzicu. Załóżmy, że mamy rodzica, gdzie oznacza miejsce przecięcia: P = ( ). Po zastosowaniu tego operatora otrzymamy następującego osobnika: P = ( ) Mutacje Mutacja tworzy innowacje poprzez wprowadzanie nowego materiału genetycznego do populacji. Tak jak odbywa się to w świecie organizmów żywych prawdopodobieństwo wystąpienia mutacji powinno być bardzo małe. W przypadku problemu komiwojażera mutacja może polegać na wylosowaniu dwóch punktów z danego osobnika, a następnie na zamienieniu pozycjami miast z tych pól o wygenerowanych indeksach Selekcja Mechanizm selekcji ma za zadanie wybór rozwiązań rodzicielskich, które będą brały udział w procesie krzyżowania. Pożądane jest, aby rozwiązania lepiej dostosowane do danego problemu, miały większe prawdopodobieństwo wystąpienia przy reprodukcji kolejnych pokoleń. W klasycznym algorytmie genetycznym stosuje się selekcję proporcjonalną, opartą na metodzie ruletki. Polega ona na tym, że każdy osobnik x z populacji bieżącej ma przypisane prawdopodobieństwo reprodukcji p x według wzoru: p x =, gdzie jest wynikiem funkcji oceny danego chromosomu. Szansa na wylosowanie danego osobnika jest więc proporcjonalna do funkcji przystosowania. Następnie losuje się wartość z przedziału <0, 1), która określa odpowiedniego osobnika z populacji. Innym rodzajem tego procesu jest selekcja rangowa. Polega ona na uporządkowaniu całej populacji według nierosnących wartości funkcji oceny, a następnie przypisaniu każdemu osobnikowi numeru zwanego rangą. Numerację zaczynamy od 0 i dla każdego następnego osobnika jest ona zwiększana o jeden. Prawdopodobieństwo jest określane na podstawie rangi chromosomu, według wcześniej przyjętego wzoru. Często stosuje się funkcję liniową określoną wzorem: 39

40 p x = a + k, gdzie a i k są parametrami. W metodzie tej nie występuje konieczność skalowania funkcji przystosowania. Inną metodą jest selekcja turniejowa, polega ona na wyborze k osobników z bieżącej populacji, gdzie k jest rozmiarem turnieju. Wybór ten może odbywać się zarówno z powtórzeniami, jak i bez powtórzeń. Spośród wszystkich osobników wylosowanych w turnieju wygrywają te z najlepszą wartością funkcji przystosowania. Może to być zarówno jeden osobnik, jak również cała ich grupa. Zależy to od przyjętych założeń, można z góry określić np. liczbę rund dostępnych w ramach turnieju Warunki zatrzymania Istnieje kilka warunków, które mogą spowodować zakończenie wykonywania algorytmu. Może to być: znalezienie rozwiązania spełniającego warunki zadania, wykonanie założonej liczby iteracji lub przekroczenie określonego czasu wykonania, nieznalezienie osobników o lepszej wartości funkcji przystosowania przez określoną liczbę iteracji Analiza algorytmów komiwojażera Z przedstawionych wcześniej algorytmów do analizy wybrano pięć: wyszukiwanie lokalne w wersji stromej oraz zachłannej, symulowane wyżarzanie, algorytm genetyczny i algorytm siłowy. W przypadku algorytmów genetycznych użyto czterech rodzajów krzyżowania: PMX, OX, CX oraz inwersji, a do mechanizmu selekcji wykorzystano metodę ruletki oraz metodę turniejową. Testy przeprowadzono na sprzęcie komputerowym z zainstalowanym systemem operacyjnym Windows 7 32 bit. Procesor jaki był wykorzystany przy badaniach to Intel Core 2 Duo o taktowaniu 2.0 GHz, a pamięć RAM miała pojemność 3 GB. Jako pierwszy algorytm wybrano do analizy symulowane wyżarzanie. Wynik jego działania w dużej mierze zależy od ustalonej temperatury początkowej. Wartość tego parametru jest z kolei uzależniona od przyjętego prawdopodobieństwa gorszego rozwiązania pierwszej iteracji algorytmu. W ramach badań sprawdzono w jaki sposób zmiana tego parametru wpływa na otrzymywane wartości. Wzór do wyliczenia tej wartości ma postać: t 0 =, gdzie: 40

41 t 0 temperatura początkowa, - średnia wartości pogorszenia rozwiązania, prawdopodobieństwo przyjęcia gorszego rozwiązania pierwszej iteracji. Na wykresie 1 przedstawione są rezultaty dotyczące wyników badań, dotyczących zależności między długością danej trasy, a wartością prawdopodobieństwa. 5 tys. km 5 tys. km 4 tys. km 4 tys. km 3 tys. km 3 tys. km Prawdopodobieństwo 0,1 Prawdopodobieństwo 0,3 Prawdopodobieństwo 0,6 Prawdopodobieństwo 0,9 2 tys. km 2 tys. km 1 tys. km 1 tys. km 0 tys. km [liczba miast] Wykres 1: Zależność długości trasy od wybranego prawdopodobieństwa (symulowane wyżarzanie). Jak widać trudno doszukać się jakiejś zależności. Wszystko zależy od punktu startowego oraz akceptacji gorszych rozwiązań. W ten sposób dochodzimy do optymalnego rozwiązania w danej grupie rezultatów. Drugim kryterium jest czas wykonania algorytmu i tutaj już można zauważyć pewną tendencję, że wraz ze wzrostem współczynnika prawdopodobieństwa, liczba akceptacji gorszego rozwiązania jest większa. Co powoduje, że czas wykonywania algorytmu jest coraz dłuższy (Wykres 2). 41

42 [hh:mm:ss] 0:11:31 0:10:05 0:08:38 0:07:12 0:05:46 0:04:19 Prawdopodobieństwo 0,1 Prawdopodobieństwo 0,3 Prawdopodobieństwo 0,6 0:02:53 0:01:26 0:00:00 [liczba miast] Wykres 2: Zależność długości trasy od czasu wykonania algorytmu (symulowane wyżarzanie). W zależności od liczby miejsc, dla których chcemy rozwiązać problem komiwojażera, różne wartości przyjmują raz lepsze, a raz gorsze wyniki. Dlatego warto zwrócić uwagę na czas wykonania algorytmu i przyjąć parametr z zakresu 0,1 0,3, co pozwoli zmniejszyć czas obliczeń. Algorytm genetyczny był drugim, który został poddany analizie Na początku przetestowano jaki stosunek liczby populacji do liczby pokoleń daje najkorzystniejsze wyniki, zwracając uwagę przy tym na czas wykonania obliczeń. Wybrano trzy warianty: populacja , liczba pokoleń 30, populacja 1 000, liczba pokoleń 1000, populacja 200, liczba pokoleń Wartość mutacji dla każdego badania ustalono na poziomie 4%. Wszystkie badania były wykonane dla czterech rodzajów krzyżowań, co również miało pomóc w określeniu, która z opcji wymiany informacji o trasie daje najlepsze wyniki. Porównując wykresy 3 6 można zauważyć, że kombinacja parametrów zawierająca 1000 populacji oraz 1000 pokoleń najczęściej dawała najkorzystniejsze rezultaty. Oczywiście można zwiększać te dwie wartości, ale wiąże się to również ze znacznym wzrostem czasu obliczeń. 42

43 PMX 4,0 tys. km 3,5 tys. km 3,0 tys. km 2,5 tys. km Populacja: Pokolenia: 30 Populacja: 1000 Pokolenia: 1000 Populacja: 200 Pokolenia: ,0 tys. km 1,5 tys. km [liczba miast] Wykres 3: Zależność liczby miast od długości trasy dla algorytmu genetycznego (PMX). 4,5 tys. km OX 4,0 tys. km 3,5 tys. km 3,0 tys. km 2,5 tys. km Populacja: Pokolenia: 30 Populacja: 1000 Pokolenia: 1000 Populacja: 200 Pokolenia: ,0 tys. km 1,5 tys. km [liczba miast] Wykres 4: Zależność liczby miast od długości trasy dla algorytmu genetycznego (OX). 43

44 CX 4,5 tys. km 4,0 tys. km 3,5 tys. km 3,0 tys. km 2,5 tys. km Populacja: Pokolenia: 30 Populacja: 1000 Pokolenia: 1000 Populacja: 200 Pokolenia: ,0 tys. km 1,5 tys. km [liczba miast] Wykres 5: Zależność liczby miast od długości trasy dla algorytmu genetycznego (CX). 4,5 tys. km Inwersja 4,0 tys. km 3,5 tys. km 3,0 tys. km 2,5 tys. km Populacja: Pokolenia: 30 Populacja: 1000 Pokolenia: 1000 Populacja: 200 Pokolenia: ,0 tys. km 1,5 tys. km [liczba miast] Wykres 6: Zależność liczby miast od długości trasy dla algorytmu genetycznego (Inwersja). Czas trwania obliczeń dla poszczególnych wariantów dotyczących liczby populacji i pokoleń został przedstawiony na wykresie 7. Krzyżowanie użyte w tym badaniu to PMX. 44

45 [hh:mm:ss] 00:05:02 00:04:19 00:03:36 00:02:53 00:02:10 00:01:26 Populacja: Pokolenia: 30 Populacja: 1000 Pokolenia: 1000 Populacja: 200 Pokolenia: :00:43 00:00: [liczba miast] Wykres 7: Zależność liczby miast od czasu wykonania dla poszczególnych wartości parametrów (PMX). Znaczącym parametrem jest rozmiar populacji, który w dużym stopniu wpływa na czas wykonania algorytmu. Przy liczbie osobników i zaledwie 30 pokoleniach, czas trwania jest prawie 2,5 razy dłuższy niż w przypadku populacji wynoszącej 200, a wartości pokoleń wynoszącej Jeżeli chodzi o wybór selekcji to metoda turniejowa wypada dużo korzystniej ze względu na krótszy czas wykonania. W metodzie ruletkowej duża część obliczeń spowodowana jest wyliczeniem prawdopodobieństw dla poszczególnych osobników, co powoduje, że taki algorytm wykonuje się kilkukrotnie dłużej (Wykres 8). Testy zostały przeprowadzone dla wartości osobników oraz pokoleń równych Do krzyżowania została użyta metoda PMX. 45

46 [hh:mm:ss] 00:03:36 00:02:53 00:02:10 Metoda ruletki Metoda turniejowa 00:01:26 00:00:43 00:00: Wykres 8: Porównanie czasów wykonania algorytmów dla metody turniejowej oraz ruletkowej. Na wykresie 9 zostały zaprezentowane wyniki badań długości trasy w zależności od zastosowanego rodzaju krzyżowania dla algorytmu genetycznego. Jak widać wszystkie te metody dają zbliżone wartości. Dla większej liczby punktów do zbadania można zauważyć, że operator PMX oraz inwersja, dają odrobinę lepsze wyniki. [liczba miast] [km] PMX OX CX Inwersja Wykres 9: Porównanie metod krzyżowania algorytmu genetycznego. [liczba 46

47 [km] Symolowane wyżarzanie Alg. lok. stromy Algorytm zachłanny Alg. genetyczny [liczba miast] Wykres 10: Porównanie algorytmów problemu komiwojażera. Na wykresie 10 zostały porównane cztery algorytmy: symulowane wyżarzanie, algorytm lokalny stromy, algorytm lokalny zachłanny oraz algorytm genetyczny. Jak można zauważyć zdecydowanie najlepsze wyniki otrzymujemy stosując algorytm symulowanego wyżarzania. Porównując algorytmy lokalne widać, że wersja stroma pozwala na otrzymanie korzystniejszych wyników od wersji zachłannej w większości przypadków. Najgorsze wyniki otrzymujemy korzystając z algorytmów genetycznych. W dużej mierze ich rezultat zależy od przyjętych parametrów, a dokładnie zwiększenia populacji oraz liczby pokoleń. Wpływa to niestety w znacznym stopniu na czas wykonywania algorytmu. Dla określonych parametrów algorytmu genetycznego otrzymujemy zbliżone wyniki bez względu na wybór operatora krzyżowania czy metody selekcji. Jeżeli chodzi o metody selekcji to w modelu turniejowym osobniki danego pokolenia otrzymywane są dużo szybciej, jednak po przeprowadzeniu testów, zauważono, że przy dużej liczbie pokoleń, rzędu kilkuset, spada różnorodność genotypu populacji. Skutkuje to brakiem możliwości tworzenia nowych osobników, które mogłyby zawierać lepsze rozwiązania. Do implementacji algorytmu genetycznego użyto krzyżowania dwupunktowego. Miejsca przecięcia chromosomów były generowane losowo, 47

48 co również spowodowało, że ciężej było przekazać kolejnym pokoleniom dobre cechy ich potomków. [hh:mm:ss] 00:10:05 00:08:38 00:07:12 00:05:46 00:04:19 Symulowane wyżarzanie Alg. lok. stromy Algorytm zachłanny Alg. genetyczny 00:02:53 00:01:26 00:00: [liczba miast] Wykres 11: Porównanie czasów wykonania algorytmów problemu komiwojażera. Wykres 11 przedstawia zależności czasowe pomiędzy poszczególnymi algorytmami problemu komiwojażera. Symulowane wyżarzanie, które daje najlepsze rozwiązania, wykonuje się najdłużej. Czas wykonania tego algorytmu nie jest jednak na tyle długi, aby to rozwiązanie zostało niezaakceptowane. Korzystając z algorytmu lokalnego zachłannego, jesteśmy w stanie otrzymać wynik odbiegający znacznie od rozwiązania optymalnego, ale czas wykonania algorytmu jest w granicach kilku sekund. Dla stu elementów czas działania tej metody wyniósł zaledwie 7 sekund. W przypadku algorytmu genetycznego czas wykonania zależy od parametrów. Dla wybranych wartości populacji i pokoleń algorytm osiągał słabe rezultaty, a czas trwania obliczeń był stosunkowo długi w porównaniu z algorytmami lokalnymi, które dają lepsze rozwiązania. Porównując algorytmy lokalne widać, że wersja stroma wykonuje się wolniej, ale jednocześnie zwraca ona lepsze wyniki. Na rysunkach 1-4 przedstawione zostały trasy wyznaczone przy użyciu różnych algorytmów. Dla każdego algorytmu lista miejsc była stała i zawierała 48 miejsc, które kurier powinien odwiedzić. Na rysunku 1 przedstawiony został rezultat dla algorytmu symulowanego wyżarzania. Widać, że trasa wyznaczona za pomocą tego rozwiązania jest bliska optymalnemu rozwiązaniu. Występuje mało przecięć się ścieżek i można zauważyć, że kurier w przypadku takiej trasy, nie byłby zmuszony do przyjechania zbyt dużej liczby zbędnych kilometrów. Długość trasy w tym przypadku wyniosła 3291,25 km. 48

49 Rysunek 1: Przykładowa trasa wyznaczona przy użyciu symulowanego wyżarzania. Rysunki 2 i 3 przedstawiają trasy wyznaczone przy użyciu algorytmów lokalnych: zachłannego oraz stromego. W tych rozwiązaniach widać, że trasa krzyżuje się w wielu miejscach, co już wskazuje, że rozwiązanie to jest dalekie od ideału i kurier musi przebyć wiele zbędnych kilometrów. Odpowiednio dystanse dla algorytmu zachłannego i stromego wynoszą 5009,09 km i 5225,91 km. Rysunek 2: Przykładowa trasa wyznaczona przy użyciu algorytmu lokalnego zachłannego. 49

50 Rysunek 3: Przykładowa trasa wyznaczona przy użyciu algorytmu lokalnego stromego. Rysunek 4 prezentuje wyniki działania algorytmu genetycznego. Trasa przypomina swoim wyglądem pajęczynę i jest ona daleka od optymalnego rozwiązania. Długość trasy dla tego algorytmu jest prawie dwukrotnie większa od trasy wyznaczonej przez algorytmy lokalne. Porównując ją do wyniku osiągniętego przy pomocy symulowanego wyżarzania osiągnęła ona ponad trzykrotnie gorszy wynik. Długość dla algorytmu genetycznego wyniosła 11335,39 km. 50

51 Rysunek 4: Przykładowa trasa wyznaczona przy użyciu algorytmu genetycznego. Z wybranych algorytmów najlepszy do zastosowania dla firmy kurierskiej okazał się algorytm symulowanego wyżarzania. Jak przedstawia wykres 10 daje on najkorzystniejsze rezultaty. Czas wykonania algorytmu dla 100 miejsc wyniósł 9 minut i 1 sekundę. Jest to czas, który jest akceptowalny do tego typu rozwiązań. Długość trasy dla symulowanego wyżarzania dla tej liczby punktów wyniosła 4252,66 km. Dla porównania odległość, którą musiałby przebyć kurier, korzystając z algorytmu lokalnego stromego wyniosłaby 7067,86 km. Rezultat ten znacznie odbiega od wyniku osiągniętego za pomocą symulowanego wyżarzania, a czas obliczeń wyniósł minutę i 42 sekundy. Algorytm zachłanny dla tych adresów zwrócił prawie dwukrotnie gorsze rozwiązanie, a dystans do przebycia przez kuriera wyniósł 8252,40 km. W przypadku tej metody dużą zaletą okazał się czas wykonywania algorytmu, dla 100 punktów potrzebował on zaledwie 7 sekund. Spośród badanych algorytmów najgorsze wyniki osiągnięto korzystając z algorytmów genetycznych. Dla 100 współrzędnych metoda ta wskazała trasę, której łączna długość wyniosła 22487,76 km. Do wyznaczenia tego rozwiązania algorytm potrzebował 5 minut i 35 sekund. Algorytm genetyczny dla 10 punktów osiągnął lepszy rezultat od algorytmu zachłannego. Jego wynik dla tej liczby miejsc wyniósł 1903,75 km, natomiast rozwiązanie lokalne zwróciło wartość 1935,77 km. Algorytmy symulowanego wyżarzania i algorytm lokalny w wersji stromej zwróciły wynik 1730,02 km, który jest wartością optymalną. Ten wynik zwrócił również algorytm siłowy, a czas obliczeń trwał 5 minut i 23 sekundy. Algorytmem siłowym 51

52 była również sprawdzana trasa dla 15 wybranych punktów, jednak w trakcie obliczeń po ponad 24 godzinach obliczenia zostały przerwane, a algorytm wskazywał rozwiązanie o długości 2183,42 km. Dla tych samych adresów algorytm symulowanego wyżarzania wyznaczył trasę o łącznej długości 1910,72 km w czasie 7 sekund. Algorytmy lokalne w wersji stromej i zachłannej osiągnęły odpowiednio wartości 2069,47 i 2068,25 km. Algorytmy te potrzebowały poniżej sekundy na zwrócenie tych rezultatów, a osiągnęły one wartości lepsze niż algorytm siłowy po ponad 24 godzinach obliczeń. Najlepszym wynikiem osiągniętym przy pomocy algorytmu genetycznego dla 15 miast była wartość wynosząca 2373,83 km. Uzyskano ją stosując krzyżowanie CX, a czas obliczeń wyniósł minutę. Wszystkie testowane algorytmy zostały zaimplementowane w ramach aplikacji. W końcowej wersji przeznaczonej dla użytkownika, do wyznaczania tras pomiędzy miejscami, został wykorzystany algorytm symulowanego wyżarzania. 52

53 3. Wybrane narzędzia Na rynku dostępnych jest wiele technologii służących i pomagających w tworzeniu serwisów internetowych, można je dobierać według własnych potrzeb, upodobań oraz możliwości danej technologii. W tym punkcie przybliżone zostaną narzędzia, które pomogły w stworzeniu aplikacji Wzorzec projektowy MVC Wzorzec projektowy MVC (Model-View-Controller) służy do tworzenia nowoczesnych systemów informatycznych. Jego głównym celem jest podział aplikacji na trzy niezależne moduły: Model Model danych odpowiada za tzw. logikę biznesową. Odnosi się do sposobu w jaki aplikacja przechowuje oraz przetwarza dane. View Widok jest odpowiedzialny za prezentację danych w obrębie graficznego interfejsu użytkownika. Może składać się z powidoków odpowiedzialnych za mniejsze części interfejsu. Controller Zadaniem kontrolera jest odbiór, przetworzenie oraz analiza danych wejściowych od użytkownika. Odpowiada za powiązania między zdarzeniami, które zachodzą w systemie, a na ich podstawie aktualizuje dane modelu oraz wyświetla odpowiednie widoki. Podział ten służy uporządkowaniu architektury systemu. Pozwala to na oddzielenie od siebie każdej logicznej części aplikacji, dzięki temu zmiana w jednym miejscu nie wymusza lawinowej ilości zmian w innych miejscach systemu [17] ASP.NET Platforma ASP.NET to zbiór technologii zaprojektowanych przez firmę Microsoft. Przeznaczona jest do tworzenia aplikacji internetowych, a także aplikacji typu XML Web Services. Jest to obecnie jedna z najszybszych, najefektowniejszych, najbardziej stabilnych i najlepiej wspieranych technologii. Dzięki narzędziom firmy Microsoft pozwala na łatwe tworzenie witryn internetowych. Każda kolejna wersja platformy ASP.NET jest wydajniejsza i ulega optymalizacji, co usprawnia proces implementacji. Strony ASP.NET są uruchamiane przy użyciu serwera, który umożliwia wygenerowanie treści HTML(CSS), WML lub XML rozpoznawanych oraz interpretowanych przez przeglądarki internetowe. ASP.NET jest wspierany przez separujący warstwę logiki od warstwy prezentacji, wątkowo-kierowany 53

54 model programistyczny, co poprawia wydajność działania tworzonych aplikacji. Logika stron ASP.NET oraz XML Web Services jest tworzona w językach Microsoft Visual Basic.NET, Microsoft Visual C#.NET lub w każdym innym języku wspierającym technologię Microsoft.NET Framework [18, 19] ASP.NET MVC Framework ASP.NET MVC jest alternatywą dla ASP.NET Web Forms, charakteryzuje się on innym podejściem do tworzenia projektu. Oparty jest na wzorcu MVC co zapewnia odizolowanie poszczególnych warstw systemu. Dzięki niemu cały projekt staje się bardziej przejrzysty oraz prostszy w rozbudowie. Dzięki dużemu wsparciu dla tej struktury, dostępnych jest wiele mechanizmów, z pomocą których tworzenie aplikacji staje się prostsze i szybsze np. do generowania widoków mamy dostępnych kilka szablonów, które w znacznym stopniu przyśpieszają tworzenie stron internetowych. Dużą zaletą jest też wsparcie dla jednostek testowych, a sama idea tego wzorca wydaje się bliższa internetowym aplikacjom SQL Server 2008 Microsoft SQL Server 2008 (MS SQL) to system zarządzania bazą danych. Jest to platforma służąca do zarządzania i analizy danych, oferująca przedsiębiorstwom i instytucjom publicznym bezpieczeństwo zasobów informacyjnych w połączeniu z wygodą i niskimi kosztami zarządzania danymi. Dla aplikacji transakcyjnych, analitycznych, raportowych i integracyjnych platforma posiada specjalny zestaw narzędzi dla programistów [20]. Wśród najważniejszych cech SQL Server 2008 warto podkreślić: najwyższe bezpieczeństwo danych, przewidywalna wydajność, zarządzanie oparte na regułach, wyjątkowo szybki rozwój aplikacji, łączność sporadyczna, repozytorium dla dowolnych danych, wydajne i skalowalne usługi analityczne, skalowalność raportowania. 54

55 3.4. ADO.NET Entity Framework Microsoft ADO.NET Entity Framework to biblioteka i zestaw narzędzi mapowania obiektowo-relacyjnego (ang. object-relational mapping). Jego zadaniem jest dwustronne przekształcanie danych relacyjnych na obiekty. Jest w stanie modelować w obiektowych językach programowania dane pochodzące z relacyjnych baz danych. Entity Framework to jedno z wielu narzędzi tego typu przeznaczonych dla.net Framework [21] LINQ Language INtegrated Query (LINQ) jest to technologia firmy Microsoft będąca elementem platformy.net. Technologia LINQ pozwala na zadawanie zapytań do obiektów. Składania języka jest prosta i przypomina SQL. LINQ stanowi warstwę abstrakcji nad różnymi źródłami danych. Baza danych i jej elementy traktowane są jak obiekty. Przestrzenie, które obsługuje LINQ to: obiekty implementujących interfejs IEnumerable<T>, bazy danych, język XML. LINQ posiada pełne wsparcie dla transakcji, widoków, procedur przechowanych. Zapytanie zwraca kolekcję z przestrzeni nazw typów ogólnych. Kolekcja ta może być modyfikowana, a następnie zwrócona do źródła. Dzięki temu zachowywana jest pełna kontrola typów danych i ich konwersji w poszczególnych mechanizmach pośredniczących w pobieraniu danych JQuery JQuery jest biblioteką programistyczną dla języka JavaScript, ułatwiającą korzystanie z niego. Kosztem niewielkiego spadku wydajności w stosunku do profesjonalnie napisanego kodu w niewspomaganym JavaScript cie pozwala osiągnąć interesujące efekty animacji, dodać dynamiczne zmiany strony, wykonać zapytania AJAX. Większość wtyczek i skryptów opartych na jquery działa na stronach nie wymagając zmian w kodzie HTML. Wszystkie efekty osiągnięte z pomocą jquery można osiągnąć również bez jej użycia. Jednak kod okazuje się nieporównywalnie dłuższy i bardziej skomplikowany Serwisy internetowe udostępniające mapy geograficzne Wraz z rozwojem Internetu wzrasta zapotrzebowanie na nowe usługi. Największe firmy branży informatycznej starają się wprowadzać coraz to nowsze rozwiązania 55

56 i usprawnienia, które ułatwiłyby pracę przy tworzeniu oprogramowania, a dla przeciętnego użytkownika udostępniane są coraz to większe możliwości. Jedną z takich dziedzin, które zostały w ostatnim czasie rozwinięte są serwisy internetowe, pozwalające na udostępnianie map. Początkowo były one jedynie prezentowane na stronach dostawców i służyły do wyszukiwania adresów oraz prostych tras. Z biegiem czasu korporacje stworzyły do tych map własne, ogólnodostępne interfejsy programistyczne. Każdy mógł już na swojej stronie umieścić mapę. Do wiodących głównych dostawców map internetowych należą: Google Maps, Yahoo Maps, Bing Maps oraz MapQuest. Istnieje również projekt społeczności internetowej, który ma na celu stworzenie darmowej, edytowalnej i ogólnodostępnej mapy całej Ziemi. Projekt ten nosi nazwę OpenStreetMap. Mapy te są udostępniane jako mushup (internetowa aplikacja hybrydowa). Jest to strona internetowa, która łączy w sobie aplikacje internetowe z różnych źródeł [22]. Strony typu mashup umożliwiają wykorzystanie istniejących aplikacji w nowej, często bardzo innowacyjnej formie. Korzystając więc z publicznie dostępnych interfejsów API można w bardzo krótkim czasie stworzyć swoją własną, spersonalizowaną stronę WWW Google Maps Google Maps jest nowoczesną i zaawansowaną usługą, oferującą pierwotnie przeglądanie map wyłącznie w serwisie maps.google.com. Z biegiem czasu firma Google wypuściła na rynek pierwszą wersję API, która pozwalała na umieszczenie mapy na dowolnej stronie internetowej. W chwili obecnej mamy dostęp do Google Maps API w wersji stabilnej trzeciej oraz, już nierozwijanej, wersji drugiej. Pod względem możliwości znacznie przewyższa swoją pierwszą wersję, a mimo to jej obsługa jest bardzo prosta. Proste aplikacje to kwestia zaledwie paru linijek kodu. Mechanizmy obsługujące mapę znajdują się po stronie Google, przez co autor mapy nie musi się o nie w ogóle troszczyć. Serwis ten daje możliwość wyszukiwania obiektów, oglądania map i zdjęć satelitarnych powierzchni Ziemi oraz udostępnia wiele pomocnych funkcji. Usług ta jest bezpłatna dla niekomercyjnych użytkowników, jednak w przypadku wielkich serwisów oraz zastosowań komercyjnych wymagane jest wykupienie wersji rozszerzonej [23]. 56

57 Rysunek 5: Google Maps z przykładowym wyświetlonym miejscem. Wygodną funkcją wykorzystaną przez Google jest geokodowanie adresów. Polega ona na tym, że adresy wpisane w języku naturalnym są konwertowane na współrzędne mapy. Usługa ta działa m.in. dla USA, Kanady i większości krajów europejskich. Jest również możliwe wyszukiwanie miejsc po współrzędnych geograficznych. Wyszukiwanie tras pomiędzy kilkoma punktami rozbudowane jest o wiele opcji, do nich zaliczyć możemy m.in.: wyliczanie przybliżonego czasu podróży, dodawanie punktów pośrednich, modyfikację wyświetlonej trasy poprzez przesuniecie punktów składowych na mapie, wyznaczenie macierzy odległości między punktami, wyświetlanie wskazówek dojazdu dotyczących wyznaczonej trasy. Google Maps jest najchętniej wykorzystywaną mapą na rynku. Duży wpływ na to bez wątpienia ma regulamin dotyczący korzystania z tej usługi, który jest najbardziej przyjazny dla programistów i daje im szerokie pole do popisu. Regulamin Google Maps API dotyczy wielu różnych zagadnień, z których najistotniejsze podpunkty przedstawiono poniżej. 57

58 Rejestracja Serwis lub aplikacja, która korzysta z map Google musi być zarejestrowana w Google i mieć wygenerowany swój unikatowy klucz dostępu do usługi. Zgodność z prawem Serwis, na którym umieszczone są mapy Google, nie może nieść treści niezgodnych z prawem, namawiać do łamania prawa, prywatności, ani propagować treści uznanych przez Google za niemoralne i nieobyczajne. Ogólnodostępność Serwis, który korzysta z map Google musi być darmowy i dostępny dla każdego użytkownika. Możemy jednak korzystać z map Google za darmo tak długo, jak nie będziemy pobierać od użytkowników opłat za korzystanie z niego. Nasz serwis może wymagać logowania do usługi, jeśli konieczne jest to ze względu na administrowanie danymi użytkownika i serwisem i jeśli otrzymanie hasła, utrzymanie konta, itp., nie wiąże się z jakąkolwiek opłatą pobieraną przez nas od użytkownika. Nie można korzystać z map Google w wewnętrznej sieci, ze względu na niedotrzymanie warunku ogólnodostępności. Nie możemy korzystać z map Google, jeśli serwis będzie dostępny tylko i wyłącznie dla użytkowników, którzy muszą zapłacić za dostęp do usługi. Google dopuszcza pobieranie przez nas opłat od użytkowników za dodawanie miejsc do pokazywania na mapie, o ile pokazywać je będziemy innym w darmowej części naszego serwisu. Ograniczenia te można znieść kupując pakiet Google Maps for Business. Ograniczenia liczby odsłon Od 1 stycznia 2012 roku wprowadzone zostały ograniczenia na liczbę wyświetleń mapy. Limity te nie są specjalnie drastyczne, ale mogą dotknąć sporą grupę serwisów. Za darmo możemy wyświetlić 25 tysięcy map dziennie dla każdego z dostępnych API (czyli JS Maps API v3, JS Maps API v2, Static Maps API i Street View Image API). Przekroczenie tych limitów spowoduje konieczność dopłacenia za każdy dodatkowy tysiąc wyświetleń zgodnie z cennikiem. Ceny wahają się od 4 do 10 dolarów. Serwisy z dużym ruchem mogą również wykupić licencję Maps API for Business, jednak jest ona dość droga, według oficjalnej strony Google ceny zaczynają się od 10 tysięcy dolarów rocznie. 58

59 Reklamy na mapach i w serwisie Google nie umieszcza w tej chwili reklam na swoich mapach. Pozostawili jednak sobie taką możliwość w przyszłości. Jeśli będą zamierzali wprowadzić reklamy, na 3 miesiące przed ich umieszczeniem zostanie opublikowane odpowiednie ogłoszenie na liście mailowej Google. Co więcej Google zezwala na to, abyśmy my sami umieszczali reklamy na naszych mapach za pomocą wielu metod opisanych w API, włącznie z reklamami AdSense. Możemy także umieszczać reklamy na naszym serwisie i zarabiać na nich o ile nasz serwis jest ogólnodostępny i darmowy. Śledzenie użytkowników w czasie rzeczywistym Google nie nakłada żadnych ograniczeń w tej kwestii. Możemy budować serwisy pokazujące aktualną pozycję użytkownika na mapie. Nie możemy jednak wykorzystywać serwisu do nawigacji w czasie rzeczywistym poprzez wyświetlanie sposobu dojazdu do danego określonego miejsca albo do automatycznego kierowania pojazdami na podstawie ich pozycji na mapie. Jeśli nasze mapy wyświetlają informacje o pozycji użytkownika, musimy powiadomić o tym Google, ustawiając parametr sensor = true podczas pobierania skryptów obsługi mapy. Ponadto nie możemy używać map Google do śledzenia floty pojazdów, chyba że usługa ta jest dostępna za darmo dla każdego użytkownika. Oferowanie płatnych serwisów do śledzenia floty pojazdów możliwe jest tylko po zakupie Google Maps API for Business. Używanie API poza przeglądarką WWW Google dopuszcza używanie API w aplikacjach desktopowych, o ile są one dostępne do pobrania dla każdego użytkownika z darmowej strony WWW. Dopuszczalne jest także budowanie aplikacji mobilnych, o ile są one ogólnodostępne i korzystają bezpośrednio z API. Nie dopuszczalne jest użycie API po stronie serwera do pobierania i modyfikowania elementów map, łączenia statycznych obrazków do wyświetlania większych map, kopiowanie, zapisywanie map na serwerze itp. Brak możliwości użycia w bezpiecznych połączeniach HTTPS, SSL Użycie darmowej wersji API w bezpiecznych połączeniach https, czy ssl jest niedozwolone i jest przez Google blokowane. Ograniczenie to można znieść kupując pakiet Google Maps API for Business. 59

60 Zakrywanie i ukrywanie logo Google Wszystkie loga i napisy opisujące właściciela zawartości mapy jakie automatycznie wyświetla Google na swoich mapach, nie mogą być przez nas usuwane, zmieniane, zakrywane. Limit geokodera Obecnie geokoder w darmowej wersji jest ograniczony do zapytań dziennie, dla wersji Google Maps API for Business limit ten wynosi Co ciekawe limity liczone są względem adresu IP odpytującego. Jeśli więc korzystamy z geokodera javascriptowego wbudowanego w mapy Google, limit ten liczony jest na konto każdego użytkownika odwiedzającego nasz serwis. W praktyce, o ile wszyscy nasi użytkownicy nie korzystają z proxy, to limit ten jest wystarczający i nasza strona internetowa raczej tego nie odczuje. Warto tutaj pamiętać, że jeśli będziemy korzystali z geokodera Google bezpośrednio z naszego serwisu to limit ten będzie liczony już względem niego. W przypadku nadużywania tych ograniczeń geokoder powinien odpowiadać kodem błędu 620. Jeśli jednak przekraczanie będzie się powtarzać Google może zablokować nam działanie geokodera w całym naszym serwisie. Łamanie regulaminu Google może zablokować nam całkowicie dostęp do map w naszym serwisie z zarejestrowanego klucza, albo z naszego IP, a wtedy już nie zostaje nam nic innego jak zwracanie się bezpośrednie do przedstawicieli Google w celu zdjęcia blokady. Zagrożenie jest więc spore. Lepiej więc trzymać się założeń tego regulaminu i dokładne sprawdzenie go przed wdrożeniem dużego serwisu [24, 25] Yahoo! Maps Portal ten jest dostarczany przez firmę Yahoo!. Yahoo! Map jest bardziej popularne w Stanach Zjednoczonych, a skutkiem tego jest lepsze przystosowanie mapy do tamtych regionów. Wadą Yahoo Map jest to, że nie przedstawia dokładnej mapy dla Polski. Strona oferuje przeglądanie map ulic oraz możliwe jest wyznaczenie trasy pomiędzy dwoma punktami. Trasy takie można modyfikować. Jest również możliwość sprawdzenia wystąpień różnych zdarzeń drogowych oraz obejrzenia intensywności ruchu na popularniejszych drogach. Występuje także możliwość dodawania wielu adresów do trasy i ustalania ich kolejności. 60

61 Programiści mogą korzystać z Yahoo! Maps na własnych stronach internetowych przez Yahoo! Maps API. Yahoo! Oferuje szereg możliwości swojego API, wspiera geokodowanie, umożliwia wysłanie wygenerowanego obrazu mapy czy pobieranie informacji o ruchu drogowym. Początkowo licencja była dość restrykcyjna, jednak z upływem czasu Yahoo zmieniło swoje regulaminy, aby stały się bardziej przyjazne dla programistów. Okazuje się, że można już korzystać komercyjnie za darmo z Yahoo, jednak w swoim regulaminie wciąż mają dziwne ograniczenia jak np. brak możliwości wyświetlenia na mapie pozycji pojazdu/użytkownika sprzed mniej niż 6 godzin. Tak jak w przypadku Google Maps, do korzystania z Yahoo! Maps API konieczne jest wygenerowanie indywidualnego klucza na stronie dostawcy oraz zabronione jest korzystanie z tego API dla serwisów niezgodnych z prawem [26]. Rysunek 6: Yahoo Maps z przykładowym wyświetlonym miejscem Bing Maps Bing Maps jest to serwis internetowy z mapami drogowymi oraz zdjęciami satelitarnymi oraz lotniczymi, należący do firmy Microsoft. Oprócz wyświetlania map i zdjęć, wyszukiwania adresów oraz wyznaczania trasy pomiędzy wybranymi punktami, usługa oferuje zdjęcia z lotu ptaka (Bird's Eye), są to wysokiej rozdzielczości zdjęcia lotnicze wykonane pod kątem 45 stopni, które są dostępne dla ponad 100 miast w Stanach 61

62 Zjednoczonych i 80 w Europie głównie w Wielkiej Brytanii i we Włoszech. Serwis jest regularnie aktualizowany o nowe dane. Możliwe jest również dodawanie własnych informacji do map, takich jak: punkty, linie i wielokąty, a następnie dzielenie się nimi z innymi użytkownikami serwisu. Niestety mapy w wydaniu Bing nie są przeznaczone na polski rynek i wyszukanie adresu lub trasy dojazdu jest dość uciążliwe. Bing Maps udostępnia również specjalne API, które umożliwia programistom tworzenie własnych aplikacji internetowych z wykorzystaniem map i informacji z serwisu. Korzystanie z tego API jest darmowe, jeśli przestrzegamy podstawowych zasad i nasza strona internetowa jest publiczna i ogólnie dostępna dla użytkowników. Limity narzucone przez firmę Microsoft to 120 tysięcy sesji lub 500 tysięcy transakcji wszelkiego rodzaju na rok dla naszego serwisu. Ograniczenie dotyczące ilości wyznaczanych połączeń obejmuje 28 wskazanych miejsc. W wersji darmowej dostajemy pełen dostęp do Bing Maps API [27]. Rysunek 7: Bing Maps z przykładowym wyświetlonym miejscem OpenStreetMap OpenStreetMap (OSM) jest globalnym projektem mającym na celu stworzenie darmowej oraz swobodnie dostępnej mapy świata. Najważniejszą cechą jest możliwość edytowania mapy przez każdego użytkownika, przez co nazywana jest także kartograficznym odpowiednikiem Wikipedii. Wszelkie dane zawarte w projekcie udostępniane są na otwartej licencji Creative Commons, co umożliwia dalsze ich wykorzystywanie, między innymi 62

63 w systemach nawigacji GPS, co czyni ją darmową alternatywą dla drogich, niekoniecznie lepszych, map komercyjnych. Projekt został założony w 2004 roku, tworzy go obecnie ponad 350 tysięcy osób, a wszystkie przesłane obiekty osiągnęły już wielkość ponad 200 gigabajtów. Mapy powstają na kilka sposobów. Najstarszą metodą jest zbieranie tzw. śladów za pomocą odbiornika GPS, a następnie zgranie ich na komputer i wyrysowywanie ulic wzdłuż śladów z urządzenia. Inną metodą jest używanie udostępnionych zdjęć satelitarnych, na podstawie których można wyrysować nie tylko drogi, ale także budynki czy tereny niedostępne. Umożliwia to także tworzenie mapy na obszarach, których nie widziało się na własne oczy. W taki sposób powstała np. mapa stolicy Haiti, która była nieocenioną pomocą przy akcji ratunkowej po trzęsieniu ziemi w 2010 roku, a tworzona była głównie przez grupę osób z Europy i Ameryki. Należy zaznaczyć, iż ze względu na rygorystyczne podejście do praw autorskich zabronione jest przerysowywanie innych map oraz wgrywanie danych, na które nie uzyskało się pozwolenia. W odróżnieniu od innym projektów mapowych, OpenStreetMap pozwala na samodzielną edycję. Nie trzeba czekać, aż ktoś przejrzy zgłoszenie, zaakceptuje bądź je odrzuci, wszystkie zmiany możemy wprowadzać sami. OpenStreetMap można traktować jako miejsce, gdzie możesz stworzyć swoją mapę, jeśli jej potrzebujesz. Każda zmiana jest obserwowana przez innych użytkowników i w przypadku, gdy informacje okazałyby się nieprawdziwe lub niedokładne to istnieje możliwość szybkiego wycofania. OpenStreetMap udostępnia swoje dane i mapy na otwartej licencji dzięki czemu każdy może korzystać swobodnie z tych danych. Mapując w OpenStreetMap działa się filantropijnie i pomaga innym ludziom. Inną zaletą tej mapy jest to, że OpenStreetMap to projekt globalny. Dzięki temu wyjeżdżając za granicę można skorzystać z nawigacji opartej o dane OSM bez konieczności wydawania pieniędzy na dodatkowe mapy. O ile w Polsce jakość danych adresowych pozostawia jeszcze wiele do życzenia to np. w krajach zachodnich takich jak Wielka Brytania, Niemcy czy Holandia mapy OSM są o wiele lepsze niż jakakolwiek mapa komercyjna. Mapa ta nie posiada możliwości wyznaczania tras, jednak na podstawie danych zebranych dzięki temu projektowi działa kilka bibliotek umożliwiających generowanie drogi przejazdu pomiędzy określonymi punktami. Takimi bibliotekami m.in. są: MapQuest Open, OSRM, Skobbler i YOURS [22, 23]. 63

64 Rysunek 8: OpenStreetMaps z przykładowym wyświetlonym miejscem MapQuest MapQuest jest darmową mapą udostępnianą użytkownikom oraz programistom. Oprócz wyszukiwania interesujących nas adresów, na stronie producenta tej mapy udostępniane jest również API, które zawiera dużą liczbę funkcji do jej obsługi. Mapy MapQuest mogą być udostępniane na dowolnej stronie internetowej przez programistów. Mapa oferuje wiele możliwości m.in.: znajdowanie trasy pomiędzy punktami na mapie, geokodowanie, wyznaczanie tras wraz z punktami pośrednimi. Są też opcje do wyszukiwania stacji o najniższej, bądź najwyższej cenie paliwa, miejscach zakwaterowania, dostępnych rozrywkach, restauracjach oraz wbudowana jest też możliwość automatycznego lokalizowania użytkownika na mapie. Dużą zaletą tej mapy jest wyszukiwanie tras składających się z 50 punktów. Od 2010 roku firmy odpowiedzialne za OpenStreetMap oraz MapQuest zaczęły współpracować ze sobą, czego efektem jest wypuszczenie na rynek mapy stworzonej przez MapQuest w pełni opartej na danych zebranych przy pomocy projektu OpenStreetMap. Obecnie MapQuest udostępnia dwie wersje swoich map, jedna rozwijana jest od lat, druga natomiast stanowi efekt współpracy z OSM [30]. 64

65 Rysunek 9: MapQuest z przykładowym wyświetlonym miejscem. Rysunek 10: MapQuest open z przykładowym wyświetlonym miejscem Porównanie map Jednym z głównych kryteriów wyboru mapy była możliwość generowania trasy na podstawie kilku podanych współrzędnych geograficznych. Kolejnym elementem branym pod uwagę były dodatkowe funkcje, które pomogłyby przy implementacji tego typu rozwiązania. Spośród wymienionych wyżej map wybrano trzy, które zostały przetestowane w praktyce. 65

66 Wybór padł na Google Maps, Bing Maps oraz MapQuest. Pierwszym kryterium było wyznaczenie odległości pomiędzy poszczególnymi adresami, które miały być brane pod uwagę przy wyznaczeniu rozwiązania problemu komiwojażera. Google Maps oraz MapQuest posiadają funkcję wyliczające odległości pomiędzy wyznaczonymi punktami, ale wiąże się to z pewnymi ograniczeniami dotyczącymi liczby miejsc, dla których chcemy wyznaczyć macierz odległości. W mapie firmy Google odpowiada za to Google Distance Matrix API i wprowadza spore ograniczenia na zwracane wartości. Możemy otrzymać 100 elementów macierzy dla jednego zapytania, jednakże 100 wartości nie może być zwróconych w odstępie krótszym niż 10 sekund. W praktyce oznacza to, że dla wyznaczenia wartości grafu pełnego przy tych ograniczeniach, jesteśmy w stanie otrzymać macierz wartości dla jedynie 10 adresów. Dodatkowym ograniczeniem jest maksymalne otrzymanie 2500 elementów w czasie jednej doby. Dla płatnej wersji Google Maps API for Business, wartości te kształtują się następująco: 625 elementów zwróconych na jedno zapytanie, co pozwala na sprawdzenie wszystkich możliwości dla 25 wybranych punktów na mapie, 1000 elementów otrzymanych w ciągu 10 sekund oraz wartości zwróconych w ciągu jednej doby. Możliwe jest również ustawienie parametrów dla zwracanych wartości, dotyczą one charakterystyki dróg jakie mają być wyliczane. Mamy do wyboru trzy opcje: pieszą, rowerową oraz tryb przeznaczony dla pojazdów samochodowych. Dodatkowo na trasy możemy narzucić dwa ograniczenia. Pierwsze dotyczy omijania płatnych dróg, drugie natomiast powoduje, że wyznaczone trasy nie będą prowadzić przez autostrady. Możliwe jest też ustawienie określonego systemu jednostkowego oraz języka, w którym będą zwracane informacje. Warto również zauważyć, że nie musimy koniecznie określać tych samych miejsc początkowych i końcowych do wyznaczenia macierzy odległości. 66

67 Rysunek 11: Przykład wykorzystujący Google Distance Matrix API. Źródło: W przypadku MapQuest mamy możliwość skorzystania z Directions Web Service, który zawiera Route Matrix. Serwis ten służy do wyznaczania wartości pomiędzy wybranymi miejscami. Również na to rozwiązane nałożone są ograniczenia. Zapytanie składające się z jednego punktu startowego, może otrzymać wartości dla 100 miejsc będących celami podróży. Dla opcji wiele do wielu jesteśmy w stanie wyznaczyć macierz składającą się z 25 adresów. Ciekawostką dostępną w MapQuest jest opcja Optimized Route, która pozwala wyznaczyć najkrótszą trasę pomiędzy różnymi adresami. Niestety liczba tych miejsc jest również ograniczona do 25. Bing Maps nie posiada funkcji pomagającej w wyliczaniu odległości pomiędzy punktami. Ze względu na ograniczenia w projekcie, nie wykorzystano któregoś z wyżej przedstawionych serwisów. Dystans dzielący poszczególne adresy został wyliczony na podstawie ortodromy. Ortodroma jest to najkrótsza droga pomiędzy dwoma punktami na 67

68 powierzchni kuli biegnąca po jej powierzchni. Stanowi ona zawsze fragment koła wielkiego tzn. największego koła, jakie można wpisać w kulę. Linię ortodromy otrzymuje się poprzez przecięcie kuli płaszczyzną przechodzącą przez punkty A,B na powierzchni tej kuli oraz przez środek kuli. [31]. Wzór na ortodromę ma postać:,gdzie szerokości geograficzne obu punktów, różnica długości geograficznych obu punktów. Wynik otrzymujemy w postaci stopni, który następnie trzeba przeliczyć na odpowiadające nam jednostki. Kolejnym elementem, który został porównany było wyświetlanie tras wraz z punktami pośrednimi przez poszczególne serwisy mapowe. Spośród map Google, Microsoftu i MapQuest największe problem z geokodowaniem miejsc miała mapa Bing Maps, co skutkowało brakiem wyświetlania trasy. Używając mapy Microsoftu, warto zwrócić uwagę, że nazwy ulic na terenie Polski rozpoczynają się od słowa Ulica. Przykładowy adres zapisany w Bing Maps: Ulica Akademicka 16, Gliwice, SL, , Polska. Cele podróży mogą być dodawane jako ciąg znaków składających się na adres lub jako para wartości odpowiadająca współrzędnym geograficznym. Jeśli chodzi o możliwości wyświetlania punktów pośrednich trasy to Google Maps w wersji darmowej pozwala na wykorzystanie 8 takich miejsc, dla Bing Maps limit ten wynosi 25, natomiast MapQuest pozwala na wykorzystanie aż 48 adresów pośrednich pomiędzy początkiem, a końcem trasy. Na rysunkach 12, 13 i 14 przedstawiona została ta sama trasa przy użyciu Google Maps, Bing Maps oraz MapQuest. Jak widać, każdy z tych serwisów oprócz mapy udostępnia też wskazówki dotyczące dojazdu do wyznaczonych punktów. Z wybranych map tylko Google Maps udostępnia opis drogi w języku polskim. 68

69 Rysunek 12: Google Maps - prezentacja trasy wraz ze wskazówkami dojazdu. Rysunek 13: Bing Maps - prezentacja trasy wraz ze wskazówkami dojazdu. 69

70 Rysunek 14: MapQuest - prezentacja trasy wraz ze wskazówkami dojazdu. Google Maps i Bing Maps pozwalają również na podejrzenie natężenia ruchu na wybranych odcinkach dróg (Rysunek 15). Opcja ta dotyczy tylko wybranych krajów i Polska się do nich zalicza. Na jej podstawie mogą zostać wprowadzone poprawki dotyczące kursów kurierów. Dodatkowo mapa Microsoftu przechowuje informacje dotyczące remontów wybranych odcinków jezdni. 70

71 Rysunek 15: Google Maps i natężenie ruchu drogowego. Z prezentowanych map do przedstawiania wygenerowanych tras, został wybrany serwis MapQuest. Głównym powodem wyboru były mniejsze ograniczenia w porównaniu z konkurencją, dotyczące liczby punktów pośrednich podróży oraz bardzo dobre odwzorowanie mapy Polski. Również geolokalizacja działała sprawnie dla wybranych adresów. Adresy oraz położenie obiektów w projekcie są wyznaczane na podstawie współrzędnych geograficznych odczytanych przy pomocy Google Maps, które następnie były przesyłane do mapy MapQuest. 71

72 72

73 4. Analiza oczekiwanej funkcjonalności aplikacji Dział ten zawiera informacje dotyczące funkcjonalności aplikacji, która miała zostać wykonana w ramach pracy. Pierwszy podrozdział opisuje ogólne założenia programu. W kolejnym punkcie zostały przedstawione wymagania, które powinna spełniać aplikacja. W następnym podrozdziale zostały opisane przypadki użycia dla każdej z grup użytkowników programu. Ostatni podrozdział opisuje konkurencyjne rozwiązania dla tego typu aplikacji. Do tego porównania wybrane zostały strony internetowe firm UPS i DHL Opis aplikacji Realizacja projektu sprowadzała się do stworzenia dynamicznej aplikacji internetowej współpracującej z bazą danych. Cała aplikacja miała za zadanie pomóc w usprawnieniu funkcjonowania firmy kurierskiej. W systemie dokonano podziału na odpowiednich aktorów, którzy w zależności od pełniącej funkcji w przedsiębiorstwie, mają dostęp jedynie do wybranych elementów systemu wchodzących w zakres ich obowiązków Specyfikacja wymagań Wymagania dotyczące projektu w głównej mierze opierają się na podziale na grupy użytkowników. Podstawowy podział jaki został dokonany zawiera następujących aktorów: Administrator, Kierownik, Kurier, Klient. Na podstawie uprawnień do poszczególnych części portalu, można stworzyć własną grupę użytkowników składającą się z wybranych podstawowych opcji 6 grup. Poszczególne wymagania dotyczące użytkowników: a) Administrator: dodawanie nowych użytkowników systemu, ich modyfikacja oraz usuwanie, tworzenie, usuwanie, modyfikowanie grup użytkowników oraz przydzielanie im poszczególnych uprawnień, dodawanie, modyfikowanie oraz usuwanie oddziałów firmy, tworzenie, edycja oraz usuwanie pojazdów. 73

74 b) Kierownik: tworzenie, edycja, usuwanie kursów, przydzielanie pojazdów oraz kurierów dla wybranych tras, zarządzanie kursami, sprawdzanie informacji dotyczących aktualnych kursów oraz kurierów. c) Kurier: dostęp do podglądu rozkładu jazdy. d) Klient: składanie zamówień, podgląd złożonych zleceń Analiza przypadków użycia W podrozdziale zostały opisane diagramy przypadków użycia dla poszczególnych aktorów. Każdy z poniższych podpunktów opisuje możliwości, jakie są przewidziane dla każdej z grup dostępnej w aplikacji Administrator W skład obowiązków administratora wchodzi: przydzielanie użytkowników do grup, przydzielanie uprawnień do grup użytkowników, a także tworzenie, usuwanie, modyfikacja grup i użytkowników. Użytkownik uzyskuje wszystkie uprawnienia grup, do których został przydzielony. Dodatkowym zadaniem administratora jest uzupełnianie danych aplikacji o nowe pojazdy oraz oddziały. 74

75 Kierownik Rysunek 16: Diagram przypadków użycia administratora. W zakres kompetencji kierownika wchodzi tworzenie kursów, w ramach których ma on możliwość przydzielania kurierów, zleceń oraz pojazdów. Inną czynnością, za którą jest on odpowiedzialny jest zarządzanie odbytymi wyjazdami, dotyczy to w głównej mierze stanu realizacji wszystkich zamówień w ramach jednego kursu. Trzecią dostępną opcją jest sprawdzenie aktualnych współrzędnych kuriera na trasie. Kierownik ma podgląd do wszystkich bieżących kursów, które się odbywają w danym momencie. 75

76 Kurier Rysunek 17: Diagram przypadków użycia kierownika. Kurier może sprawdzić rozkład przypisanych kursów dla poszczególnych kierowców Klient Rysunek 18: Diagram przypadków użycia kuriera. Klient ma możliwość składania zamówień oraz sprawdzania listy przesyłek zleconych do wysłania. 76

77 Rysunek 19: Diagram przypadków użycia rezerwacji miejsc Przegląd konkurencyjnych rozwiązań Na rynku dostępnych jest wiele firm kurierskich, a każda z nich została zmuszona do promowania i prowadzenia swojej działalności w Internecie, aby nie przegrać z konkurencją. Okazuje się, że większość firm dostosowała się do wyzwań jakie niesie ze sobą rzeczywistość wirtualna. W sieci możemy zamówić kuriera, wycenić przesyłkę i pobrać potrzebne dokumenty, np.: list przewozowy, formularz przeadresowania czy dokument zmiany płatnika. Wśród portali można spotkać takie, które posiadają lepszą, bądź gorszą szatę graficzną. Przy mniej przejrzystej stronie internetowej wielu klientów może nie odnaleźć opcji, która mogłaby ich zainteresować. Porównując strony firm kurierskich można zauważyć, że większość z nich łączy możliwość składania zróżnicowanych zamówień, a każdy klient ma możliwość dostosowania przesyłki do swoich potrzeb. Kolejną wspólną opcją jest możliwość śledzenia przesyłki, wiele z firm ma rozbudowany system monitorowania zamówień, jednak żaden z tych portali nie posiada możliwości prezentowania miejsca znajdowania się paczki. Dużą zaletą aplikacji, która została wykonana w ramach tej pracy, jest możliwość określenia położenia przesyłki. Dane te powinny być zbierane przy pomocy odbiorników GPS zamontowanych w pojazdach kurierskich. Taka oferta może przyciągnąć nową grupę klientów, ponieważ potencjalni zainteresowani mogą czuć się pewniej mając stały podgląd stanu realizacji zamówienia UPS UPS to amerykańska firma zajmująca się przewozem przesyłek i logistyką. Przesyłki docierają do ponad 200 krajów i terytoriów, w tym Polski. W ofercie tej firmy mamy możliwość przygotowania przesyłki, podglądu historii naszych transakcji oraz anulowania przesyłki. Jest możliwość sprawdzenia kosztu i czasu realizacji zamówienia. Serwis oferuje 77

78 nam bogatą paletę możliwości monitorowania przesyłek. Możliwe jest śledzenie paczki przy pomocy numeru referencyjnego, możemy również otrzymywać wiadomości sms lub dane dotyczące przesyłki będą przychodziły pocztą elektroniczną. Ze względu na wielkość firmy jej oferta jest bardzo bogata i skierowana do szerokiego grona klientów. Składając zamówienie klient ma możliwość skorzystania z wielu opcji dotyczących wysyłki m.in.: może otrzymać potwierdzenie doręczenia, wyboru rodzaju usługi oraz osoby płacącej czy np. zastrzec sobie dzień dostarczenia jako sobotę. Na rysunku 20 przedstawiona jest strona WWW firmy UPS. Rysunek 20: Strona internetowa firmy UPS. 78

79 DHL DHL to firma zajmująca się przewozem przesyłek i logistyką, działająca w segmencie międzynarodowych i krajowych przesyłek kurierskich. Ma ona zasięg ogólnoświatowy i posiada filie w ponad 220 krajach na świecie, w tym w Polsce. DHL posiada bogatą ofertę zamówień. Możemy złożyć zamówienie eksportowe, krajowe, importowe, również mamy możliwość złożenia zamówienia na usługę frachtową. Istnieje także opcja podejrzenia stanu przesyłki. Oferta zawiera również opcję powiadamiania za pomocą wiadomości tekstowych lub poczty elektronicznej. W przypadku zamówień mamy możliwość wyboru zleceniodawcy czy jest nim nadawca czy odbiorca. Kolejną przydatną opcją jest wybór płatnika pomiędzy nadawcą i odbiorcą przesyłki. Podczas wypełniania zamówienia musimy również określić jakiego rodzaju przesyłkę chcemy wysłać. Dodatkowo istnieje opcja ubezpieczenia przesyłki oraz wyboru rodzaju obsługi ze względu na nasze potrzeby. Rysunek 21 przedstawia stronę internetową firmy DHL. 79

80 Rysunek 21: Strona internetowa firmy DHL. 80

81 5. Specyfikacja wewnętrzna Rozdział ten opisuje specyfikację wewnętrzną aplikacji. W pierwszych trzech podrozdziałach opisane zostały poszczególne części wchodzące w skład wzorca projektowego MVC. Kolejny podrozdział prezentuje schemat bazy danych, natomiast ostatni podrozdział opisuje przebieg testowania aplikacji Warstwa modelu W skład warstwy modelu wchodzą klasy przechowujące dane w formacie gotowym do ich wyświetlenia poprzez widok, a także klasy świadczące usługi na rzecz warstwy kontrolera. Głównym zadaniem klas świadczących usługi jest konwersja pomiędzy wspomnianymi wcześniej obiektami przeznaczonymi do wyświetlania, a obiektami przechowującymi dane z warstwy DAO. Warstwa DAO odpowiada za komunikację pomiędzy aplikacją i bazą danych, a dokładniej obiektami, które zostały stworzone przy pomocy Entity Framework. Przebieg komunikacji wywołany zgłoszeniem żądania przez użytkownia przedstawia Rysunek 22. Rysunek 22: Diagram sekwencji obsługi żądania użytkownika przez aplikację. Przykładową metodę warstwy DAO przedstawia kod źródłowy 6. Służy ona do pobierania obiektu zawierającego oddział o określonym ID. public static Department GetByID(int id) { using (CourierDBEntities db = new CourierDBEntities()) { return db.department.singleordefault(o => o.departmentid == id); } } Kod źródłowy 6: Metoda zwracająca oddział o określonym ID. 81

82 Innym przykładem elementu warstwy DAO jest metoda odpowiadająca za pobranie listy kursów z bazy danych. Prezentuje ją kod źródłowy 7. public static List<CourseListRepository> GetCoursesToList() { using (CourierDBEntities db = new CourierDBEntities()) { IEnumerable<Course> courses = ( from c in db.course where c.executed == false where c.isactive == true where c.accepted == false select c).tolist<course>(); List<CourseListRepository> results = new List<CourseListRepository>(); foreach (Course c in courses) { CourseListRepository coursetolist = new CourseListRepository(c); results.add(coursetolist); } return results; } } Kod źródłowy 7: Metoda zwracająca listę kursów. W warstwie modelu znajdują się też klasy odpowiedzialne za walidację danych. Kod źródłowy dla klasy Address przedstawia kod źródłowy 8. [MetadataType(typeof(AddressMetadata))] public partial class Address : EntityObject { [Bind(Exclude = "AddressID")] public class AddressMetadata { [DisplayName("StreetName")] [Required(ErrorMessage = "Ulica jest wymagana")] public String StreetName { get; set; } [DisplayName("HouseNumber")] [Required(ErrorMessage = "Numer domu jest wymagany")] public String HouseNumber { get; set; } [DisplayName("FlatNumber")] public String FlatNumber { get; set; } [DisplayName("ZipCode")] [Required(ErrorMessage = "Kod pocztowy jest wymagany")] [RegularExpression(@"[0-9]{2}-[0-9]{3}", ErrorMessage = "Wprowadź poprawny format kodu pocztowego: XX-XXX")] public String ZipCode { get; set; } } } [DisplayName("City")] [Required(ErrorMessage = "Miasto jest wymagane")] public String City { get; set; } Kod źródłowy 8: Walidacja atrybutów klasy Address. 82

83 W warstwie tej znajdują się też metody odpowiedzialne za przetwarzanie danych. Takim przykładem mogą być algorytmy komiwojażera. Kod źródłowy 9 prezentuje krzyżowanie metodą CX dla algorytmu genetycznego. public static Chromosome[] CX(Chromosome[] chromosomes) { for (int i = 0; i < chromosomes.length - 1; i += 2) { Chromosome parent1 = chromosomes[i]; Chromosome parent2 = chromosomes[i + 1]; Coordinate[] parentcities1 = parent1.citieslist.toarray(); Coordinate[] parentcities2 = parent2.citieslist.toarray(); int size = parentcities1.length; Coordinate[] child1 = new Coordinate[size]; Coordinate[] child2 = new Coordinate[size]; int[] randomindexes = new int[size]; int x = RandomHelper.Instance.Next(size); while (x == 0 x == size) { x = RandomHelper.Instance.Next(size); } for (int j = 0; j < x; j++) { int index = RandomHelper.Instance.Next(size); while (randomindexes.contains(index)) index = RandomHelper.Instance.Next(size); randomindexes[j] = index; } Coordinate[] tempchild1 = new Coordinate[x]; Coordinate[] tempchild2 = new Coordinate[x]; for (int j = 0; j < x; j++) { tempchild1[j] = parentcities2[j]; tempchild2[j] = parentcities1[j]; } int indextemp1 = 0; int indextemp2 = 0; for (int j = 0; j < size; j++) { if (!tempchild1.contains(parentcities1[j])) { child1[j] = parentcities1[j]; } else { child1[j] = tempchild1[indextemp1++]; } if (!tempchild2.contains(parentcities2[j])) { child2[j] = parentcities2[j]; } else { child2[j] = tempchild2[indextemp2++]; } } parent1.citieslist = child1.tolist(); parent2.citieslist = child2.tolist(); chromosomes[i] = parent1; chromosomes[i + 1] = parent2; } List<Chromosome> coor = chromosomes.tolist<chromosome>(); Chromosome[] chromosomesresult = new Chromosome[coor.Count]; int counter = coor.count; 83

84 } for (int i = 0; i < counter; i++) { int randcounter = coor.count; int x = (int)(randomhelper.instance.nextdouble() * randcounter); chromosomesresult[i] = coor.elementat(x); coor.removeat(x); } return chromosomesresult; Kod źródłowy 9: Implementacja krzyżowania CX dla algorytmu genetycznego Warstwa widoku Warstwa widoku odpowiada za generowanie stron HTML. Jej działanie opiera się głównie na prezentowaniu lub pobieraniu danych od użytkowników. W warstwie tej są niewielkie fragmenty kodu w języku C#, ich zadaniem jest odpowiednie ukształtowanie wyglądu strony. W skład widoku wchodzą pliki typu: Aspx każdy z nich opisuje wygląd jednej strony internetowej, Ascx każdy z nich opisuje wygląd jednej kontrolki, którą można umieścić w pliku aspx. Każdy z widoków znajduje się w odpowiednim podkatalogu, co pozwala na zachowanie odpowiedniego porządku w projekcie i powoduje, że jest on dużo bardziej przejrzysty. Podział widoków: Account rejestracja konta klienta i logowania się do systemu, Administrator zakładka administratora, Courier zakładka kuriera, Customer zakładka klienta, Driver zakładka kierowcy, Home zakładka powitalna, Manager zakładka kierownika, Shared kontrolki używane na stronach z pozostałych folderów. Każda zakładka posiada swoje podmenu. Dla przykładu zakładka administratora posiada podmenu z pozycjami Użytkownicy, Grupy, Oddziały i Pojazdy. Ma to swoje odbicie w strukturze folderu zakładki użytkownika. Znajdują się w nim podfoldery według następującego podziału: Departments zawiera strony, związane z zarządzaniem oddziałami, Groups zawiera strony, związane z zarządzaniem grupami, Users zawiera strony, związane z zarządzaniem użytkownikami, Vehicles zawiera strony, związane z zarządzaniem pojazdami. 84

85 Pozostałym zakładkom odpowiada ten sam schemat podziału widoków. Przykładowy kod strony odpowiedzialnej za wyświetlanie formularza zamówienia, przedstawia kod źródłowy 10. Metoda RenderParial służy do wywoływania podwidoków, natomiast ActionLink powoduje przesłanie sterowania do odpowiedniej metody kontrolera. Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<Courier.Models.Order>" %> <asp:content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server"> Edit </asp:content> <asp:content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"> <% using (Html.BeginForm()) {%> <%: Html.ValidationSummary(true) %> <fieldset> <legend>edytuj zamówienie</legend> <div style="width: 250px; float: left"> <% Html.RenderPartial("SenderEdit"); %> </div> <div style="width: 250px; position: relative; left: 50px; float: left"> <% Html.RenderPartial("ReceiverEdit"); %> </div> <div style="width: 250px; float: left; position: relative; left: 100px;"> <% Html.RenderPartial("ShipmentEdit"); %> </div> <p style="clear: left"> <input type="submit" value="zatwierdź zmiany" /> </p> </fieldset> <% } %> <div> <%: Html.ActionLink("Powrót do listy zamówień", "Index", "Parcels") %> <%: Html.ActionLink("Anuluj zamówienie ", "Delete", new { id=model.orderid }) %> </div> </asp:content> Kod źródłowy 10: Widok odpowiedzialny za wyświetlanie formularza zamówienia. Kod źródłowy 11 prezentuje fragment kodu odpowiedzialnego za wyświetlanie trasy przy pomocy Google Maps. Kod napisany jest w języku JavaScript. var coordinates = new google.maps.latlng( , ); var mapoption = { zoom: 10, center: coordinates, maptypeid: google.maps.maptypeid.roadmap }; map = new google.maps.map(document.getelementbyid("map"), mapoption); route_render.setmap(map); route_render.setpanel(document.getelementbyid('directions')); var route_data = { origin: department, destination: department, waypoints: waypoints, optimizewaypoints: false, 85

86 travelmode: google.maps.directionstravelmode.driving }; trasa.route(route_data, service_directions); } function service_directions(result, status) { if (status!= google.maps.directionsstatus.ok!result.routes[0]) { alert('wystąpił błąd!'); return; } route_render.setdirections(result); } Kod źródłowy 11: Fragment implementacji wyświetlania trasy za pomocą Google Maps Warstwa kontrolera Warstwa kontrolera zarządza przepływem sterowania w aplikacji. Każdej pozycji z podmenu odpowiada jedna klasa kontrolera. W klasie tej są metody dla każdego pliku typu aspx przypisanego do danej pozycji podmenu. Odwołując się do przykładu z podrozdziału 5.2., dla pozycji Users w zakładce Administrator została utworzona klasa UsersController. Zawiera ona metody Index, Create, Edit, Delete, Details. Są one wywoływane, gdy użytkownik otwiera odpowiadające im strony Index.aspx, Create.aspx, Edit.aspx, Delete.aspx, Details.aspx, znajdujące się w folderze Administrator/Users warstwy widoku. Metody UsersController kontrolera po wykonaniu żądania użytkownika, zwracają stronę wypełnioną danymi i gotową do odesłania do użytkownika. Kody źródłowe 12 i 13 przedstawiają metody kontrolera. Pierwsza z nich odpowiada za pobranie z modelu wszystkich dostępnych oddziałów i przesłaniu ich do odpowiedniego widoku. // // GET: /Departments/ public ActionResult Index() { return View(DepartmentDAO.getAllDepartmentRepository()); } Kod źródłowy 12: Metoda kontrolera odpowiadająca za wyświetlanie listy oddziałów. Kod źródłowy 13 odpowiada za przygotowanie widoku wyświetlającego formularz tworzenia użytkownika systemu. // // GET: /Users/Create public ActionResult Create() { CreatedUserRepository user = new CreatedUserRepository(); IList<Department> departments = DepartmentDAO.GetAllDepartments(); ViewData["Departments"] = new SelectList(departments, "DepartmentID", "Name"); return View(user); } Kod źródłowy 13: Metoda kontrolera wyświetlająca formularz stworzenia użytkownika. 86

87 5.4. Schemat bazy danych. User UserID Course FirstName CourseID Address AddressID StreetName HouseNumber FlatNumber City ZipCode Longitude LastName Login Password Active Phone DepartmentID Employee PasswordSalt StartCourse EndCourse UserID VehicleID Distance Executed DepartmentStartID DepartmentEndID Location LocationID Date Longitude Latitude VehicleID Latitude Name Transfer Name Accepted IsActive Order OrderID SenderID ReceiverID SenderAddressID ReceiverAddressID Description StartDate EndDate Department DepartmentID AddressID Active Name Customer CustomerID Shipment ShipmentID OrderID CourseID Delivered Order_1 Vehicle VehicleID Registration Active ModelType Efficient Capacity Make Name Weight FirstName Price LastName Completed Company Height Width Depth Received Phone E_Mail IsAuthorized Authorization_AuthorizationID Group_GroupID BelongsToGroup Groups_GroupID SenderDepartmentID ReceiverDepartmentID State StateID User_UserID InDepartment OrderID FromSenderTaken IsActive Used OrderNumber UserID Description Date Longitude Latitude Authorization AuthorizationID Name Group GroupID Name Active Rysunek 23: Schemat bazy danych. Jedną z ciekawszych kwestii w modelu bazy danych jest przechowywanie informacji o uprawnieniach użytkownika. Tabele grup (Group) i uprawnień (Authorrization) są w relacji wiele do wielu, przez co więcej niż jedna grupa użytkowników może być uprawniona do danej czynności. Podobnie tabele użytkowników (User) i grup znajdują się w relacji wiele do wielu, dzięki czemu jeden użytkownik może należeć do wielu grup jednocześnie. 87

88 Każda tabela kursu (Course) zawiera informacje o kurierze (User), pojeździe (Vehicle) i oddziale (Department). Relacje pomiędzy tymi tabelami to jeden do jednego. Dodatkowo tabela Vehicle, jest połączona z tabelą Location, która służy do przechowywania danych zebranych przy pomocy nadajników GPS. Kurs jest w relacji jeden do wielu z tabelą dotyczącą przesyłek (Shipment), która zawiera informacje o zamówieniach klienta oraz sugerowanej kolejności w jakiej kurier powinien dokonywać realizacji kursu. Tabela ta jest powiązana z tabelą zamówień (Order), która przechowuje informacje dotyczące zleceń oraz połączona jest z tabelami stanu (State), adresów (Address) i klientów (Customer) Testowanie W celu przetestowania aplikacji sprawdzono wszystkie moduły wchodzące w jej skład. Testowanie przebiegło metodą zstępującą. Początkowo były sprawdzane moduły znajdujące się na szczycie hierarchii aplikacji. Do nich zaliczyć można moduł logowania, wyświetlania poszczególnych zakładek oraz sprawdzenie mapowania obiektowo-relacyjnego. W czasie testowania mapowania były sprawdzane wszystkie dostępne metody umożliwiające odczyt, zapis i modyfikacje danych z bazy. Kolejnym etapem było sprawdzenie czy dostęp do poszczególnych modułów posiadają tylko upoważnieni użytkownicy. Następnie zostały przeprowadzone testy funkcjonalne. Polegały one na logowaniu się na konta określonej grupy użytkowników i sprawdzanie jak aplikacja zachowa się na działanie użytkownika. Kolejnym etapem testów było zbadanie algorytmów do wyznaczania tras. Testy te zostały opisane w podrozdziale 2.4. Aplikacja była również sprawdzana pod względem wpisywania błędnych danych i umożliwiało to przetestowanie mechanizmu walidacji danych. Użytkownik po wpisaniu niepoprawnej wartości lub jej niewprowadzeniu jest o tym informowany odpowiednim komunikatem. Aplikacja była testowana na przeglądarkach: Internet Explorer w wersji 9.0.9, Opera 12.01, Google Chrome 21.0 i Firefox

89 6. Specyfikacja zewnętrzna W rozdziale opisana została specyfikacja zewnętrzna aplikacji. Pierwszy podrozdział opisuje uruchomienie strony internetowej oraz opcji, które są dostępne dla użytkownika niezalogowanego. Kolejny podrozdział opisuje dostępne już możliwości po zalogowaniu się użytkownika, a opis podzielony został ze względu na grupy użytkowników, dla których przewidziana została aplikacja Uruchomienie aplikacji Do uruchomienia programu niezbędny jest serwer aplikacji wykorzystujący technologię.net Framework. Może to być jeden z systemów: Windows Server 2003, Windows 2000 Server, Advanced Server z dodatkiem Service Pack 2 lub Windows XP Professional (32- lub 64-bitowy). Serwer powinien być wyposażony w MDAC (Microsoft Data Access Components), jest to zestaw bibliotek wykorzystywanych między innymi do komunikacji z serwerem SQL firmy Microsoft. Wymagane jest również serwer IIS z najnowszym zestawem uaktualnień bezpieczeństwa. Do przeglądania strony po stronie klienta wymagany jest komputer PC z zainstalowaną przeglądarką internetową oraz dostępem do Internetu. Cała aplikacja, która oparta jest o stronę WWW, podzielona jest na zakładki. Każda z nich przypisana jest do pewnej grupy użytkowników. Dwie pozycje, a mianowicie Sprawdź przesyłkę oraz O stronie są dostępne niezależnie od osoby zalogowanej do aplikacji. Druga z tych zakładek jest jednocześnie stroną powitalną projektu, która ukazuje się po uruchomieniu aplikacji (Rysunek 24). Niezalogowany użytkownik ma dostęp jedynie do opcji sprawdzenia stanu przesyłki, rejestracji i strony powitalnej. 89

90 Rysunek 24: Strona powitalna. W prawym górnym rogu występuje odnośnik do zakładki logowania, opisany jako Zaloguj się. Po wybraniu go ukazuje się formatka służąca do zalogowania (Rysunek 25). Użytkownik może się zalogować do systemu wpisując poprawną nazwę oraz hasło w pola do tego przeznaczone, a następnie potwierdzić wpisane dane poprzez wybranie przycisku Zaloguj. 90

91 Rysunek 25: Zakładka logowania. W górnej części formatki logowania występuje odnośnik Zarejestruj się, który odsyła nas do strony odpowiedzialnej za rejestrację użytkowników (Rysunek 26). Przeznaczona jest ona dla klientów chcących skorzystać z usług kuriera. Pracownicy powinni być rejestrowani do systemu za pomocą zakładki administratora, co zostanie opisane w dalszej części. Po zarejestrowaniu się klienta, otrzymuje on uprawnienia do składania zamówień i śledzenia wcześniej wysłanych paczek (Rysunek 27). Ostatnią opcją niewymagającą logowania jest sprawdzenie stanu przesyłki. Do każdej paczki przypisany jest unikalny ośmiocyfrowy numer, na podstawie którego możliwe jest wyszukanie przesyłki (Rysunek 28). Stan przesyłki (Rysunek 29) zawiera informacje o nadawcy, odbiorcy, rozmiarach, wadze i stanie paczki. Na mapie przestawione jest położenie paczki. Współrzędne przesyłki są ustalane na podstawie zgłaszanych zmian stanów zamówienia. Zmiany te następują w określonych sytuacjach występujących w czasie trwania realizacji zlecenia. Do nich możemy zaliczyć odebranie paczki od nadawcy, dostarczenie przesyłki do odbiorcy lub oddziału. Dane te mogą też ulegać aktualizacji, w czasie transportu przesyłek i być uzupełniane o informacje zebrane za pomocą nadajników GPS zamieszczonych w pojazdach firmy kurierskiej. 91

92 Rysunek 26: Zakładka rejestracji. Rysunek 27: Opcje dostępne dla klienta. 92

93 Rysunek 28: Sprawdzanie stanu przesyłki. Rysunek 29: Szczegółowe informacje o przesyłce Zakładki Wyświetlanie zakładek administratora, kierownika, kuriera i klienta zależy od dostępnych uprawnień. Za zarządzanie nimi odpowiada administrator, który ma możliwość 93

94 modyfikowania i tworzenia kont przypisanych dla pracowników. Konto z pełnymi uprawnieniami przedstawione jest na rysunku 30. Rysunek 30: Menu ze wszystkimi uprawnieniami. W kolejnych podrozdziałach przedstawione zostaną zakładki przeznaczone dla określonej grupy użytkowników Administrator Zakładka ta służy do zarządzania kontami użytkowników, dodawaniem oddziałów i pojazdów do bazy. Użytkownik o uprawnieniach administratora po umieszczeniu kursora w menu na polu Administrator zobaczy cztery możliwości wyboru: Użytkownicy, Grupy, Oddziały oraz Pojazdy (Rysunek 31). Pierwsza opcja dotyczy zarządzania użytkownikami systemu. Po wyborze tej pozycji z menu wyświetli nam się lista użytkowników systemu (Rysunek 32). 94

95 Rysunek 31: Opcje dostępne dla administratora. Rysunek 32: Formatka Użytkownicy zakładki Administrator. Administrator może dodać nowego pracownika do systemu, modyfikować, poznać szczegóły lub też usunąć wybraną osobę z systemu. Po wyborze odnośnika Nowy użytkownik ukaże nam się formularz (Rysunek 33). Poszczególne pola należy wypełnić odpowiednimi danymi. Wyboru grupy dokonuje się poprzez przeniesienie odpowiednich wartości do pola Wybrane grupy, służą do tego przyciski <<, oraz >>, które wskazują kierunek przenoszenia wartości. Zamianie miejsc ulegają pola, które zostały wcześniej zaznaczone na danej liście. Na końcu formularza dokonuje się wyboru oddziału, do którego dany pracownik ma być przypisany. 95

96 Rysunek 33: Formularz nowego użytkownika. Pole edytuj pozwala na zmianę ustawień dotyczących konta. Formularz edycji (Rysunek 34) jest bardzo podobny do tego, który odpowiadał za dodanie nowego pracownika. Jedyną zauważalną zmianą jest ukrycie pól odpowiedzialnych za zmianę hasła konta. W przypadku modyfikacji tej wartości należy wpisać ją dwa razy, w celu sprawdzenia poprawności wprowadzonego ciągu znaków. 96

97 Rysunek 34: Edycja użytkownika. Widok szczegółów i usuwania użytkownika przedstawiają odpowiednio rysunek 35 i 36. Pogląd użytkowników pozwala na zobaczenie wszystkich atrybutów profilu pracownika. W przypadku gdyby jakieś dane się nie zgadzały lub wymagałby zmiany, to pod formularzem występuje odnośnik do strony pozwalającej na modyfikacje konta. W przypadku usuwania pracownika z systemu, wyświetlany jest komunikat informujący o tym czy jesteśmy zdecydowani na dezaktywowanie konta danego użytkownika (Rysunek 36). W przypadku pomyłki możemy powrócić do listy pracowników za pomocą odnośnika Powrót do listy. 97

98 Rysunek 35: Szczegóły użytkownika. Pozostałe trzy zakładki, a mianowicie Grupy, Oddziały i Pojazdy mają bardzo zbliżoną konstrukcję do tej opisanej dla użytkowników. Każda z nich posiada listę dostępnych elementów systemów, z której możemy wybrać interesującą nas pozycje. Dostępne są trzy opcje dla tych obiektów, a mianowicie: edycja, podgląd szczegółów i usunięcie elementu z bazy. Tak jak w przypadku użytkowników możliwe jest również dodanie nowych elementów do systemu. 98

99 Rysunek 36: Usuwanie użytkownika Kierownik Kierownik posiada trzy zakładki: Stwórz kurs, Zarządzaj kursami oraz Sprawdź kurierów (Rysunek 37). Rysunek 37: Opcje dostępne dla kierownika. 99

100 Pierwsza z nich służy do wyznaczania wstępnych kursów dla kurierów. Polega to na wybraniu odpowiednich zamówień, które kurs ma obejmować, przypisaniu kuriera oraz pojazdu. Na tym etapie ustalany jest też termin, w którym kurs powinien się odbyć. Wybranie opcji Stwórz kurs spowoduje wyświetlenie listy kursów (Rysunek 38). Rysunek 38: Lista kursów stworzonych przez kierownika. Kierownik ma możliwość edytowania kursów, obejrzenia ich szczegółów lub usunięcia wybranej trasy. Inną dostępną opcją jest akceptacja danego kursu, w tym celu należy użyć Akceptuj, co spowoduje, że dany kurs zostanie zatwierdzony do realizacji. Zanim użytkownik tego dokona możliwe jest jeszcze wprowadzanie poprawek takich jak zmiana kuriera, pojazdu, daty rozpoczęcia kursu czy też listy paczek, służy do tego odnośnik Edytuj (Rysunek 39). Użytkownik ma możliwość sprawdzenia informacji dotyczących danego przejazdu wybierając Szczegóły (Rysunek 45). Dostępna jest tam lista zamówień wchodząca w skład kursu oraz wyświetlana jest pomocnicza mapa z sugerowaną trasą. 100

101 Rysunek 39: Edycja kursu. Rysunek 40: Szczegóły kursu. 101

102 Decydując się na stworzenie kursu, należy wybrać Nowy kurs. Następnie będziemy poproszeni o wybór oddziału, dla którego będzie on tworzony (Rysunek 41). Rysunek 41: Wybór oddziału, dla którego będzie tworzony kurs. Kolejnym krokiem jest wybranie daty i godziny wyjazdu oraz zamówień, które mają być zrealizowane w danym kursie (Rysunek 42). Dla wybranej listy adresów stosowany jest algorytm komiwojażera, który odpowiada za wyznaczenie trasy. Efekt obliczeń można następnie podejrzeć w szczegółach kursu (Rysunek 40). Rysunek 42: Wybór terminu oraz listy paczek dla kursu. Po naciśnięciu przycisku Dalej przechodzimy do strony, która odpowiada za wybór kierowcy i pojazdu dla danego kursu (Rysunek 43). Rysunek 43: Wybór kierowcy i pojazdu. 102

103 Przejście przez wszystkie te etapy tworzenia kursu spowoduje, że znajdzie się on na liście kursów do akceptacji. Zakładka Zarządzaj kursami odpowiada za określenie, które z paczek zostały zrealizowane w czasie kursu. Kierownik w tej części wybiera kurs, który został zrealizowany, a następnie jeżeli wystąpiły komplikacje w czasie wyjazdu i któreś ze zleceń nie zostało zrealizowane, to w tym miejscu następuje zgłoszenie tej informacji (Rysunek 44). Dokonuje się tego poprzez wybranie opcji Wykonano, znajdującej się na liście kursów. Istnieje również możliwość podglądu trasy kuriera, poprzez wybranie odnośnika Szczegóły znajdującego się przy danym kursie. Rysunek 44: Realizacja kursu. Ostatnią opcją dostępną dla kierownika jest wyświetlenie współrzędnych GPS kuriera. Po wyborze zakładki Sprawdź kuriera, ukazuje się nam lista aktualnie wykonywanych kursów (Rysunek 45). Mamy możliwość podejrzenia danego kuriera poprzez wybranie odnośnika Szczegóły. Ukazać nam się powinna po tym zdarzeniu strona przedstawiająca lokalizację kuriera według ostatnich danych odczytanych z urządzenia GPS (Rysunek 46). 103

104 Rysunek 45: Lista aktualnie wykonywanych kursów Kurier Rysunek 46: Rejestrowanie kursu kuriera. Zakładka kuriera pozwala na podejrzenie listy kurierów oraz tras, które zostały im przydzielone. Służy to za grafik pracy kierowcy w firmie. Główna strona zawiera listę pracowników odpowiedzialnych za rozwożenie przesyłek (Rysunek 47). Rysunek 47: Lista kurierów. Wybierając Grafik mamy podgląd do wszystkich kursów przydzielonych danemu kurierowi (Rysunek 48). Wybierając Sprawdź trasę mamy dostęp do szczegółów dotyczących danego kursu: listy paczek, mapy sugerującej trasę oraz podstawowych informacji dotyczących kursu. 104

105 Rysunek 48: Lista kursów wybranego kuriera. (Rysunek 49) Klient Klient ma możliwość złożenia zamówienia oraz podejrzenia wszystkich swoich zleceń Rysunek 49: Opcje dostępne dla klienta. Wybranie zakładki Złóż zamówienie przeniesie nas do formularza dotyczącego nadawcy, odbiorcy oraz parametrów paczki (Rysunek 50). Po jego wypełnieniu i zaakceptowaniu powinny ukazać nam się wszystkie dane, które przed chwilą wprowadzono. Mamy możliwość zaakceptowania danych, ich modyfikacji lub też anulowania zamówienia. 105

106 Rysunek 50: Składanie zamówienia. Wybranie opcji Sprawdź listę przesyłek pozwala klientowi na przejrzenie wszystkich złożonych zleceń (Rysunek 51). Rysunek 51: Lista zamówień klienta. Wybierając Szczegóły można sprawdzić stan realizacji zlecenia (Rysunek 52). Opcja ta pozwala na podejrzenie wielu detali zamówienia, ale ciekawym elementem tej funkcjonalności zakładki jest możliwość podglądu na mapie orientacyjnego miejsca znajdowania się paczki. Współrzędne te są odczytywane z odbiorników GPS zamontowanych w pojazdach, które są sczytywane w pewnym stałym odstępie czasu. W określonych sytuacjach, jak przechowywanie paczki w magazynie czy znajdowanie się paczki jeszcze u nadawcy, miejsca przechowywania paczki są określane na podstawie adresów, w których 106

Wybrane podstawowe rodzaje algorytmów

Wybrane podstawowe rodzaje algorytmów Wybrane podstawowe rodzaje algorytmów Tomasz Głowacki tglowacki@cs.put.poznan.pl Zajęcia finansowane z projektu "Rozwój i doskonalenie kształcenia na Politechnice Poznańskiej w zakresie technologii informatycznych

Bardziej szczegółowo

Optymalizacja. Wybrane algorytmy

Optymalizacja. Wybrane algorytmy dr hab. inż. Instytut Informatyki Politechnika Poznańska www.cs.put.poznan.pl/mkomosinski, Andrzej Jaszkiewicz Problem optymalizacji kombinatorycznej Problem optymalizacji kombinatorycznej jest problemem

Bardziej szczegółowo

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

Algorytm Genetyczny. zastosowanie do procesów rozmieszczenia stacji raportujących w sieciach komórkowych Algorytm Genetyczny zastosowanie do procesów rozmieszczenia stacji raportujących w sieciach komórkowych Dlaczego Algorytmy Inspirowane Naturą? Rozwój nowych technologii: złożone problemy obliczeniowe w

Bardziej szczegółowo

Algorytmy genetyczne

Algorytmy genetyczne Algorytmy genetyczne Motto: Zamiast pracowicie poszukiwać najlepszego rozwiązania problemu informatycznego lepiej pozwolić, żeby komputer sam sobie to rozwiązanie wyhodował! Algorytmy genetyczne służą

Bardziej szczegółowo

Algorytm genetyczny (genetic algorithm)-

Algorytm genetyczny (genetic algorithm)- Optymalizacja W praktyce inżynierskiej często zachodzi potrzeba znalezienia parametrów, dla których system/urządzenie będzie działać w sposób optymalny. Klasyczne podejście do optymalizacji: sformułowanie

Bardziej szczegółowo

Metody przeszukiwania

Metody przeszukiwania Metody przeszukiwania Co to jest przeszukiwanie Przeszukiwanie polega na odnajdywaniu rozwiązania w dyskretnej przestrzeni rozwiązao. Zwykle przeszukiwanie polega na znalezieniu określonego rozwiązania

Bardziej szczegółowo

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

OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) Algorytmy i Struktury Danych PIŁA OSTASZEWSKI Paweł (55566) PAWLICKI Piotr (55567) 16.01.2003 Algorytmy i Struktury Danych PIŁA ALGORYTMY ZACHŁANNE czas [ms] Porównanie Algorytmów Rozwiązyjących problem TSP 100 000 000 000,000 10 000 000

Bardziej szczegółowo

Wyznaczanie optymalnej trasy problem komiwojażera

Wyznaczanie optymalnej trasy problem komiwojażera Wyznaczanie optymalnej trasy problem komiwojażera Optymalizacja w podejmowaniu decyzji Opracowała: mgr inż. Natalia Malinowska Wrocław, dn. 28.03.2017 Wydział Elektroniki Politechnika Wrocławska Plan prezentacji

Bardziej szczegółowo

Algorytmy genetyczne

Algorytmy genetyczne 9 listopada 2010 y ewolucyjne - zbiór metod optymalizacji inspirowanych analogiami biologicznymi (ewolucja naturalna). Pojęcia odwzorowujące naturalne zjawiska: Osobnik Populacja Genotyp Fenotyp Gen Chromosom

Bardziej szczegółowo

Aproksymacja funkcji a regresja symboliczna

Aproksymacja funkcji a regresja symboliczna Aproksymacja funkcji a regresja symboliczna Problem aproksymacji funkcji polega na tym, że funkcję F(x), znaną lub określoną tablicą wartości, należy zastąpić inną funkcją, f(x), zwaną funkcją aproksymującą

Bardziej szczegółowo

ALGORYTMY GENETYCZNE ćwiczenia

ALGORYTMY GENETYCZNE ćwiczenia ćwiczenia Wykorzystaj algorytmy genetyczne do wyznaczenia minimum globalnego funkcji testowej: 1. Wylosuj dwuwymiarową tablicę 100x2 liczb 8-bitowych z zakresu [-100; +100] reprezentujących inicjalną populację

Bardziej szczegółowo

Algorytmy metaheurystyczne podsumowanie

Algorytmy metaheurystyczne podsumowanie dr hab. inż. Instytut Informatyki Politechnika Poznańska www.cs.put.poznan.pl/mkomosinski, Andrzej Jaszkiewicz Problem optymalizacji kombinatorycznej Problem optymalizacji kombinatorycznej jest problemem

Bardziej szczegółowo

Strategie ewolucyjne (ang. evolu4on strategies)

Strategie ewolucyjne (ang. evolu4on strategies) Strategie ewolucyjne (ang. evolu4on strategies) Strategia ewolucyjna (1+1) W Strategii Ewolucyjnej(1 + 1), populacja złożona z jednego osobnika generuje jednego potomka. Kolejne (jednoelementowe) populacje

Bardziej szczegółowo

Optymalizacja. Przeszukiwanie lokalne

Optymalizacja. Przeszukiwanie lokalne dr hab. inż. Instytut Informatyki Politechnika Poznańska www.cs.put.poznan.pl/mkomosinski, Maciej Hapke Idea sąsiedztwa Definicja sąsiedztwa x S zbiór N(x) S rozwiązań, które leżą blisko rozwiązania x

Bardziej szczegółowo

Techniki optymalizacji

Techniki optymalizacji Techniki optymalizacji Dokładne algorytmy optymalizacji Maciej Hapke maciej.hapke at put.poznan.pl Problem optymalizacji kombinatorycznej Problem optymalizacji kombinatorycznej jest problemem minimalizacji

Bardziej szczegółowo

SCHEMAT ROZWIĄZANIA ZADANIA OPTYMALIZACJI PRZY POMOCY ALGORYTMU GENETYCZNEGO

SCHEMAT ROZWIĄZANIA ZADANIA OPTYMALIZACJI PRZY POMOCY ALGORYTMU GENETYCZNEGO SCHEMAT ROZWIĄZANIA ZADANIA OPTYMALIZACJI PRZY POMOCY ALGORYTMU GENETYCZNEGO. Rzeczywistość (istniejąca lub projektowana).. Model fizyczny. 3. Model matematyczny (optymalizacyjny): a. Zmienne projektowania

Bardziej szczegółowo

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

MIO - LABORATORIUM. Imię i nazwisko Rok ak. Gr. Sem. Komputer Data ... 20 / EC3 VIII LAB... MIO - LABORATORIUM Temat ćwiczenia: TSP - Problem komiwojażera Imię i nazwisko Rok ak. Gr. Sem. Komputer Data Podpis prowadzącego... 20 / EC3 VIII LAB...... Zadanie Zapoznać się z problemem komiwojażera

Bardziej szczegółowo

Generowanie i optymalizacja harmonogramu za pomoca

Generowanie i optymalizacja harmonogramu za pomoca Generowanie i optymalizacja harmonogramu za pomoca na przykładzie generatora planu zajęć Matematyka Stosowana i Informatyka Stosowana Wydział Fizyki Technicznej i Matematyki Stosowanej Politechnika Gdańska

Bardziej szczegółowo

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

LABORATORIUM 4: Algorytmy ewolucyjne cz. 2 wpływ operatorów krzyżowania i mutacji na skuteczność poszukiwań AE Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny, Politechnika Śląska www.imio.polsl.pl METODY HEURYSTYCZNE LABORATORIUM 4: Algorytmy ewolucyjne cz. 2 wpływ operatorów krzyżowania

Bardziej szczegółowo

Maciej Piotr Jankowski

Maciej Piotr Jankowski Reduced Adder Graph Implementacja algorytmu RAG Maciej Piotr Jankowski 2005.12.22 Maciej Piotr Jankowski 1 Plan prezentacji 1. Wstęp 2. Implementacja 3. Usprawnienia optymalizacyjne 3.1. Tablica ekspansji

Bardziej szczegółowo

Heurystyki. Strategie poszukiwań

Heurystyki. Strategie poszukiwań Sztuczna inteligencja Heurystyki. Strategie poszukiwań Jacek Bartman Zakład Elektrotechniki i Informatyki Instytut Techniki Uniwersytet Rzeszowski DLACZEGO METODY PRZESZUKIWANIA? Sztuczna Inteligencja

Bardziej szczegółowo

Algorytmy ewolucyjne NAZEWNICTWO

Algorytmy ewolucyjne NAZEWNICTWO Algorytmy ewolucyjne http://zajecia.jakubw.pl/nai NAZEWNICTWO Algorytmy ewolucyjne nazwa ogólna, obejmująca metody szczegółowe, jak np.: algorytmy genetyczne programowanie genetyczne strategie ewolucyjne

Bardziej szczegółowo

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

Algorytmy mrówkowe (optymalizacja kolonii mrówek, Ant Colony optimisation) Algorytmy mrówkowe (optymalizacja kolonii mrówek, Ant Colony optimisation) Jest to technika probabilistyczna rozwiązywania problemów obliczeniowych, które mogą zostać sprowadzone do problemu znalezienie

Bardziej szczegółowo

Metody Optymalizacji: Przeszukiwanie z listą tabu

Metody Optymalizacji: Przeszukiwanie z listą tabu Metody Optymalizacji: Przeszukiwanie z listą tabu Wojciech Kotłowski Instytut Informatyki Politechniki Poznańskiej email: imię.nazwisko@cs.put.poznan.pl pok. 2 (CW) tel. (61)665-2936 konsultacje: wtorek

Bardziej szczegółowo

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

PLAN WYKŁADU OPTYMALIZACJA GLOBALNA ZADANIE KOMIWOJAŻERA METODY ROZWIĄZYWANIA. Specyfika zadania komiwojażera Reprezentacje Operatory PLAN WYKŁADU Specyfika zadania komiwojażera Reprezentacje Operatory OPTYMALIZACJA GLOBALNA Wykład 5 dr inż. Agnieszka Bołtuć ZADANIE KOMIWOJAŻERA Koncepcja: komiwojażer musi odwiedzić każde miasto na swoim

Bardziej szczegółowo

w analizie wyników badań eksperymentalnych, w problemach modelowania zjawisk fizycznych, w analizie obserwacji statystycznych.

w analizie wyników badań eksperymentalnych, w problemach modelowania zjawisk fizycznych, w analizie obserwacji statystycznych. Aproksymacja funkcji a regresja symboliczna Problem aproksymacji funkcji polega na tym, że funkcję F(), znaną lub określoną tablicą wartości, należy zastąpić inną funkcją, f(), zwaną funkcją aproksymującą

Bardziej szczegółowo

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

PLAN WYKŁADU OPTYMALIZACJA GLOBALNA OPERATOR KRZYŻOWANIA ETAPY KRZYŻOWANIA PLAN WYKŁADU Operator krzyżowania Operator mutacji Operator inwersji Sukcesja Przykłady symulacji AG Kodowanie - rodzaje OPTYMALIZACJA GLOBALNA Wykład 3 dr inż. Agnieszka Bołtuć OPERATOR KRZYŻOWANIA Wymiana

Bardziej szczegółowo

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

Algorytmy genetyczne. Paweł Cieśla. 8 stycznia 2009 Algorytmy genetyczne Paweł Cieśla 8 stycznia 2009 Genetyka - nauka o dziedziczeniu cech pomiędzy pokoleniami. Geny są czynnikami, które decydują o wyglądzie, zachowaniu, rozmnażaniu każdego żywego organizmu.

Bardziej szczegółowo

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

Algorytmy genetyczne. Materiały do laboratorium PSI. Studia niestacjonarne Algorytmy genetyczne Materiały do laboratorium PSI Studia niestacjonarne Podstawowy algorytm genetyczny (PAG) Schemat blokowy algorytmu genetycznego Znaczenia, pochodzących z biologii i genetyki, pojęć

Bardziej szczegółowo

Zadanie 5 - Algorytmy genetyczne (optymalizacja)

Zadanie 5 - Algorytmy genetyczne (optymalizacja) Zadanie 5 - Algorytmy genetyczne (optymalizacja) Marcin Pietrzykowski mpietrzykowski@wi.zut.edu.pl wersja 1.0 1 Cel Celem zadania jest zapoznanie się z Algorytmami Genetycznymi w celu rozwiązywanie zadania

Bardziej szczegółowo

ALHE. prof. Jarosław Arabas semestr 15Z

ALHE. prof. Jarosław Arabas semestr 15Z ALHE prof. Jarosław Arabas semestr 15Z Wykład 5 Błądzenie przypadkowe, Algorytm wspinaczkowy, Przeszukiwanie ze zmiennym sąsiedztwem, Tabu, Symulowane wyżarzanie 1. Błądzenie przypadkowe: Pierwszym krokiem

Bardziej szczegółowo

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

Algorytmy genetyczne. Materiały do laboratorium PSI. Studia stacjonarne i niestacjonarne Algorytmy genetyczne Materiały do laboratorium PSI Studia stacjonarne i niestacjonarne Podstawowy algorytm genetyczny (PAG) Schemat blokowy algorytmu genetycznego Znaczenia, pochodzących z biologii i genetyki,

Bardziej szczegółowo

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA

EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA EGZAMIN MATURALNY W ROKU SZKOLNYM 2017/2018 INFORMATYKA POZIOM ROZSZERZONY FORMUŁA OD 2015 ( NOWA MATURA ) ZASADY OCENIANIA ROZWIĄZAŃ ZADAŃ ARKUSZ MIN-R1,R2 MAJ 2018 Uwaga: Akceptowane są wszystkie odpowiedzi

Bardziej szczegółowo

6. Klasyczny algorytm genetyczny. 1

6. Klasyczny algorytm genetyczny. 1 6. Klasyczny algorytm genetyczny. 1 Idea algorytmu genetycznego została zaczerpnięta z nauk przyrodniczych opisujących zjawiska doboru naturalnego i dziedziczenia. Mechanizmy te polegają na przetrwaniu

Bardziej szczegółowo

Zaawansowane programowanie

Zaawansowane programowanie Zaawansowane programowanie wykład 3: inne heurystyki prof. dr hab. inż. Marta Kasprzak Instytut Informatyki, Politechnika Poznańska Heurystyką nazywamy algorytm (metodę) zwracający rozwiązanie przybliżone.

Bardziej szczegółowo

Algorytmy stochastyczne laboratorium 03

Algorytmy stochastyczne laboratorium 03 Algorytmy stochastyczne laboratorium 03 Jarosław Piersa 10 marca 2014 1 Projekty 1.1 Problem plecakowy (1p) Oznaczenia: dany zbiór przedmiotów x 1,.., x N, każdy przedmiot ma określoną wagę w(x i ) i wartość

Bardziej szczegółowo

Heurystyczne metody przeszukiwania

Heurystyczne metody przeszukiwania Heurystyczne metody przeszukiwania Dariusz Banasiak Katedra Informatyki Technicznej W4/K9 Politechnika Wrocławska Pojęcie heurystyki Metody heurystyczne są jednym z ważniejszych narzędzi sztucznej inteligencji.

Bardziej szczegółowo

Tabu Search (Poszukiwanie z zakazami)

Tabu Search (Poszukiwanie z zakazami) Tabu Search (Poszukiwanie z zakazami) Heurystyka - technika znajdująca dobre rozwiązanie problemu (np. optymalizacji kombinatorycznej) przy rozsądnych (akceptowalnych z punktu widzenia celu) nakładach

Bardziej szczegółowo

Techniki optymalizacji

Techniki optymalizacji Techniki optymalizacji Algorytm kolonii mrówek Idea Smuga feromonowa 1 Sztuczne mrówki w TSP Sztuczna mrówka agent, który porusza się z miasta do miasta Mrówki preferują miasta połączone łukami z dużą

Bardziej szczegółowo

Zadanie transportowe i problem komiwojażera. Tadeusz Trzaskalik

Zadanie transportowe i problem komiwojażera. Tadeusz Trzaskalik Zadanie transportowe i problem komiwojażera Tadeusz Trzaskalik 3.. Wprowadzenie Słowa kluczowe Zbilansowane zadanie transportowe Rozwiązanie początkowe Metoda minimalnego elementu macierzy kosztów Metoda

Bardziej szczegółowo

Mrówka Pachycondyla apicalis

Mrówka Pachycondyla apicalis Mrówka Pachycondyla apicalis Mrówki Pachycondyla apicalis wystepują w lasach południowego Meksyku, północnej Argentyny i Kostaryki. Wystepuja zarówno w lasach wilgotnych jak i suchych. Mrówki te polują

Bardziej szczegółowo

Planowanie drogi robota, algorytm A*

Planowanie drogi robota, algorytm A* Planowanie drogi robota, algorytm A* Karol Sydor 13 maja 2008 Założenia Uproszczenie przestrzeni Założenia Problem planowania trasy jest bardzo złożony i trudny. W celu uproszczenia problemu przyjmujemy

Bardziej szczegółowo

Algorytmy memetyczne (hybrydowe algorytmy ewolucyjne)

Algorytmy memetyczne (hybrydowe algorytmy ewolucyjne) Algorytmy memetyczne (hybrydowe algorytmy ewolucyjne) 1 2 Wstęp Termin zaproponowany przez Pablo Moscato (1989). Kombinacja algorytmu ewolucyjnego z algorytmem poszukiwań lokalnych, tak że algorytm poszukiwań

Bardziej szczegółowo

Matematyczne Podstawy Informatyki

Matematyczne Podstawy Informatyki Matematyczne Podstawy Informatyki dr inż. Andrzej Grosser Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska Rok akademicki 03/0 Przeszukiwanie w głąb i wszerz I Przeszukiwanie metodą

Bardziej szczegółowo

Znajdowanie wyjścia z labiryntu

Znajdowanie wyjścia z labiryntu Znajdowanie wyjścia z labiryntu Zadanie to wraz z problemem pakowania najcenniejszego plecaka należy do problemów optymalizacji, które dotyczą znajdowania najlepszego rozwiązania wśród wielu możliwych

Bardziej szczegółowo

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

Ćwiczenie 1 Planowanie trasy robota mobilnego w siatce kwadratów pól - Algorytm A Ćwiczenie 1 Planowanie trasy robota mobilnego w siatce kwadratów pól - Algorytm A Zadanie do wykonania 1) Utwórz na pulpicie katalog w formacie Imię nazwisko, w którym umieść wszystkie pliki związane z

Bardziej szczegółowo

Przykłady problemów optymalizacyjnych

Przykłady problemów optymalizacyjnych Przykłady problemów optymalizacyjnych NAJKRÓTSZA ŚCIEŻKA W zadanym grafie G = (V, A) wyznacz najkrótsza ścieżkę od wierzchołka s do wierzchołka t. 2 7 5 5 3 9 5 s 8 3 1 t 2 2 5 5 1 5 4 Przykłady problemów

Bardziej szczegółowo

Algorytmy sztucznej inteligencji

Algorytmy sztucznej inteligencji www.math.uni.lodz.pl/ radmat Przeszukiwanie z ograniczeniami Zagadnienie przeszukiwania z ograniczeniami stanowi grupę problemów przeszukiwania w przestrzeni stanów, które składa się ze: 1 skończonego

Bardziej szczegółowo

Algorytmy ewolucyjne (3)

Algorytmy ewolucyjne (3) Algorytmy ewolucyjne (3) http://zajecia.jakubw.pl/nai KODOWANIE PERMUTACJI W pewnych zastosowaniach kodowanie binarne jest mniej naturalne, niż inne sposoby kodowania. Na przykład, w problemie komiwojażera

Bardziej szczegółowo

Priorytetyzacja przypadków testowych za pomocą macierzy

Priorytetyzacja przypadków testowych za pomocą macierzy Priorytetyzacja przypadków testowych za pomocą macierzy W niniejszym artykule przedstawiony został problem przyporządkowania priorytetów do przypadków testowych przed rozpoczęciem testów oprogramowania.

Bardziej szczegółowo

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

Działanie algorytmu oparte jest na minimalizacji funkcji celu jako suma funkcji kosztu ( ) oraz funkcji heurystycznej ( ). Algorytm A* Opracowanie: Joanna Raczyńska 1.Wstęp Algorytm A* jest heurystycznym algorytmem służącym do znajdowania najkrótszej ścieżki w grafie. Jest to algorytm zupełny i optymalny, co oznacza, że zawsze

Bardziej szczegółowo

Odkrywanie algorytmów kwantowych za pomocą programowania genetycznego

Odkrywanie algorytmów kwantowych za pomocą programowania genetycznego Odkrywanie algorytmów kwantowych za pomocą programowania genetycznego Piotr Rybak Koło naukowe fizyków Migacz, Uniwersytet Wrocławski Piotr Rybak (Migacz UWr) Odkrywanie algorytmów kwantowych 1 / 17 Spis

Bardziej szczegółowo

Problemy z ograniczeniami

Problemy z ograniczeniami Problemy z ograniczeniami 1 2 Dlaczego zadania z ograniczeniami Wiele praktycznych problemów to problemy z ograniczeniami. Problemy trudne obliczeniowo (np-trudne) to prawie zawsze problemy z ograniczeniami.

Bardziej szczegółowo

Podejście memetyczne do problemu DCVRP - wstępne wyniki. Adam Żychowski

Podejście memetyczne do problemu DCVRP - wstępne wyniki. Adam Żychowski Podejście memetyczne do problemu DCVRP - wstępne wyniki Adam Żychowski Na podstawie prac X. S. Chen, L. Feng, Y. S. Ong A Self-Adaptive Memeplexes Robust Search Scheme for solving Stochastic Demands Vehicle

Bardziej szczegółowo

Modele i narzędzia optymalizacji w systemach informatycznych zarządzania

Modele i narzędzia optymalizacji w systemach informatycznych zarządzania Politechnika Poznańska Modele i narzędzia optymalizacji w systemach informatycznych zarządzania Joanna Józefowska POZNAŃ 2010/11 Spis treści Rozdział 1. Metoda programowania dynamicznego........... 5

Bardziej szczegółowo

Optymalizacja. Przeszukiwanie tabu

Optymalizacja. Przeszukiwanie tabu dr hab. inż. Instytut Informatyki Politechnika Poznańska www.cs.put.poznan.pl/mkomosinski, Maciej Hapke Naturalny sposób powstania algorytmu Algorytm optymalizacji lokalnej Niezdolność wyjścia z lokalnych

Bardziej szczegółowo

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

Algorytmy ewolucyjne - algorytmy genetyczne. I. Karcz-Dulęba Algorytmy ewolucyjne - algorytmy genetyczne I. Karcz-Dulęba Algorytmy klasyczne a algorytmy ewolucyjne Przeszukiwanie przestrzeni przez jeden punkt bazowy Przeszukiwanie przestrzeni przez zbiór punktów

Bardziej szczegółowo

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

Problem komiwojażera ACO. Zagadnienie optymalizacyjne, polegające na znalezieniu minimalnego cyklu Hamiltona w pełnym grafie ważonym. Problem komiwojażera ACO Zagadnienie optymalizacyjne, polegające na znalezieniu minimalnego cyklu Hamiltona w pełnym grafie ważonym. -Wikipedia Problem do rozwiązania zazwyczaj jest przedstawiany jako

Bardziej szczegółowo

Programowanie dynamiczne cz. 2

Programowanie dynamiczne cz. 2 Programowanie dynamiczne cz. 2 Wykład 7 16 kwietnia 2019 (Wykład 7) Programowanie dynamiczne cz. 2 16 kwietnia 2019 1 / 19 Outline 1 Mnożenie ciągu macierzy Konstruowanie optymalnego rozwiązania 2 Podstawy

Bardziej szczegółowo

Zadania laboratoryjne i projektowe - wersja β

Zadania laboratoryjne i projektowe - wersja β Zadania laboratoryjne i projektowe - wersja β 1 Laboratorium Dwa problemy do wyboru (jeden do realizacji). 1. Water Jug Problem, 2. Wieże Hanoi. Water Jug Problem Ograniczenia dla każdej z wersji: pojemniki

Bardziej szczegółowo

Optymalizacja ciągła

Optymalizacja ciągła Optymalizacja ciągła 5. Metoda stochastycznego spadku wzdłuż gradientu Wojciech Kotłowski Instytut Informatyki PP http://www.cs.put.poznan.pl/wkotlowski/ 04.04.2019 1 / 20 Wprowadzenie Minimalizacja różniczkowalnej

Bardziej szczegółowo

OPTYMALIZACJA W LOGISTYCE

OPTYMALIZACJA W LOGISTYCE OPTYMALIZACJA W LOGISTYCE Optymalizacja zadań bazy transportowej ( część 1 ) Opracowano na podstawie : Stanisław Krawczyk, Metody ilościowe w logistyce ( przedsiębiorstwa ), Wydawnictwo C. H. Beck, Warszawa

Bardziej szczegółowo

Część I. Uwaga: Akceptowane są wszystkie odpowiedzi merytorycznie poprawne i spełniające warunki zadania. Zadanie 1.1. (0 3)

Część I. Uwaga: Akceptowane są wszystkie odpowiedzi merytorycznie poprawne i spełniające warunki zadania. Zadanie 1.1. (0 3) Uwaga: Akceptowane są wszystkie odpowiedzi merytorycznie poprawne i spełniające warunki zadania. Część I Zadanie 1.1. (0 3) 3 p. za prawidłową odpowiedź w trzech wierszach. 2 p. za prawidłową odpowiedź

Bardziej szczegółowo

Uniwersytet Zielonogórski Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Sterowania i Systemów Informatycznych

Uniwersytet Zielonogórski Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Sterowania i Systemów Informatycznych Uniwersytet Zielonogórski Wydział Elektrotechniki, Informatyki i Telekomunikacji Instytut Sterowania i Systemów Informatycznych ELEMENTY SZTUCZNEJ INTELIGENCJI Laboratorium nr 9 PRZESZUKIWANIE GRAFÓW Z

Bardziej szczegółowo

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

Strefa pokrycia radiowego wokół stacji bazowych. Zasięg stacji bazowych Zazębianie się komórek Problem zapożyczania kanałów z wykorzystaniem narzędzi optymalizacji Wprowadzenie Rozwiązanie problemu przydziału częstotliwości prowadzi do stanu, w którym każdej stacji bazowej przydzielono żądaną liczbę

Bardziej szczegółowo

Algorytm. a programowanie -

Algorytm. a programowanie - Algorytm a programowanie - Program komputerowy: Program komputerowy można rozumieć jako: kod źródłowy - program komputerowy zapisany w pewnym języku programowania, zestaw poszczególnych instrukcji, plik

Bardziej szczegółowo

Porównanie algorytmów wyszukiwania najkrótszych ścieżek międz. grafu. Daniel Golubiewski. 22 listopada Instytut Informatyki

Porównanie algorytmów wyszukiwania najkrótszych ścieżek międz. grafu. Daniel Golubiewski. 22 listopada Instytut Informatyki Porównanie algorytmów wyszukiwania najkrótszych ścieżek między wierzchołkami grafu. Instytut Informatyki 22 listopada 2015 Algorytm DFS w głąb Algorytm przejścia/przeszukiwania w głąb (ang. Depth First

Bardziej szczegółowo

Algorytmy ewolucyjne. Łukasz Przybyłek Studenckie Koło Naukowe BRAINS

Algorytmy ewolucyjne. Łukasz Przybyłek Studenckie Koło Naukowe BRAINS Algorytmy ewolucyjne Łukasz Przybyłek Studenckie Koło Naukowe BRAINS 1 Wprowadzenie Algorytmy ewolucyjne ogólne algorytmy optymalizacji operujące na populacji rozwiązań, inspirowane biologicznymi zjawiskami,

Bardziej szczegółowo

Optymalizacja. Przeszukiwanie tabu

Optymalizacja. Przeszukiwanie tabu dr inż. Instytut Informatyki Politechnika Poznańska www.cs.put.poznan.pl/mkomosinski, Maciej Hapke Naturalny sposób powstania algorytmu Algorytm największego spadku niezdolność wyjścia z lokalnych optimów!

Bardziej szczegółowo

Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych)

Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych) Szukanie rozwiązań funkcji uwikłanych (równań nieliniowych) Funkcja uwikłana (równanie nieliniowe) jest to funkcja, która nie jest przedstawiona jawnym przepisem, wzorem wyrażającym zależność wartości

Bardziej szczegółowo

Strategie ewolucyjne. Gnypowicz Damian Staniszczak Łukasz Woźniak Marek

Strategie ewolucyjne. Gnypowicz Damian Staniszczak Łukasz Woźniak Marek Strategie ewolucyjne Gnypowicz Damian Staniszczak Łukasz Woźniak Marek Strategie ewolucyjne, a algorytmy genetyczne Podobieństwa: Oba działają na populacjach rozwiązań Korzystają z zasad selecji i przetwarzania

Bardziej szczegółowo

Rozwiązywanie problemów metodą przeszukiwania

Rozwiązywanie problemów metodą przeszukiwania Rozwiązywanie problemów metodą przeszukiwania Dariusz Banasiak Katedra Informatyki Technicznej W4/K9 Politechnika Wrocławska Reprezentacja problemu w przestrzeni stanów Jedną z ważniejszych metod sztucznej

Bardziej szczegółowo

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

Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle Badania operacyjne: Wykład Zastosowanie kolorowania grafów w planowaniu produkcji typu no-idle Paweł Szołtysek 12 czerwca 2008 Streszczenie Planowanie produkcji jest jednym z problemów optymalizacji dyskretnej,

Bardziej szczegółowo

Politechnika Wrocławska Wydział Elektroniki INFORMATYKA SYSTEMÓW AUTONOMICZNYCH. Heurystyka, co to jest, potencjalne zastosowania

Politechnika Wrocławska Wydział Elektroniki INFORMATYKA SYSTEMÓW AUTONOMICZNYCH. Heurystyka, co to jest, potencjalne zastosowania Politechnika Wrocławska Wydział Elektroniki INFORMATYKA SYSTEMÓW AUTONOMICZNYCH Autor: Łukasz Patyra indeks: 133325 Prowadzący zajęcia: dr inż. Marek Piasecki Ocena pracy: Wrocław 2007 Spis treści 1 Wstęp

Bardziej szczegółowo

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.

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. Problem porządkowania zwanego również sortowaniem jest jednym z najważniejszych i najpopularniejszych zagadnień informatycznych. Dane: Liczba naturalna n i ciąg n liczb x 1, x 2,, x n. Wynik: Uporządkowanie

Bardziej szczegółowo

Wstęp do Sztucznej Inteligencji

Wstęp do Sztucznej Inteligencji Wstęp do Sztucznej Inteligencji Algorytmy Genetyczne Joanna Kołodziej Politechnika Krakowska Wydział Fizyki, Matematyki i Informatyki Metody heurystyczne Algorytm efektywny: koszt zastosowania (mierzony

Bardziej szczegółowo

Algorytmika Problemów Trudnych

Algorytmika Problemów Trudnych Algorytmika Problemów Trudnych Wykład 9 Tomasz Krawczyk krawczyk@tcs.uj.edu.pl Kraków, semestr letni 2016/17 plan wykładu Algorytmy aproksymacyjne: Pojęcie algorytmu aproksymacyjnego i współczynnika aproksymowalności.

Bardziej szczegółowo

Schemat programowania dynamicznego (ang. dynamic programming)

Schemat programowania dynamicznego (ang. dynamic programming) Schemat programowania dynamicznego (ang. dynamic programming) Jest jedną z metod rozwiązywania problemów optymalizacyjnych. Jej twórcą (1957) był amerykański matematyk Richard Ernest Bellman. Schemat ten

Bardziej szczegółowo

Podstawy Programowania C++

Podstawy Programowania C++ Wykład 3 - podstawowe konstrukcje Instytut Automatyki i Robotyki Warszawa, 2014 Wstęp Plan wykładu Struktura programu, instrukcja przypisania, podstawowe typy danych, zapis i odczyt danych, wyrażenia:

Bardziej szczegółowo

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl

Luty 2001 Algorytmy (7) 2000/2001 s-rg@siwy.il.pw.edu.pl System dziesiętny 7 * 10 4 + 3 * 10 3 + 0 * 10 2 + 5 *10 1 + 1 * 10 0 = 73051 Liczba 10 w tym zapisie nazywa się podstawą systemu liczenia. Jeśli liczba 73051 byłaby zapisana w systemie ósemkowym, co powinniśmy

Bardziej szczegółowo

Analiza stanów gry na potrzeby UCT w DVRP

Analiza stanów gry na potrzeby UCT w DVRP Analiza stanów gry na potrzeby UCT w DVRP Seminarium IO na MiNI 04.11.2014 Michał Okulewicz based on the decision DEC-2012/07/B/ST6/01527 Plan prezentacji Definicja problemu DVRP DVRP na potrzeby UCB Analiza

Bardziej szczegółowo

Algorytmy genetyczne

Algorytmy genetyczne Politechnika Łódzka Katedra Informatyki Stosowanej Algorytmy genetyczne Wykład 2 Przygotował i prowadzi: Dr inż. Piotr Urbanek Powtórzenie Pytania: Jaki mechanizm jest stosowany w naturze do takiego modyfikowania

Bardziej szczegółowo

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1.

Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1. Teraz bajty. Informatyka dla szkół ponadpodstawowych. Zakres rozszerzony. Część 1. Grażyna Koba MIGRA 2019 Spis treści (propozycja na 2*32 = 64 godziny lekcyjne) Moduł A. Wokół komputera i sieci komputerowych

Bardziej szczegółowo

Rozdział 1 PROGRAMOWANIE LINIOWE

Rozdział 1 PROGRAMOWANIE LINIOWE Wprowadzenie do badań operacyjnych z komputerem Opisy programów, ćwiczenia komputerowe i zadania. T. Trzaskalik (red.) Rozdział 1 PROGRAMOWANIE LINIOWE 1.2 Ćwiczenia komputerowe Ćwiczenie 1.1 Wykorzystując

Bardziej szczegółowo

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

Struktury danych i złożoność obliczeniowa Wykład 7. Prof. dr hab. inż. Jan Magott Struktury danych i złożoność obliczeniowa Wykład 7 Prof. dr hab. inż. Jan Magott Problemy NP-zupełne Transformacją wielomianową problemu π 2 do problemu π 1 (π 2 π 1 ) jest funkcja f: D π2 D π1 spełniająca

Bardziej szczegółowo

Kolejny krok iteracji polega na tym, że przechodzimy do następnego wierzchołka, znajdującego się na jednej krawędzi z odnalezionym już punktem, w

Kolejny krok iteracji polega na tym, że przechodzimy do następnego wierzchołka, znajdującego się na jednej krawędzi z odnalezionym już punktem, w Metoda Simpleks Jak wiadomo, problem PL z dowolną liczbą zmiennych można rozwiązać wyznaczając wszystkie wierzchołkowe punkty wielościanu wypukłego, a następnie porównując wartości funkcji celu w tych

Bardziej szczegółowo

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

Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami Równoległy algorytm wyznaczania bloków dla cyklicznego problemu przepływowego z przezbrojeniami dr inż. Mariusz Uchroński Wrocławskie Centrum Sieciowo-Superkomputerowe Agenda Cykliczny problem przepływowy

Bardziej szczegółowo

Algorytmy genetyczne

Algorytmy genetyczne Politechnika Łódzka Katedra Informatyki Stosowanej Algorytmy genetyczne Wykład 2 Przygotował i prowadzi: Dr inż. Piotr Urbanek Powtórzenie Pytania: Jaki mechanizm jest stosowany w naturze do takiego modyfikowania

Bardziej szczegółowo

Funkcje dwóch zmiennych

Funkcje dwóch zmiennych Funkcje dwóch zmiennych Andrzej Musielak Str Funkcje dwóch zmiennych Wstęp Funkcja rzeczywista dwóch zmiennych to funkcja, której argumentem jest para liczb rzeczywistych, a wartością liczba rzeczywista.

Bardziej szczegółowo

Algorytmy ewolucyjne 1

Algorytmy ewolucyjne 1 Algorytmy ewolucyjne 1 2 Zasady zaliczenia przedmiotu Prowadzący (wykład i pracownie specjalistyczną): Wojciech Kwedlo, pokój 205. Konsultacje dla studentów studiów dziennych: poniedziałek,środa, godz

Bardziej szczegółowo

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279

Przeszukiwanie z nawrotami. Wykład 8. Przeszukiwanie z nawrotami. J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279 Wykład 8 J. Cichoń, P. Kobylański Wstęp do Informatyki i Programowania 238 / 279 sformułowanie problemu przegląd drzewa poszukiwań przykłady problemów wybrane narzędzia programistyczne J. Cichoń, P. Kobylański

Bardziej szczegółowo

Tomasz M. Gwizdałła 2012/13

Tomasz M. Gwizdałła 2012/13 METODY METODY OPTYMALIZACJI OPTYMALIZACJI Tomasz M. Gwizdałła 2012/13 Informacje wstępne Tomasz Gwizdałła Katedra Fizyki Ciała Stałego UŁ Pomorska 149/153, p.523b tel. 6355709 tomgwizd@uni.lodz.pl http://www.wfis.uni.lodz.pl/staff/tgwizdalla

Bardziej szczegółowo

Elementy Modelowania Matematycznego

Elementy Modelowania Matematycznego Elementy Modelowania Matematycznego Wykład 8 Programowanie nieliniowe Spis treści Programowanie nieliniowe Zadanie programowania nieliniowego Zadanie programowania nieliniowego jest identyczne jak dla

Bardziej szczegółowo

Zadanie 1: Piętnastka

Zadanie 1: Piętnastka Informatyka, studia dzienne, inż. I st. semestr VI Sztuczna Inteligencja i Systemy Ekspertowe 2010/2011 Prowadzący: mgr Michał Pryczek piątek, 12:00 Data oddania: Ocena: Grzegorz Graczyk 150875 Marek Rogalski

Bardziej szczegółowo

Przeszukiwanie lokalne

Przeszukiwanie lokalne Przeszukiwanie lokalne 1. Klasyfikacja algorytmów 2. Przeszukiwanie lokalne 1. Klasyfikacja algorytmów Algorytmy dokładne znajdują rozwiązanie optymalne, 1. Klasyfikacja algorytmów Algorytmy dokładne znajdują

Bardziej szczegółowo

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

Suma dwóch grafów. Zespolenie dwóch grafów Suma dwóch grafów G 1 = ((G 1 ), E(G 1 )) G 2 = ((G 2 ), E(G 2 )) (G 1 ) i (G 2 ) rozłączne Suma G 1 G 2 graf ze zbiorem wierzchołków (G 1 ) (G 2 ) i rodziną krawędzi E(G 1 ) E(G 2 ) G 1 G 2 G 1 G 2 Zespolenie

Bardziej szczegółowo

Problem Komiwojażera - algorytmy metaheurystyczne

Problem Komiwojażera - algorytmy metaheurystyczne Problem Komiwojażera - algorytmy metaheurystyczne algorytm mrówkowy algorytm genetyczny by Bartosz Tomeczko. All rights reserved. 2010. TSP dlaczego metaheurystyki i heurystyki? TSP Travelling Salesman

Bardziej szczegółowo

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania

Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania Politechnika Gdańska Wydział Elektrotechniki i Automatyki Katedra Inżynierii Systemów Sterowania Metody optymalizacji Metody bezgradientowe optymalizacji bez ograniczeń Materiały pomocnicze do ćwiczeń

Bardziej szczegółowo

Dobór parametrów algorytmu ewolucyjnego

Dobór parametrów algorytmu ewolucyjnego Dobór parametrów algorytmu ewolucyjnego 1 2 Wstęp Algorytm ewolucyjny posiada wiele parametrów. Przykładowo dla algorytmu genetycznego są to: prawdopodobieństwa stosowania operatorów mutacji i krzyżowania.

Bardziej szczegółowo

LABORATORIUM 7: Problem komiwojażera (TSP) cz. 2

LABORATORIUM 7: Problem komiwojażera (TSP) cz. 2 Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny Technologiczny, Politechnika Śląska www.imio.polsl.pl OBLICZENIA EWOLUCYJNE LABORATORIUM 7: Problem komiwojażera (TSP) cz. 2 opracował:

Bardziej szczegółowo