Logikai programozás 5..

Slides:



Advertisements
Hasonló előadás
A Dijkstra algoritmus.
Advertisements

Lineáris egyenletrendszerek megoldása Gauss elimináció, Cramer-szabály Dr. Kovács Sándor DE GVK Gazdaságelemzési és Statiszikai Tanszék.
Készítette: Kosztyán Zsolt Tibor
Nevezetes algoritmusok
KÉSZÍTETTE: Takács Sándor
MESTERSÉGES INTELLIGENCIA (ARTIFICIAL INTELLIGENCE)
Függvények Egyenlőre csak valós-valós függvényekkel foglalkozunk.
Matematika és Tánc Felkészítő tanár: Komáromi Annamária
FRAME-k (keretek). FRAME-k A frame-ek (keretek) segítségével a képernyőt felosztva egyszerre jeleníthetünk meg több webes dokumentumot a képernyőn. Fejlec.html.
GRÁFELMÉLET Alapfogalmak 2..
Matematika II. 4. előadás Geodézia szakmérnöki szak 2010/2011. tanév Műszaki térinformatika ágazat tavaszi félév.
Csoport részcsoport invariáns faktorcsoport részcsoport
4. VÉGES HALMAZOK 4.1 Alaptulajdonságok
Visual Basic for Application (VBA)
Szélességi bejárás Párhuzamosítása.
Operációkutatás szeptember 18 –október 2.
Programozási alapismeretek 13. előadás. ELTE Érdekességek - kombinatorika  Az iskola bejáratánál N lépcsőfok van. Egyszerre maximum K fokot tudunk lépni,
Állapottér-reprezentáljunk!
Ág és korlát algoritmus
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
Miskolci Egyetem Informatikai Intézet Általános Informatikai Tanszé k Pance Miklós Adatstruktúrák, algoritmusok előadásvázlat Miskolc, 2004 Technikai közreműködő:
1 Györgyi Tamás – GYTNAAI.ELTE 2007 Április 03 Algoritmusok És Adatszerkezetek 2 Gráfalgoritmus Bellman-Ford Algoritmusa S a b d e
„Országos” feladat. Feladat: Egy tetszőleges, színes országokat tartalmazó térképen akar eljutni egy kommandós csapat egy országból egy másikba. Viszont.
PROLOG PROGRAMOZÁSI NYELV
Készítette: Lakos Péter.  Adott egy élsúlyozott, véges gráf  Negatív élsúlyokat nem tartalmaz  Lehet irányított vagy irányítatlan  Továbbá adott egy.
Adatszerkezetek 1. előadás
Gráf Szélességi bejárás/keresés algoritmusa
„Házasodj meg, meg fogod bánni; ne házasodj meg, azt is meg fogod bánni; házasodj vagy ne házasodj, mindkettőt meg fogod bánni; vagy megházasodsz, vagy.
Fák.
A Dijkstra algoritmus.
Gráf szélességi bejárása SzB(G,p). Tetszőleges gráf, melyben a p csúcsot választottam kiindulónak: A gráfnak megfelelő fa:
Feladat: Adott egy város, benne metrók és állomások. Írjunk algoritmust amely megszámolja hogy mennyi az a legkevesebb átszállás amellyel egy tetszőleges.
Logikai programozás 6.. Problémafelvetés: diak(jani, 3.3, pecs). diak(laci, 3.7, kaposvar). diak(matyi, 4.1, pecs). diak(kati, 2.3, barcs). diak(jeno,
Logikai programozás 2..
Programozás III KOLLEKCIÓK.
Logikai programozás 9.. Programok: EGY KIS ISMERET-TÁGÍTÁS – struktura.pl – operatorok.pl, precedencia.pl – útvonaltervezés – send_more_money (smm1.pl,
Nevezetes algoritmusok: Fa megvalósítása Készítette: Várkonyi Tibor Zoltán.
Előadó: Nagy Sára Mesterséges intelligencia Kereső rendszerek.
Logikai programozás 8.. Adatok: ISMÉTLÉS: ADATBÁZISKEZELÉS A külső adatok a hatására bekerülnek a memóriába Lekérdezés: Ahogy eddig – pl.: szereti(jani,
1 Szélességi Bejárás Györgyi Tamás – GYTNAAI.ELTE 2007 Március 22 Algoritmusok És Adatszerkezetek 2 Gráfalgoritmus S b a d e f h g c.
Mélységi bejárás Az algoritmus elve: Egy kezdőpontból kiindulva addig megyünk egy él mentén, ameddig el nem jutunk egy olyan csúcsba, amelyből már nem.
Több képlettel adott függvények
Szélességi bejárás. Kezdőcsúcsból felvétele Innen haladunk egy szinttel mélyebbre, felvesszük az összes olyan csúcsot, amit így elérhetünk Ha elfogytak,
Szélességi bejárás. Kezdőcsúcs felvétele Innen haladunk egy szinttel lejebb, itt felvesszük az összes olyan csúcsot, amit elérünk Ha elfogytak, akkor.
Logikai programozás. ISMÉTLÉS Fibonacci sorozat: a/ fibonacci(1,1). fibonacci(2,1). fibonacci(N,F) :- N > 1, N1 is N - 1, N2 is N - 2, fibonacci(N1, F1),
Háló- (gráf-) algoritmusok
Business Mathematics A legrövidebb út.
GRÁFOK Definíció: Gráfnak nevezzük véges vagy megszámlálhatóan végtelen sok pont és azokat összekötő szintén véges vagy megszámlálhatóan végtelen sok.
Horváth Bettina VZSRA6.  Célja: Az eljárás célja egy véges gráf összes csúcsának bejárása a kezdőcsúcstól való távolságuk szerinti növekvő sorrendben.
Útkeresések.
Illés Zoltán ELTE Informatikai Kar
Bináris kereső fák Itterátorok.
Algoritmusok és Adatszerkezetek Egy kifejezés lengyelformára hozása - bemutató.
Diszjunkt halmazok adatszerkezete A diszjunkt halmaz adatszerkezet diszjunkt dinamikus halmazok S={S 1,…,S n } halmaza. Egy halmazt egy képviselője azonosít.
Gráf szélességi bejárása. Cél Az algoritmus célja az, hogy bejárjuk egy véges gráf összes csúcsát és kiírjuk őket a kezdőcsúcstól való távolságuk szerint.
Gráf szélességi bejárása. A szélességi bejárás elmélete Célja egy véges gráf összes csúcsának bejárása a kezdőcsúcstól való távolságuk szerinti növekvő.
Algoritmusok és adatszerkezetek
Szélességi bejárás Gráf-algoritmusok Algoritmusok és adatszerkezetek II. Gergály Gábor WZBNCH1.
Üzleti szintek Személyes PV Direktek bal / jobb Kisebb Bin. ág QV / hétDirekt min. Partner Üzleti szint kvalifikációk!
Algoritmus DAG = irányított körmentes gráf. Először ezt a tulajdonságot ellenőrizzük (mélységi bejárással), aztán rendezzük: Q: Sor adatszerkezet, kezdetben.
HÁLÓZAT Maximális folyam, minimális vágás
Logikai programozás 6..
Egy sakk feladat megoldása algoritmussal
Algoritmusok és Adatszerkezetek I.
Mesterséges intelligencia
Nem módosítható keresések
Depth First Search Backtracking
Algoritmusok és Adatszerkezetek I.
Gráfalgoritmusok G=(V,E) gráf ábrázolása
Állapottér-reprezentáljunk!
Előadás másolata:

Logikai programozás 5.

ISMÉTLÉS – NÉHÁNY LISTA PÉLDA Listaelemek száma: hossz([], 0). hossz([_|T], H) :- hossz(T,Thossz), H is Thossz + 1. hossz(L, H) :- hossz(L, 0, H). hossz([_|T], Eddig, H) :- Uj is Eddig + 1, hossz(T, Uj, H). hossz([], H, H).

ISMÉTLÉS – NÉHÁNY LISTA PÉLDA Hány db, adott feltételnek megfelelő elem van egy listában: hanydb([],0). hanydb([F|T],H) :- hanydb(T,Tdb), feltetel(F), H is Tdb + 1. hanydb([_|T],H) :- hanydb(T,H). ,!. és ha egyértelmű megoldást szeretnénk?(; hatására sincs több) hanydb([],0). hanydb([F|T], H) :- hanydb(T, Tdb),!, ( feltetel(F), H is Tdb + 1 ; H is Tdb ). Itt és a továbbiakban feltetel(F) :- … a feltételt tartalmazó szabály. ez is jó: feltetel(F) -> H is Tdb + 1

ISMÉTLÉS – NÉHÁNY LISTA PÉLDA Hány db, adott feltételnek megfelelő elem van egy listában: hanydb(L, H) :- hanydb(L, 0, H). hanydb([F|T], Eddig, H) :- feltetel(F), Uj is Eddig + 1, hanydb(T, Uj, H). hanydb([_|T], Eddig, H) :- hanydb(T, Eddig, H). hanydb([], H, H). ,!. és ha egyértelmű megoldást szeretnénk?(; hatására sincs több) hanydb([F|T], Eddig, H) :- ( feltetel(F) -> Uj is Eddig + 1 ; Uj is Eddig ), hanydb(T, Uj, H). hanydb([], H, H).

LISTA PÉLDA - BŐVÍTÉS Hány db, tetszőleges feltételnek megfelelő elem van egy listában: hanydb(L, H, Feltetel) :- hanydb(L, 0, H, Feltetel),!. hanydb([F|T], Eddig, H, Feltetel) :- ( current_atom(Feltetel), Term =.. [Feltetel,F], Term -> Uj is Eddig + 1 ; Uj is Eddig ), hanydb(T, Uj, H, Feltetel). hanydb([], H, H,_). ?- hanydb([1,2,3,4,5,6], Db, feltetel). current_atom =.. ld. HELP

ISMÉTLÉS – ÚTKERESÉS Az útkeresési példa és javítása start:- write('Melyik városból akarsz indulni ?'), read(Start), write('Hova akarsz eljutni ?'), read(Cel), ut(Start,Cel). ut(Start,Cel) :- repulo(Start,Cel). ut(Start,Cel) :- repulo(Start,Uj_varos), ut(Uj_varos,Cel).

ISMÉTLÉS – ÚTKERESÉS Az útkeresési példa és javítása ut(Start,Cel,_,[Start,Cel]) :- repulo(Start,Cel). ut(Start,Cel,Eddigvizsgalt ):- repulo(Start,Uj_varos), , [Start|Utvonal] \+(member(Uj_varos,Eddigvizsgalt)), ut(Uj_varos,Cel,[Uj_varos|Eddigvizsgalt],Utvonal). start:- write('Melyik városból akar indulni ?'), read(Start), write('Hova akar eljutni ?'), read(Cel), ut(Start,Cel, [Start,Cel],Megoldas), writeln(Megoldas), fail. start.

KERESÉSEK A keresési algoritmus (esetleges javításokkal) tetszőleges gráf esetén is alkalmazható. Az ose(A,B) :- el(A,B). ose(A,B) :- el(A,C), ose(C,B). keresés tetszőleges fa-gráf esetén alkalmazható. :-use_module(arpadhaz). %:-use_module(kiralynok). %:- use_module(vasut). %:-use_module(farmer).

KERESÉSEK :- module(arpadhaz,[el/2]). el(INNEN,IDE):- szuloje(INNEN,IDE). szuloje('álmos', 'árpád'). szuloje('árpád', zolta). szuloje('árpád', tarhos). szuloje('árpád', 'üllő'). szuloje('árpád', jutas). szuloje(tarhos,tevel). …

KERESÉSEK :- module(vasut,[el/2]). el(INNEN,IDE):- vonal(INNEN,IDE). el(INNEN,IDE):- vonal(IDE,INNEN). vonal('Budapest','Székesfehérvár'). vonal('Budapest','Pusztaszabolcs'). vonal('Pusztaszabolcs','Börgönd'). vonal('Börgönd','Székesfehérvár'). vonal('Börgönd','Szabadbattyán'). vonal('Székesfehérvár','Szabadbattyán'). vonal('Szabadbattyán','Csajág'). … VIGYÁZAT! Nem fa-gráf!

KERESÉSEK Feladat: hogyan lehet egy 4-szer 4-es sakktáblán elhelyezni négy királynőt úgy, hogy ne üssék egymást. (Alapfeladat: igazi sakktáblán 8 királynő.) FONTOS MEGJEGYZÉS: Most a gráf szemléltetése céljából konkrét adatokkal írjuk meg a modult, de NE szokjon hozzá, hogy konkrét adatokkal ír programot!!! A feladat ügyesebben (és elegánsabban, jobban) is megoldható, ha általánosan fogalmazzuk meg a táblára pakolás szabályát. HF: egy ennél ügyesebb, célirányos megoldás.

KERESÉSEK :- module(kiralynok,[el/2]). el(tabla(0,0,0,0),tabla(X,0,0,0)) :- member(X,[1,2,3,4]). el(tabla(X,0,0,0),tabla(X,Y,0,0)) :- member(Y,[1,2,3,4]), X=\=Y, abs(X-Y)=\=1. el(tabla(X,Y,0,0),tabla(X,Y,Z,0)) :- member(Z,[1,2,3,4]), X=\=Z, abs(X-Z)=\=2, Y=\=Z, abs(Y-Z)=\=1. el(tabla(X,Y,Z,0),tabla(X,Y,Z,Q)) :- member(Q,[1,2,3,4]), X=\=Q, abs(X-Q)=\=3, Y=\=Q, abs(Y-Q)=\=2, Z=\=Q, abs(Z-Q)=\=1.

KERESÉSEK Probléma: A farmernek át kell vinnie a folyón a farkast, kecskét, ill. a káposztát úgy, hogy a/ rajta kívül legföljebb egy valaki fér el a csónakban b/ távollétében nehogy kárt tegyen a farkas a kecskében, ill. a kecske a káposztában.

KERESÉSEK Kecske-farkas-káposzta: http://www.plastelina.net/examples/games/game1.html

KERESÉSEK :- module(farmer,[el/2]). el(EGYIK,MASIK) :- atvisz(EGYIK,MASIK), \+ hibas(EGYIK), \+ hibas(MASIK). atvisz: hatására EGYIK állapotból a MASIK-ba kerülünk allapot: azt mutatja, hogy a farmer, a farkas, a kecske ill. a káposzta a folyó melyik oldalán van. Pl. allapot(bal,bal,jobb,bal) jelentése: a farmer, a farkas és a káposzta a folyó baloldalán, a kecske a folyó jobboldalán van.

KERESÉSEK hibás az az állapot, ahol a kecske és a káposzta, illetve a farkas és a kecske a folyó azonos oldalán van, a farmer viszont az ellenkező oldalon. hibas(allapot(Farmer,_,Kecskekaposzta,Kecskekaposzta)) :- ellenkezo(Farmer,Kecskekaposzta) . hibas(allapot(Farmer,Farkaskecske,Farkaskecske,_)) :- ellenkezo(Farmer,Farkaskecske) . ellenkezo(bal,jobb). ellenkezo(jobb,bal).

KERESÉSEK atvisz(allapot(Farmer1,Farkas,Kecske,Kaposzta), ellenkezo(Farmer1,Farmer2). /*a farmer egyedül megy át a túloldalra */ atvisz(allapot(Farmer1,Farkas1,Kecske,Kaposzta), allapot(Farmer2,Farkas2,Kecske,Kaposzta)):- ellenkezo(Farmer1,Farmer2), ellenkezo(Farkas1,Farkas2). /*a farmer a farkast viszi át */

KERESÉSEK atvisz(allapot(Farmer1,Farkas,Kecske1,Kaposzta), ellenkezo(Farmer1,Farmer2), ellenkezo(Kecske1,Kecske2). /*a farmer a kecskét viszi át */ atvisz(allapot(Farmer1,Farkas,Kecske,Kaposzta1), allapot(Farmer2,Farkas,Kecske,Kaposzta2)):- ellenkezo(Farmer1,Farmer2), ellenkezo(Kaposzta1,Kaposzta2). /*a farmer a káposztát viszi át */ VIGYÁZAT! Ez sem fa-gráf!

KERESÉSEK Javított keresés: – nem engedjük meg, hogy ugyanazt a csúcsot egy útvonal keresése során többször is vizsgálja – eredményként meghatározzuk a megtalált útvonalat is. Megjegyzés: ez az úgynevezett mélységi keresés, vagyis a kereső-gráfban mindig a legmélyebben lévő csúcsból folytatja a keresést. Sok egyéb keresési algoritmus is van, nem ez az egyetlen, sőt, nem is a leghatékonyabb, de könnyű megvalósítani.

KERESÉSEK melysegi(Start,Cel,Megoldas) :- melysegi(Start,Cel, [Start,Cel], Megoldas). melysegi(Start,Cel,_,[Start,Cel]) :- el(Start,Cel). melysegi(Start,Cel,Eddigvizsgalt,[Start|Utvonal]) :- el(Start,Csucs), \+ member(Csucs,Eddigvizsgalt), melysegi(Csucs,Cel,[Csucs|Eddigvizsgalt],Utvonal).

KERESÉSEK Szélességi keresés: Az adott csúcs összes rákövetkezőjét vizsgáljuk, és addig nem megyünk egy szinttel lejjebb, amíg mindet meg nem néztük. (Felfogható párhuzamos keresésnek is.)

KERESÉSEK szelessegi(Start,Cel):- szelessegi([Start],Cel,[Start]). szelessegi([Start|_],Start,_). szelessegi([Start|Csucsok],Cel,Utvonal):- findall(Csucs,( el(Start,Csucs), \+ member(Csucs,Utvonal) ), Kovetkezok), append(Csucsok,Kovetkezok,UjCsucsok), append(Utvonal,UjCsucsok,UjUt), szelessegi(UjCsucsok,Cel,UjUt). findall(Valtozo, feltetel(Valtozo), Lista) - részletesen később

KERESÉSEK HF: bővítse ki az előző programot pl. ezekkel a tényállításokkal: el(a,b). el(a,c). el(b,d). el(b,e). el(c,f). el(c,g). el(d,h). el(d,i). el(e,j). Próbálja ki nyomkövetéssel pl. a :- szelessegi(a,g) célt. (vagy más hasonlót)