elementy sztucznej inteligencji. materiał udostępniony na ...stw/esi/search.pdfelementy sztucznej...

24
Elementy sztucznej inteligencji. Material udostępniony na prawach rękopisu Slawomir T.Wierzchoń Instytut Podstaw Informatyki PAN Instytut Informatyki Uniwersytetu Gdańskiego 2 marca 2009

Upload: lydat

Post on 01-Mar-2019

219 views

Category:

Documents


0 download

TRANSCRIPT

Elementy sztucznej inteligencji.Materiał udostępniony na prawach rękopisu

Sławomir T.WierzchońInstytut Podstaw Informatyki PAN

Instytut Informatyki Uniwersytetu Gdańskiego

2 marca 2009

2

Spis treści

1 Wstęp 51.1 Krótka historia SI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7

1.1.1 Nieśmiałe próby (1943 – 1956) . . . . . . . . . . . . . . . . . . . . . 71.1.2 Wczesny entuzjazm (1952 – 1969) . . . . . . . . . . . . . . . . . . . 81.1.3 Doza realizmu (1966-1974) . . . . . . . . . . . . . . . . . . . . . . . 91.1.4 Systemy oparte na wiedzy (1969 – 1979) . . . . . . . . . . . . . . . 101.1.5 SI wkracza do przemysłu (1980-1988) . . . . . . . . . . . . . . . . . 111.1.6 Współczesność (1987 –) . . . . . . . . . . . . . . . . . . . . . . . . 11

1.2 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2 Rozwiązywanie problemów 132.1 Systemy sztucznej inteligencji . . . . . . . . . . . . . . . . . . . . . . . . . 132.2 Przestrzeń stanów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.3 Klasyfikacja problemów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162.4 Rozwiązywanie problemów w przestrzeni stanów . . . . . . . . . . . . . . . 172.5 Ślepe strategie przeszukiwania . . . . . . . . . . . . . . . . . . . . . . . . . 19

2.5.1 Przeszukiwanie wszerz i w głąb . . . . . . . . . . . . . . . . . . . . 192.5.2 Strategia równomiernego kosztu . . . . . . . . . . . . . . . . . . . . 202.5.3 Ograniczone przeszukiwanie w głąb . . . . . . . . . . . . . . . . . . 222.5.4 Strategia iterowanego pogłębiania . . . . . . . . . . . . . . . . . . . 232.5.5 Przeszukiwanie dwukierunkowe . . . . . . . . . . . . . . . . . . . . 232.5.6 Porównanie ślepych strategii przeszukiwania . . . . . . . . . . . . . 23

2.6 Przeszukiwanie heurystyczne . . . . . . . . . . . . . . . . . . . . . . . . . . 242.6.1 Algorytm zachłanny . . . . . . . . . . . . . . . . . . . . . . . . . . 242.6.2 Algorytm A∗ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 272.6.3 Algorytm IDA∗ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 282.6.4 Algorytm SMA∗ . . . . . . . . . . . . . . . . . . . . . . . . . . . . 292.6.5 Algorytmy iteracyjnego poprawiania . . . . . . . . . . . . . . . . . 29

2.6.5.1 Algorytm wspinaczkowy . . . . . . . . . . . . . . . . . . . 292.6.5.2 Symulowane wyżarzanie . . . . . . . . . . . . . . . . . . . 292.6.5.3 Algorytmy ewolucyjne . . . . . . . . . . . . . . . . . . . . 29

3 Elementy logiki formalnej 253.1 Języki formalne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25

3.1.1 Formuły . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253.1.2 Teoria dowodu a teoria modeli . . . . . . . . . . . . . . . . . . . . . 26

3

4 SPIS TREŚCI

3.1.3 Niesprzeczność, zupełność i rozstrzygalność . . . . . . . . . . . . . . 273.2 Logika zdań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

3.2.1 Język formalny dla logiki zdań . . . . . . . . . . . . . . . . . . . . . 283.2.2 Interpretacja formuł logiki zdań . . . . . . . . . . . . . . . . . . . . 29

Rozdział 2

Rozwiązywanie problemów

Zdolność rozwiązywania problemów to jedna z cech inteligencji. Dlatego badacze zajmującysię sztuczną inteligencja poświęcają temu problemowi tak wiele uwagi. Chodzi przy tymo rozwiązywanie nie tylko dobrze sformułowanych i specyficznych zadań, ale o umiejęt-ność i gotowość systemu do rozwiązywania dowolnych problemów. Takim problemem możewięc być zarówno znalezienie funkcji pierwotnej, wyznaczenie wzoru strukturalnego pewnejsubstancji przy zadanym jej wzorze sumarycznym i pewnych dodatkowych informacjach,czy też rekomendacja diagnozy wraz ze stosownym uzasadnieniem, ale także rozwiązaniełamigłówki, rozegranie partii szachów, czy znalezienie najkrótszej drogi w grafie.

W dalszym ciągu przez „problem” będziemy rozumieli cel postawiony przed agentem1

wraz z zestawem środków zapewniających osiągnięcie owego celu. Specyfikację sposobu wy-korzystania dostępnych środków, która zapewnia osiągnięcie celu nazwiemy rozwiązaniemproblemu, natomiast proces tworzenia takiej specyfikacji – przeszukiwaniem.

Obecny rozdział poświęcamy przeglądowi zagadnień związanych z tak rozumianym roz-wiązywaniem problemów.

2.1 Systemy sztucznej inteligencji

Efektem rozważań dotyczących rozwiązywania problemów są inteligentne systemy zdolnedo rozwiązywania stawianych im zadań. Nazywane są one przez Nilssona [8] systemamiprodukcji, a przez Russela i Norviga [10] – agentami działającymi w oparciu o cele.

Naszkicowane wyżej spojrzenie na rozwiązywanie problemów pozwala wyróżnić trzyzasadnicze elementy: dane, które charakteryzują zarówno postawiony cel jak też i kolejneetapy rozwiązania, operacje utożsamiane ze wspomnianym wcześniej zestawem środków,oraz strategię sterowania odpowiedzialną za wybór kolejnych operacji.

Oddzielne traktowanie owych elementów jest charakterystyczną cechą systemów pro-dukcji. Pozwala to z jednej strony zachować uniwersalność tworzonych systemów, a z dru-giej – skoncentrować uwagę na strategiach tworzenia rozwiązania z elementów zawartychw zbiorze operacji. Takie statyczne spojrzenie na inteligentne systemy jest typowe dla fazykonstrukcji systemów opartych na wiedzy.

Jednakże rozwiązując problemy działamy nie w izolacji, lecz w określonym środowi-sku. Ponadto stawiane cele mogą ulegać pewnym modyfikacjom, może się zmieniać także

1coś o agencie

14 ROZDZIAŁ 2. ROZWIĄZYWANIE PROBLEMÓW

wachlarz dostępnych środków. Dlatego wspomniane wyżej pojęcie agenta, który reagujena bodźce płynące ze środowiska i aktywnie wpływa na owo środowisko może okazać siębardziej praktyczne i realistyczne. Agent traktowany jest zazwyczaj jako pewna funkcjaodwzorowująca bodźce na akcje, przy czym owa funkcja może być implementowana na róż-ne sposoby: jako system produkcji, jako sieć neuronowa, sieć bayesowska, itp. Podstawowącechą agenta powinna być racjonalność przejawiająca się między innymi podejmowaniemnajlepszych (zgodnie z pewnym ustanowionym kryterium) decyzji w każdej sytuacji i kon-sekwentnym zmierzaniem do celu.

Typowy sposób rozwiązywania problemów przedstawiono w postaci algorytmu 2.1.

Algorytm 2.1 System produkcji przeznaczony do rozwiązywanie problemówWE: g – zadany cel

O – zbiór operacjiS – etapy rozwiązania (stany)

WY: r – rozwiązanie problemus := stan-początkowy;r := nildopóki (s 6= g) {

wybierz najlepszą operację o ∈ Ododaj o do r, tzn. r := r + ozastosuj operację o do stanu s przekształcając go w nowy stan, tzn. s := o(s)

}zwróć r

Jest to właściwie typowe przeszukiwanie metodą generuj-i-testuj polegające na poszu-kiwaniu rozwiązania poprzez serię rozwiązań cząstkowych, przekształcających kolejne fazyprocesu poszukiwania rozwiązywania za pomocą odpowiednio dobieranych operatorów. Zawybór konkretnego operatora odpowiada zastosowana strategia wynikająca z przyjętej me-tody przeszukiwania.

2.2 Przestrzeń stanów

Strategia przeszukiwania przyjmuje szczególnie prostą i elegancką postać jeżeli założymy,że przeszukiwanie odbywa się w tzw. przestrzeni stanów reprezentującej wszystkie możliwestany między etapem początkowym, a etapem końcowym rozwiązywanego problemu.

Pojęcie stanu jest szeroko stosowane w naukach fizycznych oraz w automatyce, którama ścisły związek z cybernetyką – dyscypliną związaną z początkowym okresem rozwojusztucznej inteligencji. Także rozwiązując problemy wygodnie jest mówić o stanach. Prze-strzeń stanów można traktować jako pewien graf. Węzłami tego grafu są właśnie stany,natomiast operatory pozwalają wskazać sąsiednie stany, tzn. stany s i s′ są swoimi sąsiada-mi jeżeli istnieje taki operator o, który przeprowadza stan s w stan s′. W zależności od tegoczy skutki wykonywanych operacji są odwracalne, czy nie, graf będzie algo nieskierowany,albo skierowany.

Pojęcia stanu i przestrzeni stanów ilustrujemy dwoma przykładami.

2.2. PRZESTRZEŃ STANÓW 15

Przykład 2.2.1. (8-ka, lub 8 puzzle) Jest to znana układanka złożona z 9 ruchomych pól.Osiem z nich ponumerowanych jest kolejnymi liczbami naturalnymi, a jedno (przesuwne)pole jest puste. Owo pole należy przesuwać w taki sposób, aby uzyskać zadaną konfiguracjępozostałych pól – por. rysunek 2.1. Konkretna konfiguracja reprezentuje tu aktualny stan,natomiast zestaw ruchów jest równoważny zestawowi dostępnych operacji. Na rysunku 2.2pokazano trzy możliwe do uzyskania stany po zastosowaniu do aktualnego stanu dostępnychoperatorów. ¤

8

2

1

7 6 5

8 4

3 1 2 3

4

567

Rysunek 2.1: Stan początkowy i docelowy w zadaniu 8-ka.

3

DPL

382

41481

3232

481

567567567

2

1

7 6 5

8 4

Rysunek 2.2: Fragment drzewa poszukiwań w problemie 8-ka. Kolejność przesuwania pu-stej płytki: w lewo (L), w prawo (P ), w górę (G), w dół (D). Jeżeli pewien ruch jestniedopuszczalny w danym stanie, pomija się go.

Przykład 2.2.2. (Wieża Hanoi) Jest to kolejna, równie popularna, łamigłówka – por.rysunek 2.3 . Dane sa trzy słupki, a na jednym z nich ulokowano trzy2 dyski o różnychśrednicach. Zadanie polega na przeniesieniu wszystkich dysków na inny słupek, przy czym:(a) jednorazowo można przenieść tylko jeden dysk, (b) pojedynczy dysk można nałożyćalbo na pusty słupek, albo na słupek, na którym znajduje się już dysk o większej średnicy.Jeżeli stany będziemy reprezentować jako trójki s m l gdzie poszczególne pozycje określająnumer słupka, na którym znajduje się mały (s), średni (m) i duży (l) dysk, to przestrzeństanów ma postać jak na rysunku 2.3. ¤

2Jest to najprostszy wariant łamigłówki. W ogólnym przypadku można rozważać wieżę zbudowaną zk ­ 3 dysków.

16 ROZDZIAŁ 2. ROZWIĄZYWANIE PROBLEMÓW

Rysunek 2.3: Wieża Hanoi. Przedstawionej tu sytuacji odpowiada stan (1 1 1).

Rysunek 2.4: Przestrzeń stanów dla zadania wieża Hanoi. Stanem początkowym jest stan(1 1 1), a stanem końcowym (3 3 3).

Inne, o bardziej praktycznym zabarwieniu, problemy to: zadanie komiwojażera, poszu-kiwanie najkrótszej drogi łączącej wybrane punkty (np. miasta na mapie), harmonogramo-wanie, planowanie ruchów robota, itp.

Należy podkreślić, że na efektywność rozwiązywania problemów wpływa przyjęta re-prezentacja zadania. Przede wszystkim powinno wybierać się takie reprezentacje, któregwarantują minimalny rozmiar przestrzeni stanów. Wybór odpowiedniej reprezentacji jestsztuką. Przykładowo, w zadaniu 8-królowych polegającym na takim rozmieszczeniu figur naszachownicy o wymiarach 8× 8, aby żadna z nich nie zagrażała pozostałym – por. rysunek2.5. Z warunków zadania wynika, że każda figura powinna być ulokowana w innym wierszui innej kolumnie niż pozostałe figury. Zatem konkretny stan wystarczy reprezentować przez8-wymiarowy wektor, którego i-ta pozycja wskazuje numer wiersza, w którym występujefigura zajmująca pole należące do i-tej kolumny.

2.3 Klasyfikacja problemów

Russel i Norvig [10] wyróżniają, w zależności od tego jaka wiedzą o środowisku dysponujeagent, cztery klasy problemów.

Jeżeli jego wiedza jest doskonała, mamy do czynienia z problemami jednostanowymi,w których zastosowanie operatora o do stanu s pozwala uzyskać kolejny, jednoznaczniewyznaczony, stan s′ = o(s). Oba wcześniejsze przykłady są ilustracją takich właśnie pro-blemów.

Jeżeli wiedza o świecie jest niedoskonała – mamy do czynienia z problemami wielosta-nowymi. Np. agent nie ma pewności jaki jest stan początkowy s0; wie jedynie, że s0 ∈ S0,gdzie S0 jest pewnym podzbiorem zbioru stanów. W takim wypadku działanie operato-rem o przeprowadza podzbiór St w inny podzbiór St+1 gdzie t = 0, 1, . . . jest indeksem

2.4. ROZWIĄZYWANIE PROBLEMÓW W PRZESTRZENI STANÓW 17

1 4

8

7

6

5

4

3

2

1

876532

Q

1 2 3 4 5 6 7 8

1

2

3

4

5

6

7

8

Q

Q

Q

Q

Q

Q

Q

Rysunek 2.5: Problem 8-królowych. (a) Pola blokowane przez figurę ustawioną w zaznaczo-nym czarnym kolorem polu (4, 5). (b) Konfiguracja (3 1 4 7 6 8 5 2) wraz z zaznaczo-nymi pogrubioną linią trzema niewłaściwymi położeniami figur.

oznaczającym kolejny etap. Z podobnym efektem mamy do czynienia wówczas, gdy efektzastosowania operatora o prowadzi do różnych skutków (np. na skutek niedoskonałościsprzętu realizującego dana operację).

Jeżeli przejścia do kolejnych stanów są obarczone ryzykiem błędu mamy do czynie-nia z trzecią grupą problemów, problemów awaryjnych, które wymagają bardzo ostrożnegorozwiązywania. Po niemal każdej operacji należy sprawdzać, czy doprowadziła ona do ocze-kiwanego stanu, czy też należy wykonać dodatkowe czynności „naprawcze”. Z taką sytuacjąstykamy się np. w zadaniach planowania.

Wreszcie do czwartej, najtrudniejszej, grupy należą te problemy, w których agent nieposiada informacji o skutkach podejmowanych działań. Wyobraźmy sobie, że musimy wy-znaczyć trasę z miasta A do miasta B w nieznanym kraju i bez korzystania z mapy. Sąto problemy eksploracyjne, do rozwiązywania których stosuje się zaawansowane technikiuczenia maszynowego (np. tzw. uczenie ze wzmocnieniem).

2.4 Rozwiązywanie problemów w przestrzeni stanów

Podstawowymi elementami definicji problemu, w ramach rozważanego obecnie formalizmu,są stany i operacje. Bardziej precyzyjnie, aby stosować formalizm przestrzeni stanów,musimy wyróżnić:

– Stan początkowy s0, ewentualnie zbiór stanów początkowych S0.– Stan docelowy g, ewentualnie zbiór stanów docelowych G.– Zbiór dostępnych operacji, które mogą być stosowane w określonym stanie. Często

operacje nazywane są ruchami, szczególnie gdy agent rozwiązuje gry lub łamigłówkilogiczne.

18 ROZDZIAŁ 2. ROZWIĄZYWANIE PROBLEMÓW

W takim kontekście przestrzeń stanów to nic innego jak zbiór stanów osiągalnych zestanu początkowego po wykonaniu skończonej sekwencji ruchów.

Formalnie należałoby określić jeszcze procedurę testującą, czy aktualny stan jest stanemkońcowym, lub też czy należy do zbioru stanów końcowych.

Dowolną ścieżkę łączącą stan początkowy ze stanem spełniającym warunek zatrzyma-nia, a więc takim stanem, dla którego powyższa procedura zwraca wartość true nazywamyrozwiązaniem. Aby wybierać między alternatywnymi rozwiązaniami, należy przypisać imokreślony koszt. Ten koszt, nazywany też kosztem ścieżki, jest zazwyczaj sumą kosztówzwiązanych ze stosowaniem operacji generujących kolejne węzły leżące na ścieżce łączącejstan początkowy z końcowym.

Podstawowy algorytm przeszukiwania przestrzeni stanów zapisano w postaci pseudoko-du 2.2. Przestrzeń stanów wygodnie jest wyobrażać sobie jako graf GS = (V,E), któregozbiór węzłów V reprezentuje wszystkie możliwe stany rozwiązywanego problemu, zaś E tozbiór krawędzi, przy czym para (v, w) ∈ E tylko wtedy, gdy istnieje operacja przeprowa-dzająca stan v w nowy stan w. Jeżeli dozwolone jest cofanie ruchów, mamy do czynienia zprocesem odwracanym i GS jest grafem nieskierowanym. W przypadku przeciwnym mamydo czynienia z grafem skierowanym.

Algorytm 2.2 Podstawowy algorytm przeszukiwania przestrzeni stanówWE: R – lista węzłów do rozwinięcia

W – lista zbadanych węzłówN – operator zwracający listę sąsiadów danego węzław0 – węzeł początkowywg – węzeł końcowy

WY: p – ścieżka łącząca węzeł początkowy z węzłem końcowymbegin

W := {w0}R := N(w0)dopóki nie osiągnięto węzła końcowego {

wybierz węzeł w z listy Rdodaj ten węzeł do listy odwiedzonych węzłów, W := W ∪ {w}dodaj nieodwiedzonych sąsiadów węzła w do listy R, tzn. R := R ∪ (N(w)\W

}zwróć ścieżkę p łączącą węzeł w0 z węzłem wg

end

Należy zauważyć, że nie jest konieczne (a czasami wręcz niemożliwe) przechowywaniew pamięci komputera całej przestrzeni stanów. Dysponując grafem GS można łatwoskonstruować funkcję N : V → 2V , która każdemu węzłowi w ∈ GS przypisuje zbiór jegosąsiadów. W istocie N(w) to nic innego, jak zbiór stanów, w jakie można przekształcićaktualny stan reprezentowany przez węzeł w za pomocą dostępnych operacji (ruchów).Wówczas, wychodząc z pewnego węzła w0 i odwiedzając jego sąsiadów, a następniesąsiadów tych sąsiadów itd., można wędrować po całym grafie. Taką filozofię reprezentujealgorytm 2.2. Lista R zawiera węzły, które można odwiedzić w kolejnych krokach,natomiast lista W zawiera węzły już zbadane. Analizując zawartość tej listy rekonstruujesię następnie ścieżkę łączącą węzeł początkowy z węzłem końcowym. W takim formalizmie

2.5. ŚLEPE STRATEGIE PRZESZUKIWANIA 19

problem poszukiwania rozwiązania sprowadza się do wyboru strategii odpowiedzialnej zapobieranie kolejnych węzłów z listy R. Strategie przeszukiwania oceniane są ze względu nacztery aspekty:

(a) Kompletność: czy strategia pozwala zawsze znaleźć rozwiązanie, o ile ono istnieje?(b) Złożoność czasowa: ile czasu zajmie znalezienie rozwiązania?(c) Złożoność pamięciowa: jak dużej pamięci potrzeba, aby uzyskać rozwiązanie?(d) Optymalność: Czy strategia gwarantuje znalezienie najlepszego spośród wszystkich

możliwych rozwiązań?

Ogólnie, strategie dzieli się na:

(i) ślepe strategie przeszukiwania, a więc takie, w których wybór kolejnego węzła zależyod porządku, w jakim kolejne węzły są dodawane do listy R, oraz

(ii) strategie heurystyczne (poinformowane), w których wybór węzła zależy od pewnychpriorytetów nadawanych węzłom z listy R poprzez odwołanie się do wiedzy heury-stycznej.

Poniżej omawiamy szczegółowo reprezentantów obu typów strategii.

2.5 Ślepe strategie przeszukiwania

Wyróżnia się sześć strategii ślepego przeszukiwania. Różnią sie one nie tylko porządkiem,w jakim rozwijane są kolejne węzły, ale także i jakością zwracanych rozwiązań.

2.5.1 Przeszukiwanie wszerz i w głąb

Zarówno przeszukiwanie grafu GS metodą w głąb jak i wszerz to podstawowe algorytmygrafowe. Posiadają one szerokie zastosowanie jako składowe bardziej złożonych algorytmów.Np. przeszukiwanie wszerz wykorzystywane jest w algorytmie badania spójności grafu, aprzeszukiwanie w głąb stosowane jest w takich algorytmach, jak: sortowanie topologiczne,algorytm Kruskala czy Prima.

W pierwszym przypadku R implementowane jest jako stos, albo kolejka LIFO3. Innymisłowy, sąsiedzi aktualnego węzła w wstawiani są na początek listy, z której pobiera siępierwszy element. Z kolei w przypadku strategii wszerz elementy zbioru N(w) dodawanesą na koniec listy R; mamy tu więc do czynienia z kolejką typu FIFO4

Aby porównać obie te strategie załóżmy, że każdy węzeł posiada dokładnie b następnikówi załóżmy, że węzeł celowy znajduje się w grafie GS na głębokości d. W przypadku metodywszerz należy w najgorszym razie rozwinąć

1 + b+ b2 + · · ·+ bd

3Skrót od Last In, First Out, tzn. „ostatni przyszedł, pierwszy obsłużony”.4Skrót od FIFO, tzn. „pierwszy przyszedł, pierwszy obsłużony”.

20 ROZDZIAŁ 2. ROZWIĄZYWANIE PROBLEMÓW

węzłów. Zatem przeszukiwanie to charakteryzuje się wykładniczą złożonością czasową ipamięciową. Jednak gwarantuje ono znalezienie rozwiązania, a ponadto jest to rozwiązanieoptymalne.

Przeszukiwanie metodą w głąb charakteryzuje się wykładniczą złożonością czasowąO(bm) gdzie m jest głębokością drzewa poszukiwań oraz liniową złożonością pamięciowąO(bm). Nie gwarantuje jednak znalezienia rozwiązania, ani jego optymalności.

Mówi się, że jeżeli celem przeszukiwania jest odnalezienie docelowego węzła o pożąda-nych własnościach, to strategia w głąb ma szanse znaleźć ten węzeł szybciej niż strategiawszerz. Jeżeli w przestrzeni przeszukiwań istnieją ścieżki nieskończonej długości, nie możnazagwarantować, że strategia w głąb nie wybierze takiej właśnie ścieżki. Natomiast jeżeli ce-lem przeszukiwania jest znalezienie najkrótszej ścieżki łączącej węzeł początkowy z węzłemcelowym, to stosując strategię wszerz mamy gwarancję jej wyznaczenia, nawet w przypadkuwystępowania nieskończonych ścieżek.

2.5.2 Strategia równomiernego kosztu

Chociaż przeszukiwanie wszerz gwarantuje znalezienie „najpłytszego” rozwiązania, w ogól-nym przypadku nie musi to być rozwiązanie najtańsze. Aby znaleźć takowe, stosuje sięstrategię równomiernego kosztu, w której rozwija się zawsze węzeł w o najniższym koszcieścieżki, g(w). Ów koszt jest sumą kosztów przypisanych krawędziom należącym do ścieżkiłączącej węzeł początkowy w0 z węzłem w. Zatem g(w0) = 0 oraz g(v) = g(w) + κ(w, v)dla każdego sąsiada v węzła w, natomiast κ(w, v) ­ 0 jest kosztem przejścia z w do v.Taka definicja zapewnia, że dla dowolnej pary (w, v) węzłów, w której v ∈ N(w) kosztścieżki nigdy nie maleje, tzn. g(v) ­ g(w). Jest to warunek konieczny na to, aby strategiarównomiernego kosztu generowała ścieżkę o najniższym koszcie. Tutaj niewizytowany węzełv ∈ N(w) dodawany jest do listy R tylko wówczas, gdy albo nie ma go na liście R, albo teżw R istnieje węzeł v ale przypisano mu większy koszt.

Aby rozróżniać między identycznymi węzłami, którym przypisuje się różny koszt po-trzebujemy bardziej wyrafinowanej struktury do reprezentacji pojedynczego węzła v ∈ V .Powinna ona zawierać nie tylko informacje o koszcie dojścia do tego węzła, ale także in-formację o jego poprzedniku, czyli tym węźle w, którego aktualnym sąsiadem jest badanywłaśnie węzeł w. Poniższy fragment kodu przedstawia przykładową strukturę węzła zapi-saną w języku Java:

public class Node {State stan; //informacja o aktualnym stanieNode ojciec; //informacja o bezpośrednim poprzedniku aktualnego węzłaint g; //koszt przejścia ze stanu początkowego do aktualnego stanu

}

Algorytm przeszukiwania przestrzeni rozwiązań metodą równomiernego kosztu przed-stawiono w postaci pseudokodu 2.3. Ostatni krok wewnętrznej pętli w tym algorytmie jestrównoważny dodawaniu do listy R tylko tych nieodwiedzonych węzłów v, które albo niewystępują na niej, albo też już tam się pojawiły, ale przypisany im koszt g(v) jest większyod aktualnie obliczonego. Rezygnując z takiego sprawdzania oszczędzamy czas koniecznyna przejrzenie listy R.

2.5. ŚLEPE STRATEGIE PRZESZUKIWANIA 21

Algorytm 2.3 Algorytm przeszukiwania metodą równomiernego kosztuWE: R – lista węzłów do rozwinięcia

W – lista zbadanych węzłówN – operator zwracający listę sąsiadów danego węzław0 – węzeł początkowywg – węzeł końcowyκ : V × V → R – koszt przejścia od węzła w do jego sąsiadag : V → R – koszt ścieżki od w0 do aktualnego węzła

WY: p – ścieżka łącząca węzeł początkowy z węzłem końcowymbegin

w0.g = 0;W := {w0};oceń sąsiadów węzła w0, tzn. dla każdego węzła w ∈ N(w0) wyznacz w.g = κ(w0, w);zapamiętaj ocenionych sąsiadów, R := N(w0);dopóki nie osiągnięto węzła końcowego {

jeżeli R = nil to wypisz komunikat Porażka i zakończ przeszukiwanie;z listy R wybierz węzeł w o najniższym koszcie g(w);jeżeli w = wg to wypisz komunikat Sukces, zwróć ścieżkę p łączącą węzeł w0 zwęzłem wg i zakończ przeszukiwanie;usuń węzeł w z listy R i dodaj go do listy W odwiedzonych węzłów;oceń sąsiadów węzła w, tzn. wyznacz g(v) = g(w) + κ(w, v) dla v ∈ N(w);dodaj do listy R wszystkich nieodwiedzonych sąsiadów węzła w;

}end

Jednym z typowych zastosowań algorytmu jest poszukiwanie najkrótszej trasy, co ilu-struje poniższy przykład.

Przykład 2.5.1. Rozważmy uproszczoną mapę komunikacyjną Rumunii przedstawioną narysunku 2.6 pochodzącym z [10]. Interesuje nas znalezienie najkrótszej drogi łączącej dwamiasta: Arad i Bucharest. Kolejne etapy przeszukiwania prze3dstawiono w tablicy 2.1. Dlazwiększenia czytelności stosujemy tam 3-literowe symbole odpowiadające trzem pierwszymliterom w nazwie odpowiedniego miasta. Dla przykładu zapis [Tim(Ara), 118] oznaczawęzeł, którego pole stan = Tim, pole ojciec = Ara, natomiast koszt ścieżki dodarcia doTimisoary przez Arad jest równy 118. W przypadku węzłów wymienianych w kolumnieoznaczonej N(w) podajemy tylko nazwę miasta i koszt κ(w, v) dotarcia do niego z aktualniebadanego miasta w.

Pobierając węzeł [Buc(Pit), 450], t = 13, stwierdzamy, że: (a) długość trasy łączącejinteresujące nas miasta jest równa 450 km. Znając zawartość listy W :

[Ara, 0], [Zer(Ara), 75], [Tim(Ara), 118], [Sib(Ara), 140], [Ora(Zer), 146],[Rim(Sib), 220], [Lug(Tim), 229], [Fag(Sib), 239], [Meh(Lug), 299], [Pit(Rim),317], [Cra(Rim), 366], [Dob(Meh), 374]

z łatwością rekonstruujemy właściwą trasę: Buc - Pit - Rim - Sib - Ara. ¤Powyższy przykład ilustruje zasadniczą wadę strategii równomiernego kosztu: błądzi

ona badając nieistotne węzły, a tym samym jest ona czasowo złożona.

22 ROZDZIAŁ 2. ROZWIĄZYWANIE PROBLEMÓW

Giurgiu

UrziceniHirsova

Eforie

Neamt

Oradea

Zerind

Arad

Timisoara

Lugoj

Mehadia

DobretaCraiova

Sibiu Fagaras

Pitesti

Vaslui

Iasi

Rimnicu Vilcea

Bucharest

71

75

118

111

70

75

120

151

140

99

80

97

101

211

138

146 85

90

98

142

92

87

86

Rysunek 2.6: Uproszczona mapa drogowa Rumunii. (Źródło: [10].)

t w N(w) R W0 {Ara}1 Ara [Zer, 75], [Sib, 140], [Zer(Ara), 75], [Sib(Ara), 140], [Ara, 0]

[Tim, 118] [Tim(Ara), 118]2 Zer [Ara, 75], [Ora, 71], [Sib(Ara), 140], [Tim(Ara), 118] W∪ [Zer(Ara), 75]

[Ora(Zer), 146]3 Tim [Ara, 118], [Lug, 111], [Sib(Ara), 140], [Ora(Zer), 146], W∪ [Tim(Ara), 118]

[Lug(Tim) 229]4 Sib [Ara, 140], [Far, 99], [Ora(Zer), 146], [Lug(Tim) 229], W∪ [Sib(Ara), 140]

[Rim, 80] [Fag(Sib), 239], [Rim(Sib), 220] [Tim(Ara), 118],5 Ora [Zer, 71], [Sib, 151], [Lug(Tim) 229], [Fag(Sib), 239], W∪ [Ora(Zer), 146]

[Rim, 80] [Rim(Sib), 220]6 Rim [Zer, 71], [Sib, 80], [Lug(Tim) 229], [Fag(Sib), 239], W∪ [Rim(Sib), 220]

[Pit, 97], [Cra, 146] [Cra(Rim), 366], [Pit(Rim), 317]7 Lug [Tim, 111], [Meh, 70] [Fag(Sib), 239], Cra(Rim), 366], W∪ [Lug(Tim), 229]

[Pit(Rim), 317], [Meh(Lug), 299]8 Fag [Buc, 211], [Sib, 99] [Cra(Rim), 366], [Pit(Rim), 317], W∪ [Fag(Sib), 239]

[Meh(Lug), 299], [Buc(Fag), 450]9 Meh [Lug, 70], [Dob, 75] [Cra(Rim), 366], [Pit(Rim), 317], W∪ [Meh(Lug), 299]

[Buc(Fag), 450], [Dob(Meh), 374]10 Pit [Rim, 97], [Buc, 101] [Cra(Rim), 366], [Buc(Fag), 450], W∪ [Pit(Rim), 317]

[Dob(Meh), 374]11 Cra [Dob, 120], [Pit, 138] [Buc(Fag), 450], [Dob(Meh), 374] W∪ [Cra(Rim), 366]12 Dob [Meh,75], [Cra, 120] [Buc(Fag), 450] W∪ [Dob(Meh), 374]12 Buc

Tablica 2.1: Etapy znajdowania najkrótszej trasy z Arad do Bucuresti w oparciu o mapę zrysunku 2.6.

2.5.3 Ograniczone przeszukiwanie w głąb

Przeszukiwanie w głąb z ograniczeniem na głębokość l, tzn. węzły na głębokości l niemają następników. Tutaj problemem jest wybór właściwej głębokości l (nazywanej średnicą

2.5. ŚLEPE STRATEGIE PRZESZUKIWANIA 23

przestrzeni poszukiwań)

2.5.4 Strategia iterowanego pogłębiania

W przypadku iterowanego pogłębiania wykonuje się przeszukiwanie w głąb ograniczone dopewnej głębokości l. Jeżeli przeszukiwanie nie kończy sie sukcesem, zwiększa się wartośćparametru l, tzn. l = l + 1 i ponownie rozpoczyna ograniczone przeszukiwanie w głąb.każdorazowo przeszukiwanie rozpoczyna się od początkowego węzła wo.

Będąc zupełną i optymalną, jest to bardzo popularna metoda przeszukiwania. Wadąprzeszukiwania wszerz jest duża złożoność pamięciowa, natomiast wadą metody w głąbjest jej niezupełność. Iterowane pogłębianie jest efektywnym kompromisem między tymidwiema metodami. Z uwagi na ograniczoność przeszukiwania możliwe jest uzyskanie roz-wiązania tej samej jakości co w metodzie wszerz, lecz bez zużycia tak dużej pamięci. Pomimowielokrotnego rozwijania tych samych węzłów, pesymistyczne zużycie pamięci jest niewielewiększe niż w metodzie wszerz. Istotnie, przypuśćmy, że rozwiązanie znajduje się na głę-bokości d. W przypadku przeszukiwania metodą wszerz należy w najgorszym przypadkuprzejrzeć

nw =d∑

i=0

bi

węzłów, natomiast stosując metodę iterowanego pogłębiania przeglądamy

nipd∑

i=0

(d+ 1− i)bi

węzłów. Przypuśćmy, że d = 10 i każdy węzeł ma b = 5 potomków. Wówczas nw = 12207031,natomiast nip = 15258786, co oznacza, że nip = 1.25nw.

2.5.5 Przeszukiwanie dwukierunkowe

Rozpoczynamy przeszukiwanie w przód rozpoczynając od węzła początkowego i równocze-śnie przeszukiwanie w tył rozpoczynając od węzła końcowego.

O ile przeszukiwanie w przód jest tożsame, że znanym dotychczas rozwijaniem sąsiadówbadanego węzła, potem sąsiadów tych sąsiadów, itd., o tyle przeszukiwanie w tył wymagadysponowania listą poprzedników danego węzła, P (w). Do P (w) zaliczamy te wszystkiewęzły, których sąsiadem (następnikiem) jest w. Oczywiście, jeżeli dopuszczalne w rozwią-zaniu danego problemu operacje sa odwracalne, to jeżeli v ∈ N(w) wówczas w ∈ P (v). Wogólności wyznaczanie poprzedników jest procesem złożonym i kosztownym.

Możliwość stosowania przeszukiwania dwukierunkowego wymaga także sprawdzania,czy węzeł, który właśnie jest rozwijany w jednym drzewie, nie wystąpił już w drugimdrzewie przeszukiwań.

2.5.6 Porównanie ślepych strategii przeszukiwania

Załóżmy, jak poprzednio, że w grafie reprezentującym przestrzeń poszukiwań każdy węzełma b potomków, d oznacza głębokość, na której występuje rozwiązanie, m jest maksy-malną głębokością drzewa, a l jest ograniczeniem na głębokość przeszukiwania. Własnościposzczególnych strategii ilustruje tabela 2.2.

24 ROZDZIAŁ 2. ROZWIĄZYWANIE PROBLEMÓW

Strategia Kompletność Optymalność Złożonośćczasowa pamięciowa

Wszerz Tak Tak bd bd

W głab Nie Nie bm bmRównomiernegokosztu Tak Tak bd bd

Ograniczoneprzeszukiwanie Tak, Nie bl blw głąb gdy l ­ dIteracyjnepogłębianie Tak Tak bd bd

Dwukierunkowa(o ile stosowalna) Tak Tak bd/2 bd/2

Tablica 2.2: Odpowiedniość między etapami procesu schładzania i etapami procesu wyzna-czania optimum

2.6 Przeszukiwanie heurystyczne

Jeżeli w algorytmie ślepego przeszukiwania wiedza o problemie zostanie wykorzystana doporządkowania listy R, to otrzymamy algorytm przeszukiwania heurystycznego. Do po-rządkowania węzłów stosuje się tzw. funkcję oceniającą, f : V → R, która każdemu węzłowiprzypisuje jego atrakcyjność, czy też potencjalną korzyść z jego rozwinięcia. Zakładając,że rozwija się węzeł, któremu odpowiada najbardziej atrakcyjna ocena, otrzymujemy tzw.strategię pierwszy najlepszy. Algorytm realizujący tę strategię jest identyczny z algoryt-mem 2.3 z tą różnicą, że rolę występującej tam funkcji g pełni teraz funkcja oceniająca f .

2.6.1 Algorytm zachłanny

Najprostszym wariantem strategii pierwszy najlepszy jest strategia zachłanna, w którejdo oceny atrakcyjności węzła korzysta się wyłącznie z funkcji heurystycznej h : V → R.Każdemu węzłowi przypisuje ona szacowany koszt najkrótszej ścieżki od tegoż węzła dowęzła celowego vg. Za h można przyjąć w zasadzie dowolną funkcję, o ile tylko dla każdegowęzła v ∈ V będzie ona spełniać następujące warunki:

(i) h(v) ­ 0,(ii) h(v) ¬ h∗(v),(iii) h(vg) = 0

gdzie h∗(v) jest rzeczywistym kosztem ścieżki od węzła v do węzła docelowego.Heurystykę spełniającą powyższe warunki nazywamy dopuszczalną. Np. w zadaniu po-

szukiwania najkrótszej drogi na mapie rolę takiej funkcji może pełnić odległość międzyaktualnie rozwijanym węzłem, a węzłem docelowym.

Wersję oryginalnego problemu, dla której koszt rozwiązania nigdy nie przekracza koszturozwiązania oryginalnego problemu nazywamy problemem uproszczonym.

2.6. PRZESZUKIWANIE HEURYSTYCZNE 25

Przykład 2.6.1. Poszukiwanie najkrótszej drogi jest jednym z kluczowych zadań m.in.w takich problemach jak sterowanie robotem, czy gry komputerowe. Reprezentacją częstostosowaną do znalezienia właściwego rozwiązania jest pokrycie przestrzeni, w jakiej poruszasię agent, regularną (np. kwadratową) siatką. Dzięki temu ciągłą przestrzeń poszukiwańzastępuje się skończoną liczbą połączonych ze sobą węzłów. Przykład takiego postępowaniaprzedstawiono w pierwszej kolumnie pierwszego od góry wiersza na rysunku 2.7. Czarnyprostokąt oznacza tu przeszkodę, a zadanie polega na znalezieniu trasy łączącej punktstartowy, oznaczony literą S z, leżącym po drugiej stronie przeszkody, punktem końcowymzaznaczonym jako szary kwadrat.

Załóżmy, że agent może poruszać się w jednym z ośmiu kierunków, por. prawy rysunekw pierwszym rzędzie na rys. 2.7. Jako funkcję heurystyczną przyjmuje się często odległośćManhattan między aktualnym położeniem agenta, a punktem docelowym. W niniejszymprzykładzie odległość tę mnożono przez 10. Kolejne rysunki przedstawiają analizowanasekwencję ruchów, a ostateczną trasę przedstawiono w prawej kolumnie w ostatnim wierszurysunku 2.7. ¤

Sposób przeszukiwania za pomocą strategii zachłannej przypomina nieco przeszukiwaniemetodą w głąb: algorytm podąża wzdłuż ścieżki wskazującej cel. W przypadku, gdy ścieżkaokazuje sie nieefektywna, następuje powrót do jednego z wcześniej wizytowanych węzłów.Podobnie jak przeszukiwanie w głąb tak i przeszukiwanie zachłanne nie jest ani zupełne,ani optymalne. Ponadto, algorytm często „błądzi” wykonując zbędne ruchy.

Przykład 2.6.2. Dla przykładu rozpatrzmy ponownie problem wyznaczenia najkrótszejtrasy z Arad do Bucuresti badany w przykładzie 2.5.1. Wartości funkcji heurystycznej, re-prezentujące odległość w linii prostej z danego miasta do miasta docelowego przedstawionow poniższej tablicy:

Miasto Odległość Miasto OdległośćArad 366 Mehadia 241Bucharest 0 Neamt 234Craiova 160 Oradea 380Dobreta 242 Pitesti 98Eforie 161 Rimnicu Vilcea 193Fagaras 178 Sibiu 253Giurgiu 77 Timisoara 329Hirsova 151 Urziceni 80Iasi 226 Vaslui 199Lugoj 244 Zerind 374

Tablica 2.3: Odległość w linii prostej z danego miasta do miasta docelowego

Algorytm wybiera najpierw sąsiada miasta Arad, któremu przypisano najniższą wartośćheurystyki – jest to Sibiu, następnie sąsiada tego miasta, czyli Fagaras, a stąd wybiera sięjuż miasto docelowe – por. rys. 2.6.1. Długość wygenerowanej w ten sposób trasy jestrówna 450 w porównaniu trasą o długości 412 km uzyskaną przez zastosowanie strategiirównomiernego kosztu. ¤

26 ROZDZIAŁ 2. ROZWIĄZYWANIE PROBLEMÓW

S GGS G S G

30

4050

40

50

30

40

50 40

60

50

60

30

4050

40

50

60

40

30

50

50 40

60

50

60

30

4050

40

50

40

60

40

30

4060

50

60

405060

50 40 30

20

40

50

40

50

3030

40

50 40

30

60

50

60

405060

50 40 30

20 10

10

40

50

40 30

40

60

30

4050

50

40

10

10 20

20

20

304050

60 50 40

60

50 30

40

Rysunek 2.7: Kolejno wizytowane stany w zadaniu poszukiwania najkrótszej drogi w la-biryncie. Punkt startowy oznaczono jako szary kwadrat z literą S, a punkt docelowy –jako szary kwadrat. Czarny prostokąt oznacza przeszkodę. Dopuszczalne kierunki ruchuzaznaczono w pierwszej kolumnie pierwszego wiersza. Ostateczną trasę zaznaczono szary-mi kwadratami w prawej kolumnie ostatniego wiersza. Przekreślone kwadraty reprezentujęwizytowane węzły. Liczby wewnątrz kwadratów oznaczają wartości funkcji heurystycznej.

W powyższym przykładzie stosunkowo szybko znaleziono rozwiązanie sub-optymalne.Jednakże próba znalezienia drogi z Iasi do Fagaras na mapie z rysunku 2.6 nie jest już takowocna. Algorytm wybiera jako pierwsze miasto Neamt i ponownie (przy braku listy W )wizytuje Iasi, skąd wraca do Neamt.

Ogólnie, strategia zachłanna jest strategią zupełną jeżeli eliminuje się powtarzające sięstany, a więc jeżeli używa się listy W . Nie jest to jednak strategia optymalna. Ponadto

2.6. PRZESZUKIWANIE HEURYSTYCZNE 27

Arad

0253

193380178366

329253374

BucharestSibiu

RimnicuOradeaFagarasArad

TimisoaraSibiuZerind

Rysunek 2.8: Rozwiązanie problemu znalezienia najkrótszej drogi z przykładu 2.5.1 zapomocą strategii zachłannej.

charakteryzuje ją duża złożoność czasowa i pamięciowa, O(bm), gdzie jak poprzednio mto maksymalna głębokość drzewa, a b to maksymalna liczba sąsiadów węzła. Warto jed-nak pamiętać, że wybór odpowiedniej heurystyki pozwala znacząco zredukować złożonośćczasową.

2.6.2 Algorytm A∗

W 1968 roku Peter Hart, Nils Nilsson oraz Bertram Raphael zaproponowali niezwykleefektywny wariant przeszukiwania metodą pierwszy najlepszy – algorytm A∗. Odnajdujeon najkrótszą ścieżkę pomiędzy dwoma danymi wierzchołkami grafu (lub dokładniej, mię-dzy wierzchołkiem początkowym a dowolnym z wierzchołków docelowych). wykorzystującspecjalnie skonstruowaną funkcję oceny f , która reprezentuje szacowany koszt rozwiązaniazawierającego węzeł w. Funkcja ta obliczana jest jako

f(w) = g(w) + h(w) (2.1)

gdzie g(w) jest rzeczywistym kosztem ścieżki od węzła początkowego do aktualnie rozwi-janego węzła w, natomiast h(w) to szacowany koszt najtańszej ścieżki z w do wg. Jak wprzypadku strategii zachłannej, h powinna być heurystyką dopuszczalną, tzn. nie może onaprzeszacowywać rzeczywistego kosztu h∗(v) ścieżki łączącej węzły v i wg.

Wymaga się również, żeby heurystyka h była funkcją monotoniczną w tym sensie, żejej wartości maleją (bądź rosną) monotonicznie wzdłuż każdej ścieżki łączącej węzły w0 iwg. W takim przypadku koszt f nie maleje (bądź nie rośnie) wzdłuż każdej ścieżki. Jeżelif nie spełnia tego warunku, można tę funkcję „umonotonicznić” przyjmując

f(v) = max[f(w), g(v) + h(v)] (2.2)

dla każdego potomka v węzła w.Algorytm A∗ jest nie tylko zupełny (nawet jeżeli nie korzysta się z listy W ), ale również

i optymalny. Aby pokazać optymalność, rozważmy rozwijany węzeł w leżący na ścieżcewiodącej do wg. Niech wg będzie optymalnym węzłem docelowym, któremu odpowiadakoszt f ∗, a wn będzie suboptymalnym węzłem celowym, tzn. takim, że g(wn) > f ∗. Skoroh jest heurystyką dopuszczalną, to f∗ ­ h(w). Ponadto, skoro w nie został wybrany dorozwinięcia w kierunku wn, to musi być spełniony warunek f(w) ­ f(wn), skąd wynika,

28 ROZDZIAŁ 2. ROZWIĄZYWANIE PROBLEMÓW

że f ∗ ­ f(wn). Ponieważ jednak wn jest węzłem docelowym, musi być h(wn) = 0, czylif(wn) = g(wn), czyli f ∗ ­ g(wn), a to przeczy założeniu, że wn jest węzłem suboptymalnym.Tym samym pokazaliśmy, że A∗ nigdy nie wybiera suboptymalnego celu do rozwijania.

Można też pokazać, że A∗ jest strategią zupełną w przestrzeniach, reprezentowanychprzez lokalnie skończone grafy, tzn. grafy, w których każdy węzeł ma skończoną liczbęsąsiadów.

Działanie algorytmu A∗ przedstawia pseudokod 2.4. Jeżeli przyjmiemy, że dla każdegow ∈ V koszt g(w) = 0, otrzymamy algorytm zachłanny, a jeżeli założymy, że h(w) = 0 –algorytm równomiernego kosztu.

Algorytm 2.4 Algorytm A∗

WE: R – lista węzłów do rozwinięciaW – lista zbadanych węzłówN – operator zwracający listę sąsiadów danego węzław0 – węzeł początkowywg – węzeł końcowyg : V → R – koszt ścieżki od w0 do aktualnego węzłah : V → R – oszacowanie kosztu ścieżki od węzła w do wgf : V → R – funkcja kosztu, f(v) = g(v) + h(v)κ : V × V → R – funkcja przejścia ze stanu w ∈ V do sąsiedniego stanu v ∈ N(w)

WY: p – ścieżka łącząca węzeł początkowy z węzłem końcowymbegin

w0.g = 0, w0.f = w0.h;W := {w0};oceń węzły z R, tzn. przypisz każdemu węzłowi w ∈ R wartości funkcji g, h oraz f ;dopóki nie osiągnięto węzła końcowego {

jeżeli R = nil to wypisz komunikat Porażka i zakończ przeszukiwanie;z listy R wybierz węzeł w o najniższym koszcie f(w);jeżeli w = wg to wypisz komunikat Sukces, zwróć ścieżkę p łącząca węzeł po-czątkowy z celowym i zakończ przeszukiwanie;dodaj węzeł w do listy odwiedzonych węzłów, W := W ∪ {w};oceń sąsiadów węzła w, tzn. dla każdego v ∈ N(w) wyznacz g(v) = g(w) +κ(w, v), oblicz h(v) oraz f(v) = g(v) + h(v);dodaj do listy R wszystkich nieodwiedzonych sąsiadów węzła w, którzy albo niewystępują w R, albo są już w R, ale przypisany im koszt jest większy od kosztuaktualnie wyznaczonego;

}end

2.6.3 Algorytm IDA∗

Iteracyjne pogłębianie jest użyteczną techniką redukujacą złożoność pamięciową algorytmuprzeszukiwania. Pomysł ów można także zastosować do algorytmu A∗ przyjmując, że węzłybędą rozwijane zgodnie ze strategią w głąb, przy czym ograniczeniem nie jest głębokość,

2.6. PRZESZUKIWANIE HEURYSTYCZNE 29

lecz wartość funkcji kosztu f . Otrzymuje się w ten sposób pogłębiany algorytm A∗, czyliIDA∗. Sformułował go Korf [4].

Istotą algorytmu jest rozwijanie w każdej iteracji tylko tych węzłów, których kosztnie przekracza zadanej wartości progowej K. Węzły, którym przypisano większy koszt fumieszczane są na specjalnej liście D zawierającej kandydatów do przeglądania w dalszejkolejności. Początkowo przyjmuje się, że K = h(w0), a w kolejnych iteracjach K jest rów-ne najniższemu kosztowi przypisanemu węzłom z listy D. Istotę algorytmu przedstawiapseudokod 2.5.

IDA∗ jest, podobnie jak A∗, algorytmem kompletnym i optymalnym. Dobrym oszaco-waniem jego złożoności pamięciowej jest O(bd) – co świadczy o jego przewadze nad algoryt-mem A∗. Natomiast złożoność czasowa jest uzależniona od liczby wartości, które przyjmujefunkcja heurystyczna.

2.6.4 Algorytm SMA∗

Simplified Memory-Bounded A∗, czyli SMA∗ to kolejny wariant algorytmu A∗ usprawnia-jący jego wymogi pamięciowe. Jest to algorytm kompletny, o ile tylko pozwala zapamiętaćścieżkę prowadząca do najpłytszego rozwiązania. W przypadku przeciwnym zwraca on naj-lepsze do uzyskania, w ramach posiadanej pamięci, rozwiązania. Ponadto jest to algorytmoptymalny, jeśli tylko pozwala na to pamięć. Jego istotą jest przechowywanie węzłów naskończonej liście. Gdy należy rozwinąć kolejny węzeł, a lista jest pełna – usuwa się z niejwęzeł u o najwyższym koszcie jednocześnie zachowując w poprzedniku węzła u informacjęo koszcie ścieżki przechodzącej przez u. W takim przypadku powraca się do usuniętegowęzła tylko wtedy, gdy wszystkie inne drogi okazały się gorsze.

2.6.5 Algorytmy iteracyjnego poprawiania

W wielu sytuacjach opis stanu zawiera informację wystarczającą do znalezienia rozwiąza-nia. ak jest np. w zadaniu ośmiu królowych. Jeżeli kompletną konfigurację (reprezentującąaktualny stan) można przeprowadzić do stanu docelowego drogą drobnych modyfikacji –warto wówczas stosować algorytmy iteracyjnego poprawiania.

2.6.5.1 Algorytm wspinaczkowy

Przypuśćmy, że w zadaniu 8-ka jako h(w) przyjmuje się poprzedzoną znakiem minus liczbępól znajdujących się na niewłaściwej (w stosunku do węzła docelowego) pozycji. Jeżeli np.stan aktualny przedstawia lewa część rysunku 2.9, a stan docelowy – jego prawa część, toh(w) = −2. Zauważmy, że stan ten jest lokalnym optimum – dowolne przesunięcie pustegopola tylko pogarsza wartość funkcji h.

2.6.5.2 Symulowane wyżarzanie

2.6.5.3 Algorytmy ewolucyjne

30 ROZDZIAŁ 2. ROZWIĄZYWANIE PROBLEMÓW

Algorytm 2.5 Algorytm IDA∗

WE: R – lista węzłów do rozwinięciaW – lista zbadanych węzłówD – lista odrzuconych węzłówN – operator zwracający listę sąsiadów danego węzław0 – węzeł początkowywg – węzeł końcowyg : V → R – koszt ścieżki od w0 do aktualnego węzłah : V → R – oszacowanie kosztu ścieżki od węzła w do wgf : V → R – funkcja kosztu, f(v) = g(v) + h(v)κ : V × V → R – funkcja przejścia ze stanu w ∈ V do sąsiedniego stanu v ∈ N(w)

WY: p – ścieżka łącząca węzeł początkowy z węzłem końcowymbegin

w0.g = 0, w0.f = w0.h;K = h(w0);W := {w0};R := N(w0);dopóki nie znaleziono rozwiązania {

dopóki R 6= nil {wybierz pierwszy węzeł w z listy R i usuń go z tej listy;jeżeli w.f ­ K to wstaw węzeł na listę D;w przeciwnym razie {

dodaj w do listy W ;jeżeli w = wg to wypisz komunikat Sukces, zwróć ścieżkę p łączącawęzeł początkowy z celowym i zakończ przeszukiwanie;oceń sąsiadów węzła w, tzn. dla każdego v ∈ N(w) wyznacz g(v) =g(w) + κ(w, v), oblicz h(v) oraz f(v) = g(v) + h(v);dodaj do listy R wszystkich nieodwiedzonych sąsiadów węzła w, którzyalbo nie występują w R, albo są już w R, ale przypisany im koszt jestwiększy od kosztu aktualnie wyznaczonego;

}}jeżeli D = nil to wypisz komunikat Porażka i zakończ przeszukiwanie;wybierz z D węzeł u o najniższym koszcie;podstaw k = u.f ;

}end

8368

47

521 1 2 3

4

56

7

Rysunek 2.9: Stan aktualny i stan docelowy w zadaniu 8-ka.

2.6. PRZESZUKIWANIE HEURYSTYCZNE 31

Algorytm 2.6 Algorytm symulowanego wyżarzaniaWE: f – optymalizowana funkcja,

g(x, T ) – reguła generowania sąsiadów rozwiązania xPA(x,y, T ) – prawdopodobieństwo akceptacji rozwiązania yC(x, T, t) – scenariusz schładzania

WY: xend – rozwiązanie, f end = f(xend).begin

1. Inicjalizacja: wybrać losowo punkt x0 ∈ A, ustalić temperaturę T0, t← 0.Podstawić f 0 ← f(x0), xend ← x0, f end ← f(xend).

2. while (not done)2(a). Wygenerować sąsiada yt+1 rozwiązania xt korzystając z reguły g(xt, T t).2(b). Zaakceptować sąsiada z prawdopodobieństwem PA(xt,yt+1, T t), tzn.

xt+1 ={

yk+1 jeżeli r ¬ PA(xt,yt+1, T t)xt wpp

(2.3)

gdzie r ∈ [0, 1] jest liczbą losową.2(c). Jeżeli f(yt+1) < f end, to f end ← f(yt+1), xend ← yt+1.2(d). Zmodyfikować temperaturę T t+1 = C(xt, T t, t).2(e). Jeżeli nie jest spełnione kryterium zatrzymania, to t← t+1.

3. end while4. return xend, f end.

end

Skorowidz

średnica przestrzeni poszukiwań, 23

agent, 14

funkcjaheurystyczna, 24oceniająca, 24

heurystykadopuszczalna, 24, 27

koszt ścieżki, 18

problem, 13problem

uproszczony, 24przestrzeń stanów, 18przeszukiwanie, 13

ruchy, 17

strategiapierwszy najlepszy, 24

systemprodukcji, 13

32