Różnice

Różnice między wybraną wersją a wersją aktualną.

Odnośnik do tego porównania

Both sides previous revision Poprzednia wersja
Nowa wersja
Poprzednia wersja
pl:prolog:prolog_lab:prolog_lab_graphsearch [2010/01/20 10:27]
jsi09 literówka w linku
pl:prolog:prolog_lab:prolog_lab_graphsearch [2019/06/27 15:50] (aktualna)
Linia 1: Linia 1:
-====== - LAB: Planowanie tras przejazdu ====== 
  
-Celem ćwiczenia jest zapoznanie się z możliwościami wykorzystania Prologu do planowania ​tras przejazdu ​oraz poznanie technik poszukiwania ścieżek w grafach i ich implementacji w Prologu.+====== - LAB: Przeszukiwanie grafów i planowanie ​tras przejazdu ​======
  
 +Celem ćwiczenia jest zapoznanie się z możliwościami wykorzystania Prologu do planowania tras przejazdu oraz poznanie technik poszukiwania ścieżek w grafach i ich implementacji w Prologu.
  
-===== Wprowadzenie =====+===== Wprowadzenie =====
  
 Modelem przestrzeni poszukiwań dla planowania tras przejazdu jest graf. Modelem przestrzeni poszukiwań dla planowania tras przejazdu jest graf.
Linia 12: Linia 12:
 Najprostsza definicja grafu mówi, że graf to para postaci //​G=(V,​E)//,​ gdzie //V// jest zbiorem węzłów a //E ⊆ V×V// jest zbiorem łączących je krawędzi. Najprostsza definicja grafu mówi, że graf to para postaci //​G=(V,​E)//,​ gdzie //V// jest zbiorem węzłów a //E ⊆ V×V// jest zbiorem łączących je krawędzi.
  
-Model ten reprezentuje ​schmatycznie ​mapę, gdzie w zależności od poziomu abstrakcji węzły mogą np. reprezentować miasta, a krawędzie - łączące je drogi, lub też węzły mogą reprezentować skrzyżowania ulic a krawędzie ulice (lub ich odcinki).+Model ten reprezentuje ​schematycznie ​mapę, gdzie w zależności od poziomu abstrakcji węzły mogą np. reprezentować miasta, a krawędzie - łączące je drogi, lub też węzły mogą reprezentować skrzyżowania ulic a krawędzie ulice (lub ich odcinki).
  
 Zapoznaj się, lub raczej przypomnij sobie ;-)   ​podstawowe wiadomości o grafach. Zapoznaj się, lub raczej przypomnij sobie ;-)   ​podstawowe wiadomości o grafach.
  
 +  * [[wp>​Graph_(mathematics)]].
   * [[http://​pl.wikipedia.org/​wiki/​Graf_(matematyka)|Grafy (pl.wikipedia.org)]],​   * [[http://​pl.wikipedia.org/​wiki/​Graf_(matematyka)|Grafy (pl.wikipedia.org)]],​
-  * [[http://​en.wikipedia.org/​wiki/​Graph_(mathematics)|Graph (en.wikipedia.org)]]. 
  
 Pamiętaj, że krawędź grafu może być //​skierowana//​ (modeluje przejazd tylko w jedną stronę; np. ulica jednokierunkowa) lub //​nieskierowanym// ​ (modeluje przejazd w obie strony; np. ulica dwukierunkowa). Pamiętaj, że krawędź grafu może być //​skierowana//​ (modeluje przejazd tylko w jedną stronę; np. ulica jednokierunkowa) lub //​nieskierowanym// ​ (modeluje przejazd w obie strony; np. ulica dwukierunkowa).
  
-Odpowiednio,​ graf może byc grafem skierowanym, ​nieskierownym ​lub mieszanym.+Odpowiednio,​ graf może być grafem skierowanym, ​nieskierowanym ​lub mieszanym.
  
 Ponadto, z każdą krawędzią może być związany koszt przejazdu (odległość,​ czas). Ponadto, z każdą krawędzią może być związany koszt przejazdu (odległość,​ czas).
Linia 29: Linia 29:
 ---- ----
  
-===== Poszukiwanie ścieżek =====+===== Poszukiwanie ścieżek =====
  
 Zadanie planowania tras przejazdu to zadanie polegające na wyznaczeniu drogi łączącej zadany punkt początkowy i pożądany punk docelowy. Zadanie planowania tras przejazdu to zadanie polegające na wyznaczeniu drogi łączącej zadany punkt początkowy i pożądany punk docelowy.
Linia 58: Linia 58:
  
 Algorytmy z obszaru sztucznej inteligencji wyróżniają się tym, że: Algorytmy z obszaru sztucznej inteligencji wyróżniają się tym, że:
-  * często korzystają z heurystyk ​odelgłościowych (np. opartych na oszacowaniu odległości Euklidesowej i wg metryki ulicznej),​ +  * często korzystają z heurystyk ​odległościowych (np. opartych na oszacowaniu odległości Euklidesowej i wg metryki ulicznej),​ 
-  * pozwalają na uwzględnianie dodatkowych ograniczeń,​ np. wezłów zabronionych,​+  * pozwalają na uwzględnianie dodatkowych ograniczeń,​ np. węzłów zabronionych,​
   * pozwalają na przeszukiwanie przestrzeni o bardzo dużych rozmiarach,   * pozwalają na przeszukiwanie przestrzeni o bardzo dużych rozmiarach,
-  * pozwalają na przeszukiwanie przestrzeni zadanych niejawnie (nowe węzły lub stany pojawiają się w wyniku ​wywowłania funkcji generującej). +  * pozwalają na przeszukiwanie przestrzeni zadanych niejawnie (nowe węzły lub stany pojawiają się w wyniku ​wywołania funkcji generującej).
- +
- +
  
  
 Zapoznaj się z podstawowymi algorytmami:​ Zapoznaj się z podstawowymi algorytmami:​
  
-  * [[http://​pl.wikipedia.org/​wiki/​Przeszukiwanie_grafu|Algorytmy ​przeszykiwania ​w głąb i wszerz]], +  * [[http://​pl.wikipedia.org/​wiki/​Przeszukiwanie_grafu|Algorytmy ​przeszukiwania ​w głąb i wszerz]], 
-  * [[http://​pl.wikipedia.org/​wiki/​Algorytm_Dijkstry|Klasycznym ​algorytme ​Dijkstry i //problemem najkrótszej ścieżki//]],+  * [[http://​pl.wikipedia.org/​wiki/​Algorytm_Dijkstry|Klasycznym ​algorytmie ​Dijkstry i problemem najkrótszej ścieżki]],​
   * [[http://​edu.i-lo.tarnow.pl/​inf/​utils/​002_roz/​ol009.php|Elegancką prezentacją algorytmu Dijkstry]].   * [[http://​edu.i-lo.tarnow.pl/​inf/​utils/​002_roz/​ol009.php|Elegancką prezentacją algorytmu Dijkstry]].
  
Linia 80: Linia 77:
   * plan o najtańszej trasie przejazdu,   * plan o najtańszej trasie przejazdu,
   * plan pozwalający na najszybszy przejazd.   * plan pozwalający na najszybszy przejazd.
 +
 +===== - Szukanie w AI =====
 +
 +Więcej o metodach szukania w AI można znaleźć w podręczniku
 +  * [FCA]: [[http://​artint.info/​html/​ArtInt_46.html|3 States and Searching]]
 +
 +===== - Obsługa list w Prologu =====
 +
 +Na zajęciach wykorzystujemy wbudowane predykaty do obsługi list.
 +Zobacz dokumentację SWI: [[http://​www.swi-prolog.org/​pldoc/​doc_for?​object=section%282,​%27A.12%27,​swi%28%27/​doc/​Manual/​lists.html%27%29%29|A.12 library(lists):​ List Manipulation]]
 +
 +Możesz też zawsze przeczytać pomoc, np. //​help(append).//​
  
 ---- ----
  
  
-===== Grafy i ich preprezentacja ​w Prologu =====+===== Grafy i ich reprezentacja ​w Prologu =====
  
-W Prologu można ​reprezentowac ​grafy na kilka sposobów. ​+W Prologu można ​reprezentować ​grafy na kilka sposobów. ​
  
 Najprostszą i efektywną metodą jest zadeklarowanie połączeń pomiędzy węzłami grafu w postaci faktów w Prologu. Najprostszą i efektywną metodą jest zadeklarowanie połączeń pomiędzy węzłami grafu w postaci faktów w Prologu.
Linia 93: Linia 102:
  
 {{:​pl:​prolog:​prolog_lab:​optimal-vs-robust.png|Przykład grafu - model połączeń drogowych}} {{:​pl:​prolog:​prolog_lab:​optimal-vs-robust.png|Przykład grafu - model połączeń drogowych}}
- 
  
 {{:​pl:​prolog:​prolog_lab:​optimal-vs-robust.pdf|Przykład grafu - model połączeń drogowych (.pdf)}} {{:​pl:​prolog:​prolog_lab:​optimal-vs-robust.pdf|Przykład grafu - model połączeń drogowych (.pdf)}}
Linia 99: Linia 107:
 W grafie tym istnieje jedna ścieżka optymalna (lewa krawędź) oraz wiele ścieżek dopuszczalnych przechodzących przez węzły n1-n6. W grafie tym istnieje jedna ścieżka optymalna (lewa krawędź) oraz wiele ścieżek dopuszczalnych przechodzących przez węzły n1-n6.
  
-Reprezentacja tego grafy w Prologu ma postać:+Reprezentacja tego grafu w Prologu ma postać:
  
-<​code>​+<​code ​prolog>
 d(s,g). d(s,g).
 d(s,n1). d(s,n1).
Linia 117: Linia 125:
 </​code>​ </​code>​
  
-Jak widać, każda krawędź zapisywana jest w postaci relacji //​d(<​węzeł_poczatkowy>,<​węzeł_końcowy>​).//​+Jak widać, każda krawędź zapisywana jest w postaci relacji //​d(<​węzeł_początkowy>,<​węzeł_końcowy>​).//​
  
-W przykładowym grafie istnieje 13 krawędzi. Zgodnie z deklaracją w Prologu, są to krawędzie ​ //​skierowane//​ (dlaczego+W przykładowym grafie istnieje 13 krawędzi. Zgodnie z deklaracją w Prologu, są to krawędzie ​ //​skierowane//​ (dlaczego?)
  
 Aby zadeklarować możliwość przejazdu w obie strony, należy zdefiniować //​domknięcie symetryczne//​ relacji połączenie //d/2//. Aby zadeklarować możliwość przejazdu w obie strony, należy zdefiniować //​domknięcie symetryczne//​ relacji połączenie //d/2//.
  
-<​code>​+<​code ​prolog>
 %%% domknięcie symetryczne relacji d/2  %%% domknięcie symetryczne relacji d/2 
      ​przejazd(X,​Y):​- d(X,Y).      ​przejazd(X,​Y):​- d(X,Y).
Linia 132: Linia 140:
  
  
-== Zadania ==+==== Zadania ​====
  
   - Przerysuj pokazany graf na kartce papieru.   - Przerysuj pokazany graf na kartce papieru.
-  - Znajdź - wspomagając się rysunkiem kilka mozliwych ​alternatywnych tras przejazdu; zaznacz je na rysunku.+  - Znajdź - wspomagając się rysunkiem kilka możliwych ​alternatywnych tras przejazdu; zaznacz je na rysunku.
   - Spróbuj wyznaczyć //​wszystkie//​ różne trasy przejazdu (nie zawierające cykli); ile ich jest?   - Spróbuj wyznaczyć //​wszystkie//​ różne trasy przejazdu (nie zawierające cykli); ile ich jest?
  
 ---- ----
  
-===== Poszukiwanie tras przejazdu =====+===== Poszukiwanie tras przejazdu =====
  
 Rozważmy najprostszy program realizujący zadanie poszukiwania tras przejazdu: Rozważmy najprostszy program realizujący zadanie poszukiwania tras przejazdu:
  
-<​code>​+<​code ​prolog>
 %%% domknięcie tranzytywne relacji przejazd %%% domknięcie tranzytywne relacji przejazd
      ​szukaj_trasy(Cel,​Cel,​Trasa,​Trasa):​- !.      ​szukaj_trasy(Cel,​Cel,​Trasa,​Trasa):​- !.
Linia 160: Linia 168:
   * trasę docelową (Trasa).   * trasę docelową (Trasa).
  
-Pierwszy wariant definiuje zakończenie poszukiwań:​ gdy znajdziemy się w weżle docelowym, trasa Robocza staje się docelową.+Pierwszy wariant definiuje zakończenie poszukiwań:​ gdy znajdziemy się w węźle docelowym, trasa Robocza staje się docelową.
  
 Drugi wariant definiuje sposób szukania trasy: Drugi wariant definiuje sposób szukania trasy:
  
   * będąc w węźle //Miasto//, znajdź //​NoweMiasto//​ do którego jest bezpośrednie połączenie (uzywając predykatu //​przejazd/​2//,​   * będąc w węźle //Miasto//, znajdź //​NoweMiasto//​ do którego jest bezpośrednie połączenie (uzywając predykatu //​przejazd/​2//,​
-  * sprawdź, czy nie było juz odwiedzane (// not(member(NoweMiasto,​Robocza)) //),+  * sprawdź, czy nie było już odwiedzane (// not(member(NoweMiasto,​Robocza)) //),
   * jeżeli tak, zostanie wymuszony nawrót; jeżeli nie, próbuj dalej i w tym celu   * jeżeli tak, zostanie wymuszony nawrót; jeżeli nie, próbuj dalej i w tym celu
   * zaktualizuj trasę roboczą dokładając //​NoweMiasto//​ i kontynuuj szukanie z tego miejsca.   * zaktualizuj trasę roboczą dokładając //​NoweMiasto//​ i kontynuuj szukanie z tego miejsca.
Linia 171: Linia 179:
 Zauważ, że: Zauważ, że:
  
-  * trasy reprezentowane ​sa jako listy,+  * trasy reprezentowane ​są jako listy,
   * konstruowana ścieżka wydłuża się w miarę szukania; dokładane są nowe miasta,   * konstruowana ścieżka wydłuża się w miarę szukania; dokładane są nowe miasta,
-  * konstruowane ​sa wszystkie warianty planu - dzięki mechanizmowi nawrotów w Prologu,+  * konstruowane ​są wszystkie warianty planu - dzięki mechanizmowi nawrotów w Prologu,
   * żaden plan nie będzie zawierał cykli.   * żaden plan nie będzie zawierał cykli.
  
Linia 179: Linia 187:
  
   - Uruchom podany program dla przykładowego grafu; jak zainicjować parametry?   - Uruchom podany program dla przykładowego grafu; jak zainicjować parametry?
-  - Zadaj w jakiej kolejności ​wystepują miasta na znalezionych trasach. Dlaczego?+  - Zadaj w jakiej kolejności ​występują miasta na znalezionych trasach. Dlaczego?
   - Wygeneruj przykładowy plan rozwiązania,​   - Wygeneruj przykładowy plan rozwiązania,​
   - Wygeneruj wszystkie możliwe plany i policz je.   - Wygeneruj wszystkie możliwe plany i policz je.
Linia 185: Linia 193:
 ---- ----
  
-===== Inicjowanie programu i zliczanie rozwiązań =====+===== Inicjowanie programu i zliczanie rozwiązań =====
  
-Aby ułatwic uruchamianie programu wyposażymy go w klauzulę inicjującą:​+Aby ułatwić ​uruchamianie programu wyposażymy go w klauzulę inicjującą:​
  
-<​code>​+<​code ​prolog>
 %%% inicjacja szukania %%% inicjacja szukania
      ​plan(Start,​Cel,​Trasa):​-      ​plan(Start,​Cel,​Trasa):​-
Linia 195: Linia 203:
 </​code>​ </​code>​
  
-Zauważ, że //Start// i //Cel// zamieniły ​sie miejscami. Dlaczego?+Zauważ, że //Start// i //Cel// zamieniły ​się miejscami. Dlaczego?
  
 Aby wyznaczyć automatycznie wszystkie plany uzupełnimy program o klauzulę: Aby wyznaczyć automatycznie wszystkie plany uzupełnimy program o klauzulę:
  
-<​code>​+<​code ​prolog>
 %%% Find all plans from '​s'​ to '​g'​. %%% Find all plans from '​s'​ to '​g'​.
      ​fap(Plans) :- findall(Trasa,​ plan(s,​g,​Trasa),​Plans).      ​fap(Plans) :- findall(Trasa,​ plan(s,​g,​Trasa),​Plans).
Linia 206: Linia 214:
 Aby wyznaczyć automatycznie wszystkie plany i zapisać je do pamięci uzupełnimy program o klauzulę: Aby wyznaczyć automatycznie wszystkie plany i zapisać je do pamięci uzupełnimy program o klauzulę:
  
-<​code>​+<​code ​prolog>
 %%% Find all plans and assert; p(<​plan>​). %%% Find all plans and assert; p(<​plan>​).
      ​fap-assert:​- plan(s,​g,​Plan),​ assert(p(Plan)),​ fail.      ​fap-assert:​- plan(s,​g,​Plan),​ assert(p(Plan)),​ fail.
Linia 216: Linia 224:
 Pełny program znajdziesz tutaj: {{:​pl:​prolog:​prolog_lab:​plan-robust-count.pl|}} Pełny program znajdziesz tutaj: {{:​pl:​prolog:​prolog_lab:​plan-robust-count.pl|}}
  
-=== Zdania ===+==== Zdania ​====
  
   - Przeanalizuj elementy i działanie programu.   - Przeanalizuj elementy i działanie programu.
   - Jaka jest kolejność węzłów w wygenerowanych planach?   - Jaka jest kolejność węzłów w wygenerowanych planach?
-  - W jakiej kolejności (w jakim kierunku) odbywa się rzeczywista ​genetacja ​planów?+  - W jakiej kolejności (w jakim kierunku) odbywa się rzeczywista ​generacja ​planów?
   - Policz ile jest planów dopuszczalnych (programowo) i porównaj wynik z rozwiązaniem ręcznym.   - Policz ile jest planów dopuszczalnych (programowo) i porównaj wynik z rozwiązaniem ręcznym.
   - Zmodyfikuj program tak, aby dla każdego planu wyznaczał jego długość (ilość odwiedzanych węzłów).   - Zmodyfikuj program tak, aby dla każdego planu wyznaczał jego długość (ilość odwiedzanych węzłów).
-  - Zastanów się jak zeralizować (a może nawet spróbuj) analogiczny program w //Twoim ulubionym języku programowania//​ (np. Java, C++, Python). ​Porónaj naklad ​pracy z kodowaniem w Prologu.+  - Zastanów się jak zrealizować (a może nawet spróbuj) analogiczny program w //Twoim ulubionym języku programowania//​ (np. Java, C++, Python). ​Porównaj nakład ​pracy z kodowaniem w Prologu.
  
 ---- ----
  
-===== Szukanie tras przejazdu pomiędzy miastami w Polsce =====+===== Szukanie tras przejazdu pomiędzy miastami w Polsce =====
  
-Załączony program pozwala ​poszukiwac ​tras przejazdy pomiędzy wybranymi miastami w Polsce.+Załączony program pozwala ​poszukiwać ​tras przejazdy pomiędzy wybranymi miastami w Polsce.
  
-{{:​pl:​prolog:​prolog_lab:​plan.pl|Prosty program planowania tras przejadu}}+Prosty program planowania tras przejazdu: ​{{:​pl:​prolog:​prolog_lab:​plan.pl}}
  
 Przeanalizuj działanie programu. Przeanalizuj działanie programu.
Linia 239: Linia 247:
 Wypróbuj działanie. Wypróbuj działanie.
  
-=== Zadania ===+==== Zadania ​====
  
   - Zmodyfikuj program tak, aby generowane plany omijały wybrane (zadeklarowane) miasta zabronione,   - Zmodyfikuj program tak, aby generowane plany omijały wybrane (zadeklarowane) miasta zabronione,
Linia 247: Linia 255:
 ---- ----
  
-===== Wyznaczanie długości trasy =====+===== - Szukanie DFS z wyznaczeniem głębokości ===== 
 + 
 +Następujący program pozwala wyszukiwać trasy metodą wgłąb (go) i wgłąb z wyliczaniem głębokości. 
 + 
 +{{:​pl:​prolog:​prolog_lab:​depth-first-plan.pl}} 
 + 
 +===== - Wyznaczanie długości trasy =====
  
 Następujący program pozwala wyznaczać długość znalezionych tras. Następujący program pozwala wyznaczać długość znalezionych tras.
  
-{{:​pl:​prolog:​prolog_lab:​plan_d.pl|Program wyznaczający długośc trasy}}+{{:​pl:​prolog:​prolog_lab:​plan_d.pl}}
  
-=== Zadania ===+==== Zadania ​====
  
   - Uruchom program i przeanalizuj jego działanie.   - Uruchom program i przeanalizuj jego działanie.
-  - Modyfikując ograniczenie znajdź wybrane trasy optymalne dla zadanego ​miastat ​początkowego i doceloweg+  - Modyfikując ograniczenie znajdź wybrane trasy optymalne dla zadanego ​miasta ​początkowego i docelowego
-  - Zmodyfikuj program tak aby automatycznie modyfikował ograniczenie i znajdował ​trase optymalną.+  - Zmodyfikuj program tak aby automatycznie modyfikował ograniczenie i znajdował ​trasę ​optymalną.
  
 ---- ----
  
-===== Znajdowanie trasy optymalnej =====+===== Znajdowanie trasy optymalnej =====
  
-Następujący program pozwala automatycznie wyznaczać długość znalezionych tras oraz trasę optymalną.+Następujący program pozwala automatycznie wyznaczać długość znalezionych tras oraz trasę optymalną ​(branch and bound).
  
-{{:​pl:​prolog:​prolog_lab:​plan_d_opt.pl|Wyznaczanie trasy optymalnej}}+Wyznaczanie trasy optymalnej: ​{{:​pl:​prolog:​prolog_lab:​plan_d_opt.pl}}
  
-Przeanalizuj program i jego działenie.+Przeanalizuj program i jego działanie.
  
-Czy zaproponowana metoda jest efektywna? Na czym polegaja ​jej niedoskonalości i ograniczenia?​+Czy zaproponowana metoda jest efektywna? Na czym polegają ​jej niedoskonałości i ograniczenia?​
  
  
Linia 275: Linia 289:
  
  
-===== Znajdowanie trasy optymalnej z wykorzystaniem nawrotów =====+===== Znajdowanie trasy optymalnej z wykorzystaniem nawrotów =====
  
-Następujący program pozwala wyznaczać długość znalezionych tras oraz znajduje ​trase optymalna z wykorzystaniem mechanizmu nawrotów w Prologu.+Następujący program pozwala wyznaczać długość znalezionych tras oraz znajduje ​trasę ​optymalna z wykorzystaniem mechanizmu nawrotów w Prologu.
  
 +Planowanie trasy optymalne z nawrotami: {{:​pl:​prolog:​prolog_lab:​plan_f.pl}}
  
-{{:​pl:​prolog:​prolog_lab:​plan_f.pl|Planowanie trasy optymalne z nawrotami}} +==== Zadania ​====
- +
- +
-=== Zadania ===+
  
   - Przeanalizuj szczegółowo działanie programu; wyświetlaj znalezione trasy.   - Przeanalizuj szczegółowo działanie programu; wyświetlaj znalezione trasy.
Linia 290: Linia 302:
 ---- ----
  
 +===== - Przeszukiwanie wszerz =====
  
 +Następujący program pozwala wyznaczać plan metodą wszerz (BFS)
  
 +{{:​pl:​prolog:​prolog_lab:​breadth-first-plan.pl}}
  
 +==== Zadania ====
  
 +  - Przeanalizuj szczegółowo działanie programu; wyświetlaj znalezione trasy.
 +  - Porównaj efektywność tego programu z poprzednim na wybranych przykładach (użyj meta predykatu //​time/​1//​).
  
 +===== - Szukanie heurystyczne tras =====
  
 +Przeanalizuj działanie programu.
 +Heurystyka jest zadana w ''​szukaj_trasy''​.
 +Porównaj z wcześniejszymi alg. szukania.
  
 +{{:​pl:​prolog:​prolog_lab:​traser.pl|}}
  
 +===== - Szukanie heurystyczne A* dla 8puzzle =====
  
  
 +Program {{:​pl:​prolog:​prolog_lab:​bratko-fig12_3f.pl|}} implementuje algorytm [[wp>​A*]].
 +Zobacz też: [[http://​artint.info/​html/​ArtInt_56.html]]
  
 +Sam program wymaga podania opisu problemu przez predykat ''​s(N,​M,​C).'':​
 +  * N bieżący stan w przestrzeni stanów
 +  * M następny stan
 +  * C koszt N->M
 +Wymagane jest też podanie heurystyki ''​h(N,​H)''​ - gdzie H to heurystyczna estymacja kosztu najlepszej trasy z N do celu.
  
 +Poczytaj o [[wp>​8-puzzle]].
 +W opisie tego problemu używamy innej miary odległości niż np. na drodze, tzw. odległości taksówkarskiej
 +[[wp>​Manhattan_distance]]
  
 +Program {{:​pl:​prolog:​prolog_lab:​bratko-fig12_6.pl|}} implementuje opis tego problemu do rozwiązania przez w.w. algorytm [[wp>​A*]].
  
 +Przykładowe wywołanie:
 +  ?- start1( Pos), bestfirst( Pos, Sol), showsol( Sol).
 +Zobacz rozwiązania dla inne stanów startowych.
  
 +  - dodaj inne stany startowe
 +  - dodaj liczenie kroków.
 +  - jakie mogą być inne heurystyki?
 +  - jak użyć tego programu do tras na mapie (miasta)? czy potrafisz opisać/​przenieść problem z wcześniejszych zadań (mapa miast w Polsce).
  
 +===== - Szukanie -- wizualizacja =====
 +Spróbuj zrealizować wizualizację grafu dla tras przez program Graphviz.
 +Vide: programy w
 +[[pl:​prolog:​prolog_lab:​prolog_lab_system#​metaprogramowanie_i_potoki]]
  
 +===== - Szukanie -- synteza =====
  
 +Przeczytaj lab [[pl:​prolog:​prolog_lab:​classicsearch]].
 +Spróbuj użyć programu [[http://​www.aispace.org/​search/​|AIspace:​ search]]
 +najprościej [[http://​www.aispace.org/​search/​version4.5.3/​search.jar|wersji JAR]].
  
  
  
 +----
  
- +===== If u want 2 know more vel zadanie domowe ===== 
- +  * należy wiedzieć na czym polega problem TSP: [[wp>​Travelling_salesman_problem]] 
 +  * jak się go formalizuje z użyciem grafów [[wp>​Travelling_salesman_problem#​As_a_graph_problem]] 
 +  * dlaczego jest ważny, np. z punktu widzenia złożoności obliczeniowej [[wp>​Travelling_salesman_problem#​As_a_graph_problem/​complex]] 
 +  * czym jest ścieżka Hamiltona [[wp>​Hamiltonian_cycle]]
  
pl/prolog/prolog_lab/prolog_lab_graphsearch.1263979670.txt.gz · ostatnio zmienione: 2019/06/27 15:59 (edycja zewnętrzna)
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0