Prohledávání grafů.

Slides:



Advertisements
Podobné prezentace
Grafové algoritmy.
Advertisements

DOTAZOVACÍ JAZYKY slajdy přednášce DBI006
DOTAZOVACÍ JAZYKY slajdy přednášce DBI006
J. Pokorný 1 DOTAZOVACÍ JAZYKY slajdy přednášce DBI006 J. Pokorný MFF UK
PLANARITA A TOKY V SÍTÍCH
Stavový prostor. • Existují úlohy, pro které není k dispozici univerzální algoritmus řešení • různé hry • problém batohu, problém obchodního cestujícího.
Prohledávání stavového prostoru
Ladění, pred. vyšších řádů (7)  Jan Hric, KTI MFF UK, a
Aplikace teorie grafů Základní pojmy teorie grafů
Modulární systém dalšího vzdělávání pedagogických pracovníků JmK v přírodních vědách a informatice CZ.1.07/1.3.10/ Prezentace zadání a řešení Teorie.
Predikátová logika1 Predikátová logika 1. řádu Teď „logika naostro“ !
Programovací jazyk Prolog
Sample Solutions CTU Open Contest 2012 Czech Technical University in Prague.
Principy překladačů Vysokoúrovňové optimalizace Jakub Yaghob.
ADT Strom.
Minimalizace logických funkcí - pomocí Booleovy algebry
Základní číselné množiny
Řešení dynamických problémů s podmínkami Pavel Surynek Univerzita Karlova v Praze Matematicko-fyzikální fakulta.
SÍŤOVÁ ANALÝZA.
TI 7.1 NEJKRATŠÍ CESTY Nejkratší cesty - kap. 6. TI 7.2 Nejkratší cesty z jednoho uzlu Seznámíme se s následujícími pojmy: w-vzdálenost (vzdálenost na.
ORIENTOVANÉ GRAFY V této části se seznámíme s následujícími pojmy:
JUI - 9. přednáška Ř ez, negace, práce s databází RNDr. Jiří Dvořák, CSc.
Dostupné z Metodického portálu ISSN: , financovaného z ESF a státního rozpočtu ČR. Provozováno Výzkumným ústavem pedagogickým v Praze.
Sémantická analýza Jakub Yaghob
Výukový materiál zpracován v rámci projektu EU peníze školám Registrační číslo projektu: CZ.1.07/1.5.00/ Šablona:III/2č. materiálu:VY_32_INOVACE_89.
Algoritmy vyhledávání a řazení
Databázové systémy Přednáška č. 7 Uživatelské rozhraní.
Predikátová logika.
Definiční obory. Množiny řešení. Intervaly.
Přednáška 10 Logické programování, PROLOG (PROgramming in LOGic)
3. Přednáška posloupnosti
Jazyk XML Jazyk pro tvorbu strukturovaných dokumentů Syntaxí velmi podobný HTML Hlavní cíle návrhu: Snadná editace - jazyk je textový Snadné strojové zpracování.
Výroková logika.
TEORIE HER.
Přednáška 10 Logické programování, PROLOG (PROgramming in LOGic)
Zpracování neurčitosti Fuzzy přístupy RNDr. Jiří Dvořák, CSc.
Matematické metody optimalizace Tomáš Vaníček Katedra inženýrské informatiky Stavební fakulta ČVUT Thákurova 7, Praha 6 Dejvice, b407
Marie Duží vyučující: Marek Menšík Logika: systémový rámec rozvoje oboru v ČR a koncepce logických propedeutik pro mezioborová studia.
Základ hry HEX: dva matematické výsledky Nejvýš jeden hráč vybuduje cestu. Aspoň jeden hráč vybuduje cestu.
Úvod do logiky (presentace 2) Naivní teorie množin, relace a funkce
Procedurální (klasické) programování Popisuje algoritmus – postup, jak vyřešit úlohu.
Projektové plánování.
Marie Duží vyučující: Marek Menšík Logika: systémový rámec rozvoje oboru v ČR a koncepce logických propedeutik pro mezioborová studia.
Plánování trajektorie pro bezpilotní letoun za účelem sledování pozemních objektů pomocí inerciálně stabilizované kamerové platformy Michal Kreč Vedoucí.
Predikátová logika1 Predikátová logika 1. řádu Teď „logika naostro“ !
JUI přednáška Vstup a výstup, cykly RNDr. Jiří Dvořák, CSc.
Doc. Josef Kolář (ČVUT)Prohledávání grafůGRA, LS 2010/11, Lekce 4 1 / 15Doc. Josef Kolář (ČVUT)Prohledávání stavového prostoruGRA, LS 2013/14, Lekce 11.
Prostorové datové struktury
Hledání silně souvislý komponent Silně souvislá komponenta orientovaného grafu G= (V,E) je maximální množina uzlů UV taková že ∀ u,v ∈ V : u je dosažitelné.
Soustavy lineárních rovnic Matematika 9. ročník Creation IP&RK.
TI 3.1 UPOZORNĚNÍ Reprezentace grafů, odst. 4.1 dne (za týden) bude X36TIN dvakrát dne (za 5 týdnů) bude X36OSY dvakrát skripta.
NEJKRATŠÍ CESTY Nejkratší cesty - kap. 6.
Úvod do databázových systémů
Definiční obor a obor hodnot
STROMY A KOSTRY Stromy a kostry - odst. 3.2.
Znázornění dopravní sítě grafem a kostra grafu Předmět: Teorie dopravy - cvičení Ing. František Lachnit, Ph.D.
Maximální propustnost rovinné dopravní sítě
PROLOG strategie vyhodnocení dotazu
Predikátová logika (1. řádu).
Prohledávání stavového prostoru
Toky v sítích.
Prakticky identické postupy:
Algoritmizace a datové struktury (14ASD)
Predikátová logika.
Základní algoritmy Prologu
Soustavy lineárních rovnic
Prohledávání stavového prostoru
PROLOG strategie vyhodnocení dotazu
Definiční obory. Množiny řešení. Intervaly.
Soustava dvou lineárních rovnic se dvěma neznámými
Transkript prezentace:

Prohledávání grafů

Prohledávání stromu:g1 hr(a,b). hr(a,c). hr(a,d). hr(b,e). hr(b,f). hr(c,g). hr(c,h). cesta(X,X). cesta(Z,D):-hr(Z,N),cesta(N,D). % ?- cesta(a,X). % X = a ; X = b ; X = e ; X = f ; X = c ; X = g ; X = h ; % X = d ; no % Pořadí určuje SLD strategie, tj. „prohledávání do hloubky“ a c b f g h e d

Prohledávání grafu:g1a hr(a,b). hr(a,c). hr(a,d). hr(b,e). hr(b,f). hr(f,a) hr(c,g). hr(c,h). cesta(X,X). cesta(Z,D):-hr(Z,N),cesta(N,D). ?- cesta(a,X). X = a ; X = b ; X = e ; X = f ; X = a ; X = b ; X = e ; X = f ; X = a ; X = b ; X = e ; X = f ; .... % k uzlům c, d, g, h se SLD strategie „prohledávání do hloubky“ nikdy nedostane ?- cesta(f,c). a c b f g h e d

Prohledávání obecného grafu:g1b hr(a,b). hr(a,c). hr(b,e). hr(b,f). hr(c,a). hr(c,g). hr(c,h). cesta(X,X). cesta(Z,D):-hr(Z,N),cesta(N,D). % ?- cesta(a,X). % X = a ; X = b ; X = e ; X = f ; X = a ; X = b ; X = e ; X = f ; X = a ; ... % ?- cesta(a,g). Abort Jak ovlivní výpočet změna pořadí : hr(c,g). hr(c,h). hr(c,a). ? viz g1c a c b f g h e Jak řešit tento problém? Je třeba * buď omezit hloubku * zkontrolovat, že se nevracíme do bodu, kudy jsme už prošli.

Prohledávání do omezené hloubky:g2 a c b d i n m f g h j e k l /* Forma popisu orient.grafu: seznam hran hr(Poc_uzel,Konc_uzel) a seznam cilovych uzlu c(Uzel) */ hr(a,b). hr(a,c). hr(a,d). hr(b,e). hr(b,f). hr(c,g). hr(c,h). hr(c,a). hr(g,k). hr(g,l). hr(d,i). hr(d,j). hr(j,m). hr(j,n). /* Nechť cílové uzly jsou vyznačeny predikátem cil(_), např. cil(e). cil(g). */ cil(f). cil(i). cil(l). cil(n). % omezena_hl(+VychoziUzel, -Reseni, +Max_hloubka) omezena_hl(Uzel,[Uzel], _ ):- cil(Uzel). omezena_hl(Uzel,[Uzel|CastReseni], Max_Hl ):- Max_Hl > 0,hr(Uzel,Naslednik),Max1 is Max_Hl –1, omezena_hl(Naslednik, CastReseni, Max1 ).

Prohledávání do omezené hloubky:g2 hr(a,b). hr(a,c). hr(a,d). hr(b,e). hr(b,f). hr(c,g). hr(c,h). hr(c,a). hr(g,k). hr(g,l). hr(d,i). hr(d,j). hr(j,m). hr(j,n). cil(d). cil(f). cil(i). cil(l). cil(n). omezena_hl(Uzel,[Uzel], _ ):- cil(Uzel). omezena_hl(Uzel,[Uzel|CastReseni], Max_Hl ):- Max_Hl > 0,h(Uzel,Naslednik),Max1 is Max_Hl –1, omezena_hl(Naslednik, CastReseni, Max1 ). ?- omezena_hl(a,Kudy,2). Kudy= [a,b,f]; [a,b,i]; No ?- omezena_hl(a,Kudy,5). Kudy= [a,b,f]; [a,c,g,l]; [a,c,a,b,f]; [a,c,a,c,g,l]; [a,c,a,d,i];[a,c,a,d,j,n]; [a,d,i]; [a,d,j,n]; No a c b d i n m f g h j e k l

Prohledávání grafu se záznamem cesty 1: g2 b d i n m f g h j e k l hr(a,b). hr(a,c). hr(a,d). hr(b,e). hr(b,f). hr(c,g). hr(c,h). hr(c,a). hr(g,k). hr(g,l). hr(d,i). hr(d,j). hr(j,m). hr(j,n). cil(d). cil(f). cil(i). cil(l). cil(n). % c_hl(+Vychozi_uzel,-Cilovy_uzel,-Cesta) c_hl(X,X,[]) :- cil(X). c_hl(X,Y,[M|L]) :- hr(X,M),c_hl(M,Y,L). ?- c_hl(a,X,S). X=f, S=[b,f]; X=l, S=[c,g,l] ; X=f,S=[c,a,b,f]; X=l,S=[c,a,c,g,l]; X=f, S=[c,a,c,a,b,f]; X=l,S=[c,a,c,a,c,g,l]; X=f, S=[c,a,c,a,c,a,b,f]; ... Můžeme zkontrolovat, že M není v L?

Prohledávání grafu se záznamem cesty 2 b d i n m f g h j e k l c_hl_1(X,X,[]) :- cil(X). c_hl_1(X,Y,[M|L]) :- hr(X,M),not member(M,L),c_hl_1(M,Y,L). ?- c_hl_1(a,e,S). No ?- c_hl_1(a,Kam,Jak). No Důvod? not je použito na seznam, jehož hodnotou je proměnná. V takovém případě odpovídající dotaz vždy uspěje!!! Např. ?-member(a,S). S= [a|L] Tedy naopak not member(X,L) selže. Správnější varianta řešení: c_hl_2(X,Y,[M|L]) :- hr(X,M),c_hl_1(M,Y,L), not member(M,L).

Prohledávání grafu se záznamem cesty 2: g2 b d i n m f g h j e k l hr(a,b). hr(a,c). hr(a,d). hr(b,e). hr(b,f). hr(c,g). hr(c,h). hr(c,a). hr(g,k). hr(g,l). hr(d,i). hr(d,j). hr(j,m). hr(j,n). cil(d). cil(f). cil(i). cil(l). cil(n). % c_hl_n(+Vychozi_uzel,-Cilovy_uzel,-Cesta) c_hl_n(X,X,[]) :- cil(X). c_hl_n(X,Y,[M|L]) :- hr(X,M),c_hl_n(M,Y,L),not member(M,L). ?- c_hl_n(a,X,S). X=f, S=[b,f]; X=l, S=[c,g,l] ; X=f,S=[c,a,b,f]; abort

Prohledávání grafu s kontrolou zacyklení: g3 /* efektivnější řešení s kontrolou výskytu pro eliminaci zacyklení s pomocnou proměnnou UvodReseni */ res(VychoziU,Reseni) :- prohlizeni_hl([VychoziU],VychoziU,Reseni). prohlizeni_hl(UvodReseni,Uzel,UvodReseni):- cil(Uzel). prohlizeni_hl(UvodReseni,Uzel,Reseni):- hr(Uzel,NaslU), not member(NaslU, UvodReseni), prohlizeni_hl([NaslU|UvodReseni],NaslU,Reseni). S = [f, b, a] Yes (0.00s cpu, solution 1, maybe more) S = [l, g, c, a] Yes (0.00s cpu, solution 2, maybe more) S = [i, d, a] Yes (0.00s cpu, solution 3, maybe more) S = [n, j, d, a] Yes (0.00s cpu, solution 4, maybe more) No (0.00s cpu)

Predikáty 2. Řádu setof (+Z,+Cil(Z,X),-S) Fixuje X a nalézá neprázdný seznam S všech instancí za Z, pro které platí Cil(Z, X) : seznam S chápe jako uspořádanou množinu, t.j. bez opakování pokud řešení pro Cil(Z,X) neexistuje, pak výsledkem volání predikátu setof byl seznam prázdný, a proto program hlásí neúspěch Příklad (g4): hr(a,b). hr(a,c). hr(a,d). hr(b,e). hr(b,f). hr(c,g). hr(c,h). hr(c,a). ?- setof(Z,hr(a,Z),S). S = [b,c,d] ?- setof(Z,hr(X,Z),S). Z = Z X = a S = [b, c, d] Yes (0.00s cpu, solution 1, maybe more) Z = Z X = b S = [e, f] Yes (0.03s cpu, solution 2, maybe more) Z = Z X = c S = [a, g, h] Yes (0.03s cpu, solution 3) ?- setof(X, hr(d, X), S). No (0.00s cpu) a c b f g h e d

Predikáty 2. Řádu bagof (+Z,+Cil(Z,X),-S) h e d Proměnné lze ve výrazu +Cil(Z,X) existenčně kvantifikovat pomocí značky ^ hr(a,b). hr(a,c). hr(a,d). hr(b,e). hr(b,f). hr(c,g). hr(c,h). hr(c,a). ?- setof(Z,X^hr(X,Z),S). S = [a, b, c, d, e, f, g, h] bagof(+Z,+Cil(Z,_),-S) nalézá seznam S všech instancí za Z, které jsou řešením pro cíl Cil(Z,_) , prvky se v S mohou opakovat --> rychlejší než setof ?- bagof(Z, h(a,Z), S). S = [ b, c, d ] % Pozor ! Z uzlu d nevede žádná hrana, proto ?- bagof(Z, h(d,Z), S). No.

Predikáty 2. řádu findall (+Term(Z),+Cil(Z),-S) podobný jako bagof, ovšem vždy končí úspěchem : nalézá seznam S (s opakováním) všech takových Z instancí výrazu Term, pro které platí Cil(Z) v případě, že neexistuje objekt splňující Cil(Z) , je S = [ ] Příklad: h(a,b). h(a,c). h(b,e). h(b,f). h(c,g). h(c,h). h(c,a). ?- findall(symetricky(X,Y) , (h(X,Y),h(Y,X)) ,S). S = [symetricky(a,c)] ?- findall(symetricky(b,Y), (h(b,Y),h(Y,b)) ,S). S = [ ] ?- findall(Z, h(f,Z), S). S = [ ] a c b f g h e

Prohledávání stavového prostoru do šířky pridej_za(+Open,+Uzel,-Vysledek) nalezne všechny přímé násl. uzlu Uzel, tento seznam přidá za Open a tak vznikne Vysledek. vlna(+Open,Z) hledá cestu, t.ž. začíná v některém prvku seznamu Open a končí v cílovém uzlu Z (Open odpovídá seznamu Open nodes používaném v klas.implementaci prohl.stav.prost.) dotaz ?-c_sir(a,X). Najde “nejbližší“ cílový uzel dostupný z a c_sir(X,X) :- cil(X). c_sir(X,Y) :- vlna([X],Y). vlna([],_) :- write('Vic cil.uzlu neni.'),nl. vlna([H|T],H):- cil(H). vlna([Y|L],Z):- pridej_za(L,Y,N),vlna(N,Z). pridej_za(L,Y,N) :-primi_naslednici(Y,S),append(L,S,N). primi_naslednici(Y,S) :- bagof(Z,hr(Y,Z),S),!. primi_naslednici(Y,[]).

Prohledávání grafu do šířky: g2 ?-c_sir(a,X). X = f; X = i; X = l; X = n; Cvičení: Upravte program tak, aby podával i informace o cestě použité k dosažení cíle! a c b d i n m f g h j e k l

Prohledávání grafu - potřebné prostředky Prologu stromy a acyklické grafy - stačí čistý Prolog konečné grafy s případným cyklem - Prolog + negace * nekonečné grafy (lokálně konečné) - Prolog + negace* + predikáty 2. řádu ** * nutná pro kontrolu cyklu ** prohledávání do šířky