280 likes | 449 Views
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)
E N D
UMELÁ INTELIGENCIA prednáška č. 10 Programovacie jazyky pre umelú inteligenciu Marian.Mach@tuke.sk http:// neuron.tuke.sk/~machm Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Osnova prednášky • Úvod • Ukážkový problém • FOR 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
Jazyky pre UI • 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 Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Požiadavky na demo problém • 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ý čo tak si zaspievať ? Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Demo problém • Jednoduchý problém (implementovaný v niekoľkých stovkách jazykov) 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. 1 bottle of beer on the wall. Take one down, and pass it around. 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
Common Lisp (1) • 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 void tlac(int x) { if( x <= 0 ) return; printf(“ * ”); tlac(--x); } int tlac(int x) { if( x > 0 ) printf(“ * ”,tlac(--x)); } Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Common Lisp (2) • 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 Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Common Lisp (3) • 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))) Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Symbol value : fvalue : ... : Common Lisp (4) • 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 Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Common Lisp (5) • 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 Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
C int a, b; b = 8; a = b; => a obsahuje 8 Lisp (setq b 8) (setq a b) => a obsahuje 8 (setq a ‘b) => a obsahuje B (set a ‘c) => b obsahuje C => a obsahuje B Common Lisp (6) Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Common Lisp (7) Demo príklady Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Prolog (1) • 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 Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Prolog (2) • 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]) Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
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). pocasie([vietor, hmla]). teplota(Chladno). prsi. Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Prolog (4) • 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 pocasie(zle) :- dazd(husty); teplota(chladno). meno([jano| OSTATNI]) :- meno(OSTATNI). sirota(Kto) :- not(matka(Matka, Kto)), not(otec(_, Kto)). Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Prolog (5) • 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 Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Prolog (6) • 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 Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Prolog (7) o ?- pocasie(zle). yes ?- pocasie(pekne). no ?- pocasie(X). X = zle yes ?- pocasie(X). X = zle ; X = zle ; X = zle ; no pocasie(zle) :- dazd(husty); teplota(chladno). pocasie(pekne) :- slnko(svieti), teplota(teplo). pocasie(zle) :- slnko(nesvieti). pocasie(zle) :- not(pocasie(pekne)). pocasie(zle). slnko(svieti). teplota(chladno). dazd(ziadny). Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Prolog (8) Demo príklady Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Clips (1) • 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í Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Clips (2) • 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) Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Clips (3) • 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č) Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Clips (4) • 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) Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Clips (5) • 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 Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Clips (6) • 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. Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Clips (7) Demo príklady Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Domáca úloha (namiesto záveru) • 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? pocet(0). pocet(X) :- pocet(Y), X is Y + 1. Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach