330 likes | 471 Views
U MEL Á I NTELIGENCI A. Programovacie jazyky pre umelú inteligenciu Marian.Mach @ tuke.sk http :// neuron.tuke.sk/~machm November, 2005. Osnova prednášky. Úvod Zopár faktov z histórie ( Lisp, Prolog) KKUI Ukážkový problém FOR jazyk IN (Lisp, Prolog, Clips)
E N D
UMELÁ INTELIGENCIA Programovacie jazyky pre umelú inteligenciu Marian.Mach@tuke.sk http:// neuron.tuke.sk/~machm November, 2005 Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Osnova prednášky • Úvod • Zopár faktov z histórie (Lisp, Prolog) • KKUI • 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
Lisp • 1956 - John McCarthy - prvé myšlienky o jazyku ktorý sa stal Lispom • 1958 - začala implementácia => Lisp 1.0 • Vznikol ‘Lispovský’ model • if-then-else • dátové typy ‘funkcia’ a ‘symbol’ • premenná je pointer, hodnota má typ • rekurzia • garbage collector • program je strom výrazov • stála dostupnosť jazyka (prepojenie read - compile - run) Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Vývoj Lispu • Lisp 1.0, Lisp 1.5 • v pol. 60-tych rokov prenesený na rôzne architektúry: Univac M 460, IBM 7090, PDP-1, PDP-6 • 70-te a 80-te roky: chaos verzií • MacLisp, InterLisp, Standard Lisp, Elisp, Lisp Machine Lisp, ZetaLisp, Franz Lisp, VAX Interlisp, Lisp360, Lisp370, .... • 1975: Scheme (ANSI štandard v 1991) • 1981: Common Lisp - • 1984 - ‘Common Lisp: The Language’ • 1992 - draft štandardu, 1994 - ANSI štandard Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Lispovské stroje • Peter Deutch (1973) - návrh jednoužívateľského mikropočítača špecializovaného pre beh Lispu a lispovského vývojového prostredia • MIT AI LAB - CONS (1975), CADR (1978) - pre komercionalizáciu vznikli firmy: • Lisp Machine Inc. - klony CADR • Symbolics - klony CADR, 3600 (1982), ďalšie rady 36xx • zatvoril ‘maintenance facility’ v 2005 • Xerox PARC - Alto (1973), Dolphin (1979), Dandelion (1981), Dorado (1983) • TI - Explorer (1983), Explorer II (1987) Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Symbolics: Lispovské stroje Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Lisp na KKUI • doc. Ing. Tomáš Sabol, CSc. • KKUI - použitie v medzinárodných projektoch • začiatky: 1986 na SM3 • aktívne obdobie: druhá polovica 90-tych rokov • Výuka: Teoretické základy UI • Projekty: • ENCODE - ENvironment for COnfiguration DEsign (Allegro CL + Windows) 1995-98 • ENRICH - Enriching Representations of Work to Support of Organisational Learning (Allegro CL + Linux) Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Prolog • 1972 - oficiálny dátum vzniku • Robert Kowalski (University of Edinburgh) • teoretický rámec na ktorom je Prolog postavený (procedurálna interpretácia logiky Hornových klauzulí) • Alain Colmerauer (University of Aix-Marseille) • so svojou skupinou vytvorili theorem prover ktorý bol použitý pre implementáciu komunikačného systému v prirodzenom jazyku – tento systém nazvali PROLOG (PROgrammation et LOGique - PROgramming in LOGic). Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Programmation et Logique Every psychiatrist is a person. Every person he analyzes is sick. Jacques is a psychiatrist in Marseille. Is Jacques a person? Where is Jacques? Is Jacques sick? Yes. In Marseille. I don't know. Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Vývoj Prologu • Dva z hlavných dialektov pochádzajú zo zakladateľských univerzít: • Marseille: prvý prologovský interpreter (Roussel) • bežal na počítači IBM 360-67 v Grenobli, Marseille mala teletypové pripojenie na ten počítač • Edinburg: prvý prologovský kompilátor (D. Warren) • mnoho ďalších riešení bolo tiež postavených na WAM • Prolog bol dlho ignorovaný, až kým sa nestal súčasťou japonského ‘Fifth Generation Project’ • ISO Prolog štandardizácia: ISO/IEC 13211-1 bol publikovaný v 1995 Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Prolog na KKUI • doc. Ing. Július Csontó, CSc. • KKUI - jedno z prvých centier Prologu v ČSSR • aktívne obdobie: od 1986 až do pol. 90-tych rokov • Publikácie • 1986 - prvé skriptá v ČSSR (Csontó - Slota) • 1988, 1989 v JZD Agrokombinát Slušovice • Výuka: Aplikácia jazyka Prolog v UI • Výskum: aplikačné použitie Prologu • Projekty: • Prolex - prázdny expertný systém (MVS-CP/M, XT) • Kravex - diagnostikovanie chorôb hov. dobytka (XT) Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Popularita jazykov (November 2005) • The TIOBE Programming Community Index • založený na výbere z Google, MSN a Yahoo! • Sleduje 100 jazykov http://www.tiobe.com/tpci.html 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) /* C */ int sum(int n){ int i, s = 0; for(i=0; i<n; i++) s += i; return(s); } ; Lisp (defun sum (n) (let ((s 0)) (dotimes (i n s) (incf s i)))) Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
Common Lisp (8) 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
pocasie(X) dazd(husty) 1 teplota(chladno) X = zle ; 7 slnko(svieti) teplota(teplo) 2 6 slnko(nesvieti) 3 pocasie(pekne) 4 X = zle ; X = zle ; 5 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
Domáca úloha (namiesto záveru) • Pohľadať na Internete: • dostupné implementácie • komerčné • nekomerčné (FLOSS) • aplikácie postavené na prezentovaných jazykoch Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach