Zastosowania algorytmów heurystycznych do
Transkrypt
Zastosowania algorytmów heurystycznych do
Wrocław, 16.06.2009 Zastosowania algorytmów heurystycznych do sterowania systemami autonomicznymi Opracował: Janusz Taterka 1. Wstęp W systemach autonomicznych spotykamy się z zadaniami planowania działań. Rozwiązanie polega na wyborze najlepszego (według zadanego kryterium) ze wszystkich moŜliwych rozwiązań. Istotną rolę w procesie rozwiązywania problemu ma wybór sposobu postępowania prowadzącego do uzyskania określonych wyników. Wśród róŜnych technik postępowania tzw. metoda przeszukiwania jest jedną z częściej stosowanych podczas procesu rozwiązywania zadań. Spośród czynników decydujących o zastosowaniu metody przeszukiwania następujące dwa wydają się najwaŜniejsze: • dla większości problemów trudno jest z góry określić ciąg czynności prowadzących do rozwiązania. Muszą one być określone przez systematyczne analizowanie kolejnych alternatyw; • zaletą metod przeszukiwania jest łatwość formułowania zadań. Wymagane jest jedynie określenie zbioru stanów rozwiązywanego problemu, zbioru operatorów przekształcających te stany, stanu początkowego i zbioru stanów końcowych. Rozwiązanie polega na określeniu ciągu operatorów przekształcających stan początkowy w stan końcowy. Algorytmiczne realizacje metod przeszukiwania nazywane są strategiami przeszukiwania. Zbiór strategii przeszukiwania zawiera metody niewykorzystujące informacji o dziedzinie rozwiązywanego problemu - nazywane strategiami ślepymi oraz metody ściśle dopasowane do danego problemu, wykorzystujące informacje heurystyczne - strategie heurystyczne. W potocznym znaczeniu terminem heurystyka (z greckiego heuriskein - znaleźć, odkryć) określa się praktyczną, opartą na doświadczeniu, regułę postępowania, która moŜe znacznie uprościć lub skrócić proces rozwiązywania problemu, gdy metoda rozwiązania nie jest znana lub jest zawiła i czasochłonna. W algorytmice heurystyką nazywa się algorytm, który umoŜliwia znalezienie w akceptowalnym czasie przynajmniej "dostatecznie dobrego" przybliŜonego rozwiązania problemu, choć nie gwarantuje tego we wszystkich przypadkach. Metody heurystyczne naleŜą do podstawowych narzędzi sztucznej inteligencji, często uŜywane są teŜ w róŜnych działach badań operacyjnych Idea strategii heurystycznych wywodzi się z obserwacji, Ŝe dla większości problemów przestrzeń stanów zawiera dodatkowe informacje. Koszt wyznaczenia tych informacji jest niewielki, a pozwalają one dodatkowo klasyfikować stany i łatwiej wybierać najlepsze kierunki przeszukiwania. Strategie przeszukiwania przestrzeni stanów "w głąb" i "wszerz" działają "na oślep". Główne strategie heurystyczne to A* i "najpierw najlepszy". 2. Reprezentacja głównych elementów zadania Czynności wykonywane podczas rozwiązywania zadań moŜemy uwaŜać za pewnego rodzaju poszukiwania lub konstruowanie obiektów o danej charakterystyce. Rozwiązanie zadania jest często wyznaczane przez przeszukiwanie zbioru wszystkich moŜliwych stanów, zwanego przestrzenią przeszukiwania. Kompletne przebadanie takiej przestrzeni jest jednak mało efektywne, moŜliwe jedynie w przypadku małych przestrzeni. W odniesieniu do przykładu opisu agenta przeszukującego sklepy prezentowanego na wykładzie, wysoce nieefektywne lub wręcz niemoŜliwe (z punktu widzenia ograniczeń czasowych) byłoby zapoznanie się z ofertą wszystkich dostępnych sklepów internetowych lub tradycyjnych. Efektywną metodą rozwiązywania duŜych zadań jest generowanie stanów za pomocą operatorów według określonych zasad i badanie ich właściwości. Ze względu na opis zadania istotne są trzy podstawowe wymagania: a. sposób reprezentacji kaŜdego ze stanów przestrzeni przeszukiwania, tzw. kod; b. metody obliczeniowe umoŜliwiające wygenerowanie kodu kolejnego stanu na podstawie kodu danego stanu, czyli operatory; c. metody wyboru operatorów spośród zestawu moŜliwych do zastosowania, czyli strategie sterowania. Wśród najbardziej poŜądanych cech kodu stanów naleŜy wymienić jednoznaczność i uwzględnienie struktury zadania. Sposób reprezentacji powinien umoŜliwiać efektywne przekształcenia zbioru za pomocą operacji rozszczepiania. Polega ona na podziale problemu reprezentowanego przez dany stan na podproblemy, odrzucaniu części stanów i badaniu jedynie najbardziej obiecujących. Kolejne rozszczepienia mogą sprowadzić problem początkowy do problemu łatwego do rozwiązania. Zaprezentowany sposób rozwiązywania zadań jest nazywany metodą rozszczepiania i odrzucania (split-and-prune). W dziedzinie sztucznej inteligencji z powodu duŜych rozmiarów zadań, są stosowane analogiczne reguły postępowania, nazywane metodą generowania i testowania (generateand-test). Zamiast odrzucania stanów z pewnego zbioru, generuje się nowe stany i tylko część z nich wykorzystuje do dalszego badania. 3. Strategie przeszukiwania grafów Zadaniem strategii przeszukiwania jest wybór operatorów, określających gałęzie grafu przestrzeni stanów moŜliwe do wyboru podczas rozwiązywania danego problemu. Większość wyników teoretycznych dotyczących strategii przeszukiwania uzyskano dla drzew, a więc szczególnego typu grafów. Parametrami charakteryzującymi przeszukiwane grafy są: głębokość węzła, stopień rozgałęzienia węzła, stopień rozgałęzienia gałęzi. Dla zadań polegających na wyznaczeniu drogi lub drzewa rozwiązania najbardziej popularne są strategie iteracyjne. Konstruowanie takich strategii ma na celu w jak największym stopniu zmniejszyć liczbę badanych węzłów oraz zoptymalizować obszar pamięci przeznaczony na zapamiętanie stanów przejściowych. NajwaŜniejszymi kryteriami przy porównywaniu strategii są: jakość wyznaczonego rozwiązania, koszt obliczeniowy i obszar pamięci wymagany przez strategię. RozróŜniamy dwie grupy strategii przeszukiwania: ślepe oraz skierowane, czyli tzw. heurystyczne. W pierwszej grupie strategii nie wykorzystuje się informacji o zadaniu, dzięki czemu mają one charakter uniwersalny. W drugiej grupie uwzględnia się informację o przestrzeni stanów, operatorach i kryteriach celu. W strategiach ślepych porządek przeszukiwania zaleŜy wyłącznie od informacji dostarczanych przez juŜ zbadane węzły grafu i sam proces przeszukiwania. Z kolei strategie heurystyczne umoŜliwiają w pewnej mierze uwzględnianie informacji o nie zbadanej jeszcze części grafu. W szczególności przy wyborze najbardziej obiecujących kierunków moŜe być przydatna wiedza o dziedzinie danego problemu oraz charakterystyce poszukiwanych węzłów celu. 3.1. Strategia A* Podstawowym algorytmem przeszukiwania przestrzeni stanów wykorzystującym heurystyki jest algorytm A*. W algorytmie tym zakłada się, Ŝe dla danego problemu dana jest pewna dodatkowa funkcja heurystyczna h działająca na zbiorze węzłów (stanów). Wartość h(n) stanowi oszacowanie odległości węzła n do węzła docelowego, przy czym oszacowanie to jest optymistyczne, tzn. faktyczna odległość węzła n do węzła docelowego nie moŜe być mniejsza od h(n). Ponadto funkcja h(n) powinna być łatwa do wyliczenia. Przyjmijmy następujące oznaczenia: - S - zbiór węzłów (stanów), g(n) - odległość węzła n od węzła startowego (przez odległość rozumiemy sumę kosztów łuków), h(n) - funkcja heurystyczna, h*(n) - faktyczna odległość węzła n do węzła docelowego, f(n) = g(n)+h(n) - szacowana długość najkrótszej ścieŜki rozwiązania przechodzącej przez węzeł n. Zgodnie z załoŜeniem, h(n) <= h*(n) (ta waŜna własność nosi nazwę "dopuszczalności", ang. admissibility). Działanie algorytmu A* Pojedynczy krok polega na rozwinięciu wybranego węzła przestrzeni stanów. W kaŜdym kroku zbiór węzłów S dzieli się na trzy rozłączne podzbiory: • • • zbiór węzłów juŜ rozwiniętych - E, zbiór węzłów przeznaczonych do rozwinięcia ("kontur") - C, pozostałe, jeszcze "nieodwiedzone" węzły. KaŜdy krok składa się z następujących czynności: a) niech v będzie węzłem konturu (zbioru C), dla którego wartość g(n)+h(n) jest najmniejsza, b) jeśli v jest węzłem docelowym, zakończ działanie, c) przenieś v ze zbioru C do zbioru E, d) do zbioru C dodaj te wszystkie następniki węzła v, które albo nie naleŜą do E, albo naleŜą do E, ale ścieŜka przechodząca przez v jest krótsza niŜ wcześniej znaleziona ścieŜka (w drugim przypadku usuń taki węzeł ze zbioru E). Funkcja heurystyczna f(w) w strategii A* jest sumą dwóch składników: F(w)=h(w)+g(w) WyraŜenie to oznacza, Ŝe dla danego węzła w jest wyznaczana najpierw w sposób heurystyczny estymacja h(w) kosztu drogi łączącej węzeł w z węzłem celu. Następnie wyznacza się dla węzła w koszt drogi łączącej węzeł początkowy p z węzłem w, co reprezentuje składnik g(w). Pomocą w przeszukiwaniu drzewa stanów jest równieŜ funkcja heurystyczna, określająca jakość aktualnego węzła. Funkcja heurystyczna powinna w tym przypadku uwzględnić w swej ocenie zarówno przybliŜoną odległość od węzła celu, koszt drogi od węzła początkowego do węzła aktualnego, jak i złoŜoność procesu obliczeniowego. Dla tego konkretnego algorytmu najwaŜniejsze są długość drogi w grafie oraz przybliŜona odległość od celu. Algorytm A* z iteracyjnym pogłębianiem słuŜy do znajdowania najlepszego istniejącego rozwiązania. Algorytm A* z iteracyjnym pogłębianiem realizuje schemat algorytmu w głąb dla kolejnych iteracji z przyjętą wartością progu, dotyczącego wartości funkcji heurystycznych. JeŜeli wartość funkcji heurystycznej badanego węzła jest większa od zadanego progu, to następuje powrót. W jednej iteracji są badane wszystkie węzły z wartością funkcji heurystycznej mniejszą od zadanego progu; w kolejnych iteracjach algorytmu próg ten jest zwiększany. Zaletą algorytmu A* z iteracyjnym pogłębianiem w porównaniu z tradycyjnym algorytmem A* jest zmniejszenie wymagań dotyczących pamięci komputera. 3.2. „Najpierw najlepszy” Strategia „najpierw najlepszy” (best-first) wykorzystuje pewną informacje heurystyczną związaną z rozwiązywaniem problemem do zminimalizowania kosztów przeszukiwania. W tym celu stosuje się pewną funkcję heurystyczną, która wyraŜa ocenę węzła ze względu na następujące kryteria: 1. zbieŜność, czyli osiągnięcia celu; 2. najmniejszego kosztu drogi wyznaczonej od węzła początkowego, przez węzeł w, do węzła końcowego; 3. najmniejszej złoŜoności obliczeniowej procesu przeszukiwania. Do dalszego rozszerzania wybieramy „najlepszy” węzeł spośród wszystkich węzłów rozpatrywanych do tej pory, nie zaleŜnie od ich połoŜenia w grafie. Przyjmujemy, Ŝe węzeł najbardziej obiecujący ma najmniejsza wartość funkcji heurystycznej. Działanie strategii „najpierw najlepszy” moŜna przedstawić na podstawie przykładu tzw. „pięciu hetmanów”. Zadanie to polega na odpowiednim ustawieniu np. pięciu hetmanów na szachownicy o wymiarach 5x5, przy czym Ŝaden z hetmanów nie moŜe atakować innego. Graf w przestrzeni stanów jest generowany zaczynając od stanu początkowego, który odpowiada pustej szachownicy. Hetmani są umieszczani w kolejnych wierszach o numerach od 1 do 5. Węzły na kaŜdym poziomie drzewa reprezentują moŜliwe pozycje hetmanów w kolejnych wierszach. Do oceny aktualnej pozycji jest wykorzystywana funkcja heurystyczna f. Jej wartość moŜe być wyznaczona w róŜny sposób, np. jest to minimalna liczba nie atakowanych pól w wolnych wierszach (pozycja jest bardziej obiecująca, gdy liczba ta jest większa). NajwaŜniejszą operacją, odróŜniającą strategię „najpierw najlepszy” od wcześniej omawianych algorytmów, jest uporządkowanie listy (zawierającej węzły grafu przestrzeni stanów z niewykorzystanymi krawędziami) według wartości funkcji heurystycznej. Rozszerzenie węzłów jest dokonywane, podobnie jak w strategii w głąb, przez ekspansję, czyli generowanie wszystkich potomków. 4. Wyznaczanie funkcji heurystycznych Aby proces przeszukiwania heurystycznego mógł być efektywnie przeprowadzony przez komputer, naleŜy opracować prostą metodę wyznaczenia funkcji heurystycznej. Jeśli problem moŜna formalnie zapisać w postaci zadania przeszukiwania, to istnieje prosta metoda generowania funkcji heurystycznych. Metoda polega na uproszczeniu zadania (np. dodanie lub eliminacja operatorów) tak, by w powstałym zadaniu koszt wyznaczenia rozwiązania był niewielki. Następnie dla zadań częściowych wykonywany jest algorytm rozwiązujący zadanie uproszczone. Koszt wykonania algorytmu dla zadania uproszczonego jest szukanym oszacowaniem heurystycznym. Sposób wyznaczania funkcji heurystycznej zilustrujemy przykładem układanki „gra w ósemkę”. Zasady tej układanki są następujące: dany jest 9-polowy kwadrat z ośmioma płytkami; płytki moŜna przesuwać na wolne pole (z pól sąsiednich w pionie i w poziomie); celem jest ustawienie płytek w Ŝądanej kolejności. Formalnie taką układankę moŜna opisać za pomocą notacji rachunku predykatów. Wystarczą trzy następujące predykaty: Miejsce(x,y)-płytka x na miejscu y Puste(y)- miejsce y puste Sd(y,x)- y jest sąsiadem x Opis aktualnego stanu układanki uzyskamy podając odpowiednie warunki dla wszystkich płytek. Zasada przesunięcia płytki x z miejsca y na miejsce z składa się z trzech części: a. warunki zastosowania: miejsce (x,y) puste (y) sd(y,z) b. stan do dodania: miejsce (x,z) puste (y) c. stan do usunięcia: miejsce (x,y) puste (z) JeŜeli z warunków wstępnych usuniemy predykaty puste oraz sd, to otrzymamy układankę, w której płytki mogą być zamienione miejscami bez Ŝadnych ograniczeń. Z kolei jeŜeli z warunków wstępnych usuniemy predykat puste, to otrzymamy układankę, w której płytki mogą być zamieniane miejscami. W przypadku usunięcia predykatu sd otrzymamy układankę, w której płytki mogą być przesuwne na wolne pole z dowolnego połoŜenia. Rozwiązanie tych uproszczonych zadań moŜe posłuŜyć do wyznaczenia estymacji heurystycznej stanów oryginalnej „gry w ósemkę”. Zadanie bez predykatów puste i sd wyznacza funkcję heurystyczną, której wartością jest liczba płytek w połoŜeniu róŜnym od docelowego. Zadanie bez predykatu puste generuje funkcje heurystyczną, której wartością jest suma odległości w pionie i w poziomie płytek od ich docelowego połoŜenia. Zadanie bez predykatu sd określa funkcję heurystyczną, której wartością jest suma poprzednio opisanych odległości oraz odległości skośnej płytek od ich docelowego połoŜenia. Przykład rozwiązywania 8-ki metodą A* źródło:http://starbase.trincoll.edu/~ram/cpsc352/notes/heuristics.html f(n) = g(n) + h(n) g(n) - odległość od startu do stanu n. h(n) - liczba elementów na złym miejscu. Zadania rozwiązywane przez strategie przeszukiwania Praktyczne problemy rozwiązywane przez strategie przeszukiwania moŜna podzielić na trzy grupy: wyznaczanie drogi lub drzewa w grafie, gry dwuosobowe, problemy spełniające zadane ograniczenia. Wyznaczanie drogi lub drzewa rozwiązania Jednym z podstawowych sposobów reprezentacji problemów praktycznych jest skonstruowanie przestrzeni rozwiązania jako grafu. Węzły grafu reprezentują stany. Krawędzie oznaczają operatory odwzorowujące jedne stany przestrzeni stanów na inne stany tej przestrzeni. JeŜeli zadanie polega na znalezieniu ciągu operatorów przekształcających jeden wyróŜniony stan (stan początkowy) w inny z wyróŜnionych stanów (stan końcowy), to w odpowiadającym temu zadaniu grafie mamy do czynienia z problemem wyznaczania drogi z węzła początkowego do węzła celu. Zadaniem strategii przeszukiwania jest wybór operatorów – krawędzi moŜliwych dla danego stanu – węzła. Gry dwuosobowe Gry w dalszym ciągu stanowią doskonałą metodę badania róŜnych aspektów ludzkiej inteligencji. Przykładowo szachy charakteryzują się stosunkowo niewielką liczbą moŜliwych posunięć (w danym stanie gry), małym zbiorem dobrze zdefiniowanych reguł opisujących zasady gry, pełną informacją w kaŜdym stanie gry. PowyŜsze cechy dają moŜliwość znalezienia rozwiązania z wykorzystaniem heurystycznych strategii przeszukiwania. Problemy spełnienia ograniczeń Wiele problemów praktycznych moŜna modelować następująco: zdefiniowany jest zbiór zmiennych, zbiory wartości tych zmiennych oraz zbiory ograniczeń zmiennych. Proste ograniczenia określają podzbiór wszystkich moŜliwych wartości zmiennej. Ograniczenia binarne określają jakie pary wartości dwóch zmiennych są moŜliwe. Literatura: 1. Leonard Bolc, Jerzy Cytowski „Metody przeszukiwania heurystycznego”, Warszawa 1991. 2. Wykład mgr Filipa Gralińskiego „Sztuczna Inteligencja” http://ceti.pl/~gralinski/szi520/zajiv.html 3. Wykłady prof. Włodzisława Ducha: Szukanie heurystyczne I i II http://www.phys.uni.torun.pl/~duch/Wyklady/AI/AI2-2.ppt http://www.phys.uni.torun.pl/~duch/Wyklady/AI/AI2-3.ppt