u mel Á i nteligenci a prednáška č. 10
DESCRIPTION
U MEL Á I NTELIGENCI A prednáška č. 10. Programovacie jazyky pre umelú inteligenciu Marian.Mach @ tuke.sk http :// neuron.tuke.sk/~machm. Osnova prednášky. Úvod Ukážkový problém FOR jazyk IN (Lisp, Prolog, Clips) - PowerPoint PPT PresentationTRANSCRIPT
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 1/ 28
UMELÁ INTELIGENCIA prednáška č. 10
Programovacie jazykypre
umelú inteligenciu
[email protected]:// neuron.tuke.sk/~machm
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 2/ 28
Osnova prednáškyÚvodUkážkový problémFOR jazyk IN (Lisp, Prolog, Clips)
vybrané charakteristiky jazyka (nevyhnutne potrebné pre pochopenie ukážok programov)
demo programy poznámky k programom (diskusia)
Záver
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 3/ 28
UI využíva tri typy programovacích jazykov: štandardné jazyky ‘špeciálne’ jazyky (so všeobecným použitím) špecializované jazyky (clp, reprezentácia znalostí)
Väčší dopyt po širokom spektre jazykov pochádza zo symbolickej vetvy UI
Jazyková ochutnávka: Common Lisp - funkcionálne programovanie Prolog - logické (deklaratívne) programovanie Clips - pravidlové programovanie
Jazyky pre UI
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 4/ 28
Potrebný taký problém, aby: riešenie nebolo dlhé nebol príliš špecializovaný (šitý pre nejaký jazyk) vyžadoval základné programové konštrukcie bol všeobecne pochopiteľný
Požiadavky na demo problém
čo tak si zaspievať ?
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 5/ 28
Jednoduchý problém (implementovaný v niekoľkých stovkách jazykov)
Demo problém
99 bottles of beer on the wall. Take one down, and pass it around.99 bottles of beer on the wall. Take one down, and pass it around.......2 bottles of beer on the wall. Take one down, and pass it around.2 bottles of beer on the wall. Take one down, and pass it around.1 bottle of beer on the wall. Take one down, and pass it around.1 bottle of beer on the wall. Take one down, and pass it around.Now, they are all gone.Now, they are all gone.
cyklus, iterácia (99,...,2,1) vetvenie (‘bottles’ vers. ‘bottle’) sekvencia (tlač textu po častiach)
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 6/ 28
Jedným z hlavných znakov je (rozsiahle) používanie rekurzie
V C jazyku možné, avšak používané výnimočne Príklad: vytlačiť zopár hviezdičiek za sebou
Common Lisp (1)
void tlacvoid tlac(int x)(int x){{ if( x <= 0 ) return;if( x <= 0 ) return; printf(“ * ”);printf(“ * ”); tlac(--x);tlac(--x);}}
int tlacint tlac(int x)(int x){{ if( x > 0 ) printf(“ * ”,tlac(--x));if( x > 0 ) printf(“ * ”,tlac(--x));}}
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 7/ 28
Funkcionálne programovanie aplikácia funkcie na vstupné dáta produkuje výsledok funkcia vždy vracia výsledok (môže mať aj iný
(vedľajší) efekt, napr. výstup alebo zmenu hodnoty) problém so sekvenciou
Lispovský program pozostáva (najmä) z funkcií návratová hodnota jednej funkcie sa priamo používa
ako vstup inej funkcie
Common Lisp (2)
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 8/ 28
Dátové typy atómy (čísla a symboly) zoznamy reťazce (vektory znakov)
Zoznamy reprezentujú dáta alebo program ! () - prázdny zoznam (pondelok utorok (sobota nedeľa)) (< 3 4 5), (sqrt (+ (* x x) (* y y)))
Common Lisp (3)
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 9/ 28
Vyhodnotenie symbolu vráti hodnotu (value) hodnota môže byť nedefinovaná, alebo to je niečo,
napr. iný symbol
Funkčné vyhodnotenie symbolu vráti fvalue
Špeciálne symboly: t (hodnota je true), nil (hodnota je nil)
Predikát funkcia vracajúca t alebo nil
Common Lisp (4)
SymbolSymbol
value value ::fvalue fvalue ::... ... ::
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 10/ 28
Interaktívny mód: read-eval-print loop
Eval je definovaný: ak výraz je atóm, vráť value ak je zoznam, testuj prvý prvok v zozname
ak špeciálna forma, tak ju a jej argumenty ošetri osobitne ak makro, tak ho expanduj a choď na začiatok ak funkcia, tak:
nájdi fvalue prvého symbolu v zozname vyhodnoť všetky argumenty aplikuj funkciu na argumenty vráť hodnotu
Common Lisp (5)
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 11/ 28
Common Lisp (6)
LispLisp
(setq b 8)(setq b 8)
(setq a b)(setq a b)=> => aa obsahuje 8 obsahuje 8
(setq a ‘b)(setq a ‘b)=> => aa obsahuje B obsahuje B
(set a ‘c)(set a ‘c)=> => bb obsahuje C obsahuje C=> => aa obsahuje B obsahuje B
CC
int a, b;int a, b;b = 8;b = 8;a = b;a = b;
=> => aa obsahuje 8 obsahuje 8
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 13/ 28
Interaktívny režim kladenie otázok, ktoré sa systém snaží zodpovedať na
základe svojej databázy otázka je považovaná za výrok
ktorý sa systém snaží dokázať systém stanoví podmienky za ktorých je výrok platný
systém obsahuje zabudovaný odvodzovací mechanizmus
stačí povedať čo sa má robiť, nie je potrebné definovať ako sa to má urobiť
možno ho využiť vo väčšej alebo menšej miere
Prolog (1)
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 14/ 28
Objekty jazyka (termy): konštanty
čísla atómy (napr. textové konštanty začínajúce malým písmenom)
premenné Januar (veľké písmeno), _ (špeciálna anonymná premenná)
štruktúry funktor a argumenty (árnosť = počet argumentov) ma(jano, rokov(20)) - klasický zápis operátorový zápis (árnosť 1 alebo 2) - jano ma 20 rokov zoznam (špeciálny zápis - [jano, fero, miso])
Prolog (2)
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 15/ 28
Prolog (3)
Databáza obsahuje klauzuly (fakty a pravidlá): fakty
sú to štruktúry (ľubovoľnej árnosti) definujú to čo platí
Model ‘uzavretého sveta’ - čo nie je v databáze, alebo sa z nej nedá odvodiť, to neplatí
osoba(meno,priezvisko).osoba(meno,priezvisko).pocasie([vietor, hmla]).pocasie([vietor, hmla]).teplota(Chladno).teplota(Chladno).prsi.prsi.
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 16/ 28
Databáza obsahuje klauzuly (fakty a pravidlá): pravidlá
binárne štruktúry tvaru: HLAVA :- TELO definujú vzťahy medzi cieľmi (rozklad cieľa na podciele)
Premenné sú lokálne, ich platnosť je iba v rámci jednej klauzuly
Prolog (4)
pocasiepocasie(zle) (zle) :- dazd(husty); teplota(chladno). :- dazd(husty); teplota(chladno).meno([jano| OSTATNI]) :- meno(OSTATNI).meno([jano| OSTATNI]) :- meno(OSTATNI).sirota(Kto)sirota(Kto) :- not(matka(Matka, Kto)), :- not(matka(Matka, Kto)),
not(otec(_, Kto)).not(otec(_, Kto)).
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 17/ 28
Unifikácia (zhodnosť) neviazaná premenná sa môže unifikovať na ľubovoľný
objekt, naviaže sa naň unifikáciou dvoch neviazaných premenných vzniknú
zdieľané premenné ak jedna získa hodnotu, tak ju bude mať aj druhá
štruktúry sú unifikovateľné, ak majú rovnaký funktor a počet argumentov, a jednotlivé argumenty sú unifikovateľné
Viazaná premenná nemôže zmeniť svoju hodnotu
Prolog (5)
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 18/ 28
Dokazovanie (prehľadávanie) pokus o splnenie cieľa
DB sa prehľadáva zhora nadol, začína sa od začiatku
pokus o opätovné splnenie (hľadanie alternatívy) DB sa prehľadáva zhora nadol, začína sa od posledne nájdenej
možnosti
v prípade neúspešného pokusu sa systém vracia k posledne úspešnému splneniu a pokúša sa o novú alternatívu
zrušia sa viazania premenných, ktoré prebehli pri práve rušenej unifikácii
Prolog (6)
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 19/ 28
Prolog (7) opocasiepocasie(zle) :- (zle) :-
dazd(husty); dazd(husty); teplota(chladno).teplota(chladno).
pocasie(pekne) :- pocasie(pekne) :- slnko(svieti), slnko(svieti), teplota(teplo).teplota(teplo).
pocasie(zle) :- pocasie(zle) :- slnko(nesvieti).slnko(nesvieti).
pocasie(zle) :-pocasie(zle) :-not(pocasie(pekne)).not(pocasie(pekne)).
pocasie(zle).pocasie(zle).slnko(svieti).slnko(svieti).teplota(chladno).teplota(chladno).dazd(ziadny).dazd(ziadny).
?- ?- pocasie(zle).pocasie(zle).yesyes
?- ?- pocasie(pekne).pocasie(pekne).nono
?- ?- pocasie(X).pocasie(X).X = zleX = zleyesyes
?- ?- pocasie(X).pocasie(X).X = zle X = zle ;;X = zle X = zle ;;X = zle X = zle ;;nono
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 21/ 28
Poskytuje tri možné prístupy: funkcionálny - štandardné volanie funkcií, vrátane
definovania vlastných objektový - abstrakcia, zapúzdrenie, dedičnosť,
polymorfizmus pravidlový - implementujúci dopredné reťazenie
pravidiel
Tieto prístupy sa dajú používať samostatne alebo vo vzájomnom kombinovaní
Clips (1)
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 22/ 28
Základné elementy (pravidlový prístup): fakty (umiestnené v oddelenej dátovej pamäti - DP) pravidlá (v osobitnej báze pravidiel)
Fakty: fakt obsahuje jeden alebo viacero symbolov pozičné alebo nepozičné
(muzi fero miso) - záleží na poradí symbolov
fakt v DP získava identifikátor, pomocou ktorého je možné s týmto faktom manipulovať (mazať z DP, filtrovať výpis obsahu DP)
Clips (2)
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 23/ 28
Pravidlá: všeobecný tvar je: LHS => RHS LHS obsahuje
vzory, ktoré je možné porovnávať s obsahom DP ďalšie podmienky (and, or, negácia, testy)
RHS obsahuje akcie (príkazy), ktoré sa majú vykonať
manipulácia s obsahom DP iné (napr. tlač)
Clips (3)
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 24/ 28
Premenné: lokálna platnosť iba pre dané pravidlo, v ktorom sa
vyskytujú špeciálna syntax: ?kto (začínajú otáznikom) možné priradiť hodnotu tromi spôsobmi:
zrovnanie s obsahom DP (LHS) priradenie identifikátora faktu (LHS) priradenie hodnoty (RHS)
Clips (4)
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 25/ 28
Pravidlo môže byť aktivované všetky vzory z LHS pravidla je možné úspešne
porovnať s DP (môže dôjsť k priradeniu premenných)
ostatné podmienky v LHS sú splnené
Aktivácie sa ukladajú do agendy
Ak vzory z LHS je možné porovnať viacerými spôsobmi s DP, pre každý z nich sa získa jedna aktivácia
Clips (5)
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 26/ 28
Aktivácia pravidiel a ich uloženie do agendy
Usporiadanie pravidiel v agende podľa priority v rámci rovnakej priority podľa nejakej nastavenej
stratégie (je niekoľko rôznych stratégií)
Prvé pravidlo/ aktivácia sa odpáli (vyberie z agendy a vykoná jeho RHS)
Neplatné aktivácie sú z agendy odstránené, nové aktivácie sú pridané
Ak agenda nie je prázdna, choď na krok 2.
Clips (6)
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 28/ 28
Pohľadať na Internete: odkedy sa prezentované jazyky používajú dostupné implementácie (komerčné a nekomerčné) trochu z histórie vývoja jazykov aplikácie postavené na prezentovaných jazykoch
Čo bude Prolog generovať, ak pre nasledujúci obsah databázy a otázku ?-pocet(Kolko) na ľubovoľnú odpoveď systému budete žiadať ďalšiu alternatívu?
Domáca úloha (namiesto záveru)
pocetpocet(0). (0). pocet(X) :- pocet(Y), X is Y + 1.pocet(X) :- pocet(Y), X is Y + 1.