Prezentace se nahrává, počkejte prosím

Prezentace se nahrává, počkejte prosím

Logické programování Úvodní přednáška. 2 Průběh výuky Přednášky/cvičení - 2/2 Přednášky prof. RNDr. Josef Hynek, MBA, Ph.D. Cvičení Doc. RNDr. Kamila.

Podobné prezentace


Prezentace na téma: "Logické programování Úvodní přednáška. 2 Průběh výuky Přednášky/cvičení - 2/2 Přednášky prof. RNDr. Josef Hynek, MBA, Ph.D. Cvičení Doc. RNDr. Kamila."— Transkript prezentace:

1 Logické programování Úvodní přednáška

2 2 Průběh výuky Přednášky/cvičení - 2/2 Přednášky prof. RNDr. Josef Hynek, MBA, Ph.D. Cvičení Doc. RNDr. Kamila Olševičová, Ph.D. Ing. Barbora Tesařová, Ph.D.

3 3 Ukončení předmětu Zápočet - dva písemné testy (polovina a konec semestru) - podmínky budou specifikovány na cvičeních Zkouška - písemná a ústní, 4 úlohy Vzorové zadání 1. Zadaný seznam reálných čísel S rozdělte na dvě části (libovolným způsobem) tak, aby součet čísel v obou částech byl stejný (např. pro seznam S=[1,3,2,4] bude výsledek S1 = [1,4], S2 = [3,2] ). 2. Napište program, který navrhne obarvení zadané mapy čtyřmi barvami (viz. skripta str. 199). 3. Logický problém (viz. přednáška nebo skripta str. 213). 4. Napište program, který rozhodne, zda zadané číslo N je prvočíslo.

4 4 Literatura Hynek,J., Mikulecký,P.: Logické programování a Prolog. (1995, 2003) Kolář,J.: Jazyky pro umělou inteligenci. (1998) Jirků,P.: Programování v jazyku Prolog. (1991) Polák,J.: Prolog. (1995) Clocksin,W.F., Mellish, C.S.: Programming in Prolog. (2003) Bratko,I.: Prolog – programming for AI. (2000) Censki, A.: Prolog Techniques. (http://bookboon.com)

5 5 Další zdroje kurz Logické programování I. Nemáte-li do kurzu přístup, zašlete svůj login na adresu Programování v Prologu (Filip Rubáček) Kryl, R.: Úvod do programovacího jazyka Prolog Learn Prolog Now! Amzi! Prolog, Arity Prolog, B-Prolog, Strawberry Prolog, SWI – Prolog, Visual Prolog … lze najít a stáhnout z webu

6 6 Úvod Logické programování = disciplína matematické informatiky Prolog = PROgramování v LOGice –jazyk pro programování symbolických výpočtů, založený na matematické logice –vhodný k řešení problémů z oblasti umělé inteligence

7 7 Pohled do historie verze, A.Colmerauer na univerzitě v Marseilles R.Kowalski vytvořil teoretický model jazyka, na který navázaly další implementace nejúspěšnější verze D.H.D.Warrena, popsaná v učebnici W.F.Clocksina a C.S.Mellishe "Programming in Prolog" v Japonsku byl Prolog zvolen za základní jazyk centrální jednotky počítače páté generace

8 8 Prolog je jazyk... neprocedurální - postup řešení problému není to, co by nás nejvíc zajímalo deklarativní - při psaní programu deklarujeme fakta a pravidla, jimiž popíšeme vlastnosti a vztahy mezi objekty konverzační - uživatel klade dotazy, na které mu Prolog odpovídá interaktivní - pokud uživatel dotazy neklade, Prolog nepracuje a čeká

9 9 Příklad kral('Premysl Otakar I.',1197,1230). kral('Vaclav I.',1230,1253). kral('Premysl Otakar II.',1253,1278). predchudce(Prvni, Druhy):-kral(Prvni,_,Do),kral(Druhy,Do,_). naslednik(A,B):-predchudce(B,A). ?- kral('Vaclav I.',1230,1253). yes ?- kral(X, 1253,Rok). X = 'Premysl Otakar II.‚, Rok = 1278 Formální skutečnosti (fakta) Relace (pravidla) Konverzace s Prologem Textový editor Konzole

10 10 LPA Prolog

11 11 LPA Prolog

12 PROLOG snadno a rychle

13 13 Programování v Prologu Programování v PROLOGu spočívá v – deklarování určitých faktů o objektech a relacích president(obama,usa). – definování pravidel vztahujících se k objektům a relacím vip(Person):-president(Person,Country). – kladení otázek na objekty a relace ?-president(Who,czech_republic).

14 14 Deklarování faktů Tom má rád Janu. Jana má ráda Toma. Jednodušší gramatika AJ: Jednodušší gramatika AJ: Tom likes Jane. Jane likes Tom. Přepis v PROLOGu: Přepis v PROLOGu: likes(tom, jane). likes(jane, tom). Jména relací (predikáty) i objektů (argumenty) začínají malým písmenem Jména relací (predikáty) i objektů (argumenty) začínají malým písmenem Každý predikát má pevně danou aritu (počet argumentů) – predikát likes má aritu 2 Každý predikát má pevně danou aritu (počet argumentů) – predikát likes má aritu 2

15 15 Deklarování faktů Argumenty jsou uvedeny v závorce a na konci sdělení je tečka Argumenty jsou uvedeny v závorce a na konci sdělení je tečka Pořadí argumentů má obvykle svůj význam a je třeba jej zachovávat Pořadí argumentů má obvykle svůj význam a je třeba jej zachovávat likes(tom, jane). často neznamená likes(jane, tom). Jména relací mohou být libovolná, ale lépe je používat s rozmyslem a udržet si přehled Jména relací mohou být libovolná, ale lépe je používat s rozmyslem a udržet si přehled likes(jane,tom). jistě může být totéž co li34(t6, j_1). Lze deklarovat i zjevné nepravdy Lze deklarovat i zjevné nepravdy king(obama, china).

16 16 Deklarování faktů Další příklady Další příkladygirl(jane). father(george, lisa). parents(george, mary, lisa). friends(angel, mary, lisa, laura, barbara). president(`Putin`,`Russia`). president(putin, russia). % POZOR- jiné objekty!!! king(carlos, spain). /* soubor deklarovaných faktů a pravidel se v PROLOGu nazývá databáze */

17 17 Kladení otázek ?-father(george, lisa). Položíme-li nějaký dotaz, PROLOG hledá odpověď v databázi, kterou jsme mu předtím poskytli Položíme-li nějaký dotaz, PROLOG hledá odpověď v databázi, kterou jsme mu předtím poskytli Databáze je prohledávána shora dolů s cílem nalézt fakta a pravidla, která s dotazem souvisí Databáze je prohledávána shora dolů s cílem nalézt fakta a pravidla, která s dotazem souvisí Mluvíme o tzv. unifikaci (matching) Mluvíme o tzv. unifikaci (matching) Dvě fakta lze unifikovat, jestliže jejich predikáty jsou stejné, mají stejnou aritu a korespondující argumenty jsou také stejné Dvě fakta lze unifikovat, jestliže jejich predikáty jsou stejné, mají stejnou aritu a korespondující argumenty jsou také stejné Pokud PROLOG nalezne skutečnost, kterou lze unifikovat se zadaným dotazem, odpoví YES, jinak odpoví NO Pokud PROLOG nalezne skutečnost, kterou lze unifikovat se zadaným dotazem, odpoví YES, jinak odpoví NO

18 18 Kladení otázek Předpokládejme, že máme zadanou následující databázi: Předpokládejme, že máme zadanou následující databázi: likes(tom, mary). likes(tom, jane). likes(mary, money). likes(tom, food). Nyní můžeme klást dotazy Nyní můžeme klást dotazy ?-likes(tom, jane). yes % proběhne unifikace s 2. řádkem ve výše uvedené databázi ?-likes(peter, jane). no % nelze unifikovat s žádným faktem ve výše uvedené databázi ?-animal(dog).

19 19 Kladení otázek Důležité je správně chápat odpověď na položenou otázku: Důležité je správně chápat odpověď na položenou otázku: YES znamená „na základě mých informací je to pravda“ YES znamená „na základě mých informací je to pravda“ ?-likes(tom, jane). yes NO má ale hned několik významů NO má ale hned několik významů - není to pravda (skutečně NE) - nepodařilo se ověřit „na základě mých informací“ = nevím ?-animal(dog).no - Váš program nefunguje („nepodařilo se dojít k cíli“)

20 20 Kladení obecnějších otázek Je možné využít proměnných Je možné využít proměnných Who likes Mary? přepíšeme v PROLOGu jako ?-likes(Who, mary). Jméno proměnné začíná velkým písmenem: Jméno proměnné začíná velkým písmenem: Who, Mary, Someone_who_likes_someone_else Proměnná může být specifikovaná (nabývá konkrétní hodnotu) nebo nespecifikovaná (hodnota proměnné není dosud známa) Proměnná může být specifikovaná (nabývá konkrétní hodnotu) nebo nespecifikovaná (hodnota proměnné není dosud známa) Zadáme-li dotaz obsahující proměnnou, PROLOG prohledává databázi s cílem nalézt objekt, který by mohl stanout na místě proměnné Zadáme-li dotaz obsahující proměnnou, PROLOG prohledává databázi s cílem nalézt objekt, který by mohl stanout na místě proměnné

21 21 Otázka obsahující proměnnou Předpokládejme, že máme zadanou následující databázi: Předpokládejme, že máme zadanou následující databázi: likes(tom, mary). likes(tom, jane). likes(mary, money). likes(tom, food). Předpokládejme dotaz „Co či koho má Tom rád?“ Předpokládejme dotaz „Co či koho má Tom rád?“ ?-likes(tom, X). X = mary; X = jane; X = food; no

22 22 Kladení ještě obecnějších otázek Často chceme položit dotaz, který vyžaduje ověření více podmínek Často chceme položit dotaz, který vyžaduje ověření více podmínek Konjunkce cílů – pomocí symbolu čárka Konjunkce cílů – pomocí symbolu čárka Má Tom rád Mary a má Mary ráda Toma? přepíšeme v PROLOGu jako ?-likes(tom, mary), likes(mary, tom). Disjunkce cílů – pomocí symbolu středník Disjunkce cílů – pomocí symbolu středník ?-likes(X, mary); likes(X, lisa). lze interpretovat jako „má někdo rád Mary nebo Lisu?“

23 23 Splňování cílů v konjunkci Každý cíl v konjunkci má vlastní značku (marker) Každý cíl v konjunkci má vlastní značku (marker) Cíle se splňují zleva doprava Cíle se splňují zleva doprava Pokud se některý cíl nepodaří splnit jinak, PROLOG se vrací k cíli předchozímu, příslušnou proměnnou udělá nespecifikovanou a pokračuje od příslušné značky v dalším prohledávání databáze Pokud se některý cíl nepodaří splnit jinak, PROLOG se vrací k cíli předchozímu, příslušnou proměnnou udělá nespecifikovanou a pokračuje od příslušné značky v dalším prohledávání databáze tzv. BACKTRACKING

24 24 Příklad Předpokládejme, že máme zadanou následující databázi: Předpokládejme, že máme zadanou následující databázi: likes(jane, food). likes(jane, wine). likes(tom, jane). likes(tom, wine). Předpokládejme následující dotazy Předpokládejme následující dotazy ?-likes(tom, jane), likes(jane, tom). no ?-likes(jane, X), likes(tom, X). X = wine; no

25 25 Pravidla Pravidla popisují skutečnosti, které závisí na jiných skutečnostech Pravidla popisují skutečnosti, které závisí na jiných skutečnostech likes(tom, X) :- girl(X). Pravidlo se skládá z hlavy, definičního symbolu „:-“ a těla Pravidlo se skládá z hlavy, definičního symbolu „:-“ a těla Hlava pravidla popisuje to, co chceme definovat Hlava pravidla popisuje to, co chceme definovat Tělo určuje cíle, které musí být splněny, aby byla splněna hlava pravidla Tělo určuje cíle, které musí být splněny, aby byla splněna hlava pravidla Platnost proměnné je omezena pouze na příslušné pravidlo. Platnost proměnné je omezena pouze na příslušné pravidlo. likes(jane, M) :- male(M), likes(M, wine), play(M, tennis). likes(jane, M) :- animal(M), friendly(M).


Stáhnout ppt "Logické programování Úvodní přednáška. 2 Průběh výuky Přednášky/cvičení - 2/2 Přednášky prof. RNDr. Josef Hynek, MBA, Ph.D. Cvičení Doc. RNDr. Kamila."

Podobné prezentace


Reklamy Google