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