ZÁKLADY UI - 7 - Neuron
Download
Report
Transcript ZÁKLADY UI - 7 - Neuron
UMELÁ INTELIGENCIA
prednáška č. 10
Programovacie jazyky
pre
umelú inteligenciu
[email protected]
http:// neuron.tuke.sk/~machm
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
1/ 28
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
2/ 28
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
3/ 28
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
4/ 28
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
5/ 28
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
6/ 28
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
7/ 28
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
8/ 28
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:
Symbol
t (hodnota je true),
nil (hodnota je nil)
Predikát
value :
fvalue :
...
:
funkcia vracajúca t alebo nil
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
9/ 28
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
10/ 28
Common Lisp (6)
C
Lisp
int a, b;
b = 8;
a = b;
(setq b 8)
=> a obsahuje 8
(setq a b)
=> a obsahuje 8
(setq a ‘b)
=> a obsahuje B
(set a ‘c)
=> b obsahuje C
=> a obsahuje B
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
11/ 28
Common Lisp (7)
Demo príklady
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
12/ 28
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
13/ 28
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
14/ 28
Prolog (3)
Databáza obsahuje klauzuly (fakty a pravidlá):
fakty
sú to štruktúry (ľubovoľnej árnosti)
definujú to čo platí
osoba(meno,priezvisko).
pocasie([vietor, hmla]).
teplota(Chladno).
prsi.
Model ‘uzavretého sveta’ - čo nie je v databáze,
alebo sa z nej nedá odvodiť, to neplatí
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
15/ 28
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)
pocasie(zle)
:- dazd(husty); teplota(chladno).
meno([jano| OSTATNI]) :- meno(OSTATNI).
sirota(Kto)
:- not(matka(Matka, Kto)),
not(otec(_, Kto)).
Premenné sú lokálne, ich platnosť je iba v rámci
jednej klauzuly
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
16/ 28
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
17/ 28
Prolog (6)
Dokazovanie (prehľadávanie)
pokus o splnenie cieľa
pokus o opätovné splnenie (hľadanie alternatívy)
DB sa prehľadáva zhora nadol, začína sa od začiatku
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
18/ 28
Prolog (7)
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).
o
?- pocasie(zle).
yes
?- pocasie(pekne).
no
?- pocasie(X).
X = zle
yes
?- pocasie(X).
X = zle ;
X = zle ;
X = zle ;
no
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
19/ 28
Prolog (8)
Demo príklady
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
20/ 28
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
21/ 28
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
22/ 28
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
23/ 28
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
24/ 28
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
25/ 28
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
26/ 28
Clips (7)
Demo príklady
Katedra kybernetiky a umelej inteligencie FEI, TU v Košiciach
27/ 28
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
28/ 28