U MEL Á I NTELIGENCI A

33
Katedra kybernetiky a umelej inteligencie FEI, TU v Košicia ch 1 UMELÁ INTELIGENCIA Programovacie jazyky pre umelú inteligenciu [email protected] http:// neuron.tuke.sk/~machm November, 2005

description

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) - PowerPoint PPT Presentation

Transcript of U MEL Á I NTELIGENCI A

Page 1: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 1

UMELÁ INTELIGENCIA

Programovacie jazykypre

umelú inteligenciu

[email protected]:// neuron.tuke.sk/~machm

November, 2005

Page 2: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 2

Osnova prednáškyÚvodZopár faktov z histórie (Lisp, Prolog)

KKUIUkáž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

Page 3: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 3

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

Page 4: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 4

Lisp1956 - 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)

Page 5: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 5

Vývoj LispuLisp 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

Page 6: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 6

Lispovské strojePeter 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)

Page 7: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 7

Symbolics: Lispovské stroje

Page 8: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 8

Lisp na KKUIdoc. 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)

Page 9: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 9

Prolog1972 - 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).

Page 10: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 10

Programmation et Logique

Every psychiatrist is a person.Every psychiatrist is a person.Every person he analyzes is sick.Every person he analyzes is sick.

Jacques is a psychiatrist in Marseille.Jacques is a psychiatrist in Marseille.

Is Jacques a person?Is Jacques a person?

Where is Jacques?Where is Jacques?

Is Jacques sick?Is Jacques sick?

Yes.Yes.

In Marseille.In Marseille.

I don't know.I don't know.

Page 11: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 11

Vývoj ProloguDva 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

Page 12: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 12

Prolog na KKUIdoc. 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)

Page 13: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 13

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.htmlhttp://www.tiobe.com/tpci.html

Page 14: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 14

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ť ?

Page 15: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 15

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)

Page 16: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 16

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));}}

Page 17: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 17

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)

Page 18: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 18

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)

Page 19: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 19

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 ::... ... ::

Page 20: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 20

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)

Page 21: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 21

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

Page 22: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 22

Common Lisp (7)

; Lisp; Lisp(defun sum (n)(defun sum (n) (let ((s 0))(let ((s 0)) (dotimes (i n s)(dotimes (i n s) (incf s i))))(incf s i))))

/* C *//* C */int sum(int n){int sum(int n){ int i, s = 0;int i, s = 0; for(i=0; i<n; i++)for(i=0; i<n; i++) s += i;s += i; return(s);return(s);}}

Page 23: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 23

Common Lisp (8)

Demo príklady

Page 24: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 24

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)

Page 25: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 25

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)

Page 26: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 26

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.

Page 27: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 27

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)).

Page 28: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 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)

Page 29: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 29

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)

Page 30: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 30

pocasiepocasie(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).

Prolog (7) o?- ?- 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

Page 31: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 31

dazd(husty)dazd(husty)

slnko(svieti)slnko(svieti)

teplota(chladno)teplota(chladno)

slnko(nesvieti)slnko(nesvieti)

pocasie(pekne)pocasie(pekne)

teplota(teplo)teplota(teplo)

pocasie(X)pocasie(X)

1

2

3

4

5

7

6

X = zle

X = zle

X = zle

;

;

;

Page 32: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 32

Prolog (8)

Demo príklady

Page 33: U MEL Á I NTELIGENCI A

Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach 33

Pohľadať na Internete: dostupné implementácie

komerčné nekomerčné (FLOSS)

aplikácie postavené na prezentovaných jazykoch

Domáca úloha (namiesto záveru)