Documente Academic
Documente Profesional
Documente Cultură
2008-2009
Universitatea Transilvania din Braşov
Facultatea de Matematică şi Informatică
2
Cuprins
3 Căutare informată 31
3.1 Strategii de căutare informată . . . . . . . . . . . . . . . . . . . . . . . . . 31
3.2 Căutarea euristică lacomă . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
3.3 Algoritmul A* . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
3
4 CUPRINS
5 Agenţi logici 67
5.1 Motivaţie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
5.2 Agenţi bazaţi pe cunoaştere . . . . . . . . . . . . . . . . . . . . . . . . . . 68
5.3 Jocul "lumea monstrului . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
5.4 Logica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70
5.5 Logica propoziţională . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.5.1 Sintaxa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
5.5.2 Semantica . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
5.5.3 Exemplu: lumea monstrului ı̂n logica propoziţională . . . . . . . . . 73
5.5.4 Inferenţa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
5.5.5 Echivalenţă, validitate şi satisfiabilitate . . . . . . . . . . . . . . . . 74
5.6 Tipare de raţionament ı̂n logica propoziţională . . . . . . . . . . . . . . . . 75
5.6.1 Rezoluţia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.7 Forma normală conjunctivă . . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.8 Algoritmul de rezoluţie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
5.9 Înlănţuirea ı̂nainte şi ı̂napoi . . . . . . . . . . . . . . . . . . . . . . . . . . 80
5.10 Inferenţă propoziţională efectivă . . . . . . . . . . . . . . . . . . . . . . . . 82
5.10.1 Algoritm bazat pe backtracking . . . . . . . . . . . . . . . . . . . . 82
5.10.2 Algoritm bazat pe căutare locală . . . . . . . . . . . . . . . . . . . 87
1.1 Definiţii
Dăm câteva definiţii care au fost formulate de-a lungul timpului ı̂n diverse lucrări,
precum şi comentarii asupra lor. Există patru tipuri de abordări pentru sistemele cu
inteligenţă artificială: sisteme care gândesc precum oamenii, sisteme care gândesc raţional,
sisteme care acţionează precum oamenii, sisteme care acţionează raţional. Remarcăm că
există o diferenţă ı̂ntre a acţiona ca un om şi a acţiona raţional; deşi inteligenţa umană
şi raţionalitatea nu sunt disjuncte, acţiunile oamenilor nu sunt ı̂ntotdeauna ı̂nscrise ı̂n
totalitate ı̂n legile raţiunii.
Definiţia 2 Studiul asupra cum se poate ca un calculator să facă lucruri la care, pentru
moment, oamenii sunt mai buni.
Testul Turing, propus de către Alan Turing ı̂n 1950 a fost conceput pentru a da o
definiţie operaţională a inteligenţei. Testul care trebuie trecut de către un sistem inteligent
constă ı̂n a pune un om ı̂n imposibilitate de a decide dacă interlocutorul (sistemul artificial)
este om sau nu.
Deducem că un asemenea sistem ar trebui să posede următoarele abilităţi:
7
8 CAPITOLUL 1. DEFINIŢII. REZOLVAREA PROBLEMELOR PRIN CĂUTARE
Testul de mai sus nu presupune un contact direct ı̂ntre om şi sistemul artificial. Dacă
acest lucru este dorit, atunci mai e nevoie de:
Cu toate că testul Turing nu a fost ı̂ncă trecut, există interes destul de scăzut din
partea cercetătorilor ı̂n această direcţie; există opinia că e mai important a se studia
principiile care stau la baza inteligenţei decât să se duplice un exemplar.
Pentru a putea spune că un program gândeşte precum un om, ar trebui să ştim cum
anume gândesc oamenii - problemă deloc simplă. Sunt două moduri: prin introspecţie şi
prin experimente psihologice.
• jocuri - supercalculatorul Deep Blue de la IBM a fost folosit pentru rularea unui
program specializat ı̂n jocul de şah, ı̂nvingându-l pe camionul mondial, Garry Kas-
parov
• control autonom - folosit pentru a conduce o maşină de-a lungul SUA, realizând o
conducere autonomă pentru 98% din perioada totală.
1. formularea problemei - ı̂n secţiunea 1.5 se arată modul ı̂n care poate fi exprimată o
problemă de căutare;
1. Starea iniţială - starea din care se porneşte căutarea; de exemplu, pentru problema
drumului de la Arad la Bucureşti starea iniţială este In(Arad).
unde actiunei este o acţiune ce se poate aplica ı̂n starea x, iar starei este starea ı̂n
care se ajunge din x aplicând actiunei .
Starea iniţială şi funcţia succesor determină spaţiul stărilor problemei - al acelor stări
care sunt accesibile din starea iniţială. O cale ı̂n spaţiul stărilor este o secvenţă de
stări conectate printr-o secvenţă de acţiuni.
12 CAPITOLUL 1. DEFINIŢII. REZOLVAREA PROBLEMELOR PRIN CĂUTARE
3. Testul de scop - determină dacă o stare este stare scop, adică o stare ı̂n care problema
se consideră a fi rezolvată. Verificarea atingerii scopului se poate face ı̂n două
moduri:
(a) prin compararea stării curente cu mulţimea stărilor scop, enunţată explicit; de
exemplu, pentru problema de mai sus mulţimea stărilor scop este In{Bucuresti}.
(b) prin verificarea unor proprietăţi pe care trebuie să le ı̂ndeplinească starea pen-
tru a fi considerată stare scop; de exemplu, pentru jocul de şah stare scop este
aceea ı̂n care regele este atacat şi nu se mai poate misca fără a fi atacat.
4. O funcţie de cost a căii care asignează o valoare numerică fiecărei căi. Funcţia
serveşte ca măsură a performanţei succesiunii de acţiuni (a soluţiei); vom presupune
că costul unei căi este dat de suma costurilor acţiunilor conţinute, iar costul unei
acţiuni este o cantitate nenegativă.
O soluţie este o succesiune de acţiuni care permite agentului rezolvarea problemei, iar
o soluţie optimă este una ı̂n care costul soluţiei este minim posibil.
1. Problema puzzle-ului: se dă o matrice de n linii şi tot atâtea coloane; ı̂n fiecare
celulă se află un singur număr de la 1 la n2 − 1, nu există două celule care să conţină
acelaşi număr, iar una din celule este goală. Pentru cazul n = 3 avem exemplificare
ı̂n figura 1.2(a). Se cere ca prin mutări succesive pe orizontală şi pe verticală ale
numerelor ı̂n locul spaţiului gol să se ajungă la o configuraţie finală, de exemplu ı̂n
care numerele sunt ordonate (citirea se face linie cu linie), iar spaţiul este pe ultima
poziţie.
Starea iniţială este dispunerea dată; funcţia succesor generează toate miscările prin
care spaţiul alb este mutat ı̂n cadrul matricei, pe verticală sau orizontală, cu cate
o sigură poziţie; testul de scop este verificarea faptului că o stare coincide cu cea
aleasă drept finală; costul căii este egal cu numărul de mutări efectuate, deoarece se
poate considera că fiecare mutare are costul egal cu 1.
2. Problema reginelor pe tabla de şah: dându-se o tablă de şah de n linii şi tot atâtea
coloane, să se determine o poziţionare a reginelor astfel ı̂ncât să nu se atace reciproc.
Starea iniţială este cea ı̂n care tabla este goală; funcţia succesor este “adaugă o regină
,
,
,
,
,
ı̂ntr-o celulă goală” (dar se pot găsi şi alte formulări mai inspirate); o stare scop este
aceea ı̂n care reginele nu se atacă reciproc.
• fiecare stare este reprezentată de o locaţie (un aeroport) şi momentul curent;
• starea iniţială: locul şi momentul plecării;
• funcţie succesor: dependentă de lista zborurilor care sunt programate dintr-o
anumită locaţie, la un moment ulterior;
• testul scop: se poate ajunge la destinaţie ı̂ntr-o perioadă de timp specifi-
cată/până la un moment maxim specificat?
• costul căii: depinde de costul biletelor ce trebuie achiziţionate, timpul de
aşteptare, durata totală a călătoriei, calitatea locurilor, tipul serviciului, modul
de rezolvare a ı̂mbarcării şi tranzitului, tipul avionului, etc
14 CAPITOLUL 1. DEFINIŢII. REZOLVAREA PROBLEMELOR PRIN CĂUTARE
4. Roboţi software pentru căutarea pe Internet; pe lângă faptul că trebuie să trateze
operarea ı̂ntr-o imensă bază de date cu grad mic de structurare, trebuie să rezolve
probleme care nu sunt simple nici pentru un om: răspunsuri la ı̂ntrebări, găsirea
preţurilor cele mai convenabile, găsirea informaţiilor ı̂nrudite cu ceva specificat, etc.
Arborele de căutare este format din noduri; un nod constă din următoarele compo-
nente:
• Actiune: acţiunea care a fost aplicată nodului părinte pentru a produce nodul
curent
Nodul iniţial corespunde stării iniţiale, părintele şi acţiunea aferente acestui nod sunt
codificate convenabil (null, valoare neaplicabilă, etc). Componenta Costul-caii poate fi
ı̂n unele cazuri omisă, deoarece nu toate problemele cer determinarea unei soluţii de cost
optim.
Un exemplu al arborelui de căutare generat pentru a căuta drumul de la Arad la
Bucureşti este dat ı̂n figura 1.4. Mai trebuie să menţionăm că nu trebuie făcută confuzie
ı̂ntre noduri şi stări; ı̂n timp ce mulţimea stărilor poate fi finită (de exemplu mulţimea
oraşelor din România), numărul nodurilor poate fi infinit, dacă se permite generarea de
cicluri de forma: Arad – Sibiu – Arad, Arad – Sibiu – Arad – Sibiu – Arad, etc.
Nodurile care au fost obţinute prin expandarea altora, dar nu au fost la rândul lor
expandate (altfel zis: noduri frunză ı̂n arborele de căutare construit până la momentul
curent) sunt menţinute ı̂ntr-o colecţie numită colectieNoduri; natura acestei colecţii şi
politica de acces fac distincţia ı̂ntre o parte din algoritmii de căutare ce vor fi prezentaţi.
Forma generală a algoritmului de căutare este dată ı̂n figura 1.3.
Câteva comentarii relativ la cod:
4. Funcţia Cautare-in-arbore poate returna şi esuare, pentru cazul ı̂n care nu mai
există nici un nod care să fie expandat iar iteraţiile anterioare nu au descoperit
16 CAPITOLUL 1. DEFINIŢII. REZOLVAREA PROBLEMELOR PRIN CĂUTARE
Figura 1.4: Creşterea arborelui de căutare pentru rezolvarea problemei găsirii rutei de
Arad la Bucureşti. Nodurile care au fost expandate sunt colorate gri; cele obţinute ı̂n
urma expandării unui nod părinte sunt cu linie continuă; cele care urmează a fi obţinute
prin expandare, la paşii următori sunt cu marcate cu linie ı̂ntreruptă. Nu se face evitarea
stărilor duplicat.
18 CAPITOLUL 1. DEFINIŢII. REZOLVAREA PROBLEMELOR PRIN CĂUTARE
starea scop printre stările explorate. Trebuie ı̂nsă spus că există situaţii şi strategii
de algoritmi de căutare care pot rula teoretic la infinit, sau din punct de vedere
practic duc la epuizarea memoriei disponibile.
• Optimalitatea – un algoritm este optim dacă soluţia găsită este cu cost al căii optim;
• Complexitatea de memorie
Complexitatea ı̂n timp este măsurată relativ la numărul de noduri generate ı̂n decursul
explorării, iar complexitatea de memorie este numărul maxim de noduri ce trebuie să fie
memorat până la rezolvare.
Cele două complexităţi se cuantifică prin intermediul notaţiei O. Definim notaţia
pentru cazul funcţiilor reale cu un singur argument. Fie o funcţie g : N → R+ ; notăm cu
O(g) mulţimea:
Pentru algoritmii de căutare ce urmează a fi prezentatţi complexitatea este dată ı̂n termeni
de:
• d, adâncimea celui mai puţin adânc nod soluţie (a cărui stare este stare scop)
19
20 CAPITOLUL 2. STRATEGII DE CĂUTARE NEINFORMATĂ
A A
B C B C
D E F G D E F G
A A
B C B C
D E F G D E F G
(c) După expandarea nodului B; acesta (d) După expandarea nodului C; acesta
dispare din coadă, dar se adaugă la dispare din coadă, dar se adaugă la
sfârşitul lui colectieNoduri nodurile sfârşitul lui colectieNoduri nodurile F şi
D şi E. G.
Figura 2.2: Exemplu de funcţie de cost care nu este nedescrescătoare faţă de numărul de
arce. Pe fiecare arc este scris costul său.
2.2. CĂUTAREA DUPĂ COSTUL UNIFORM 21
nu este o alegere bună ı̂n toate cazurile facem analiza complexităţilor. Considerăm un caz
ı̂n care fiecare stare are exact b succesori. Nodul rădăcină generează b noduri copil, fiecare
dintre aceştia are la rândul lui b copii (deci la adâncimea 2 avem b2 noduri), prin inducţie
se poate arăta ca la adâncimea h avem bh noduri. Să presupunem că soluţia se află la
adâncimea d. Cazul cel mai defavorabil este acela ı̂n care acest nod corespunzând soluţiei
este chiar ultimul care se expandează de pe nivelul lui, deci avem: cele bd noduri de pe
nivelul d, fiecare din cele b − 1 noduri de pe nivelul nodului soluţie (noduri expandate
ı̂naintea nodului soluţie) produce copii care se pun ı̂n colecţieNoduri, deci ı̂ncă (bd − 1) · b
noduri de pe nivelul d + 1. În total numărul de noduri generate este:
1 + b + b2 + . . . + bd + (bd+1 − b) = O(bd+1 ).
Fiecare nod generat trebuie de asemenea să fie păstrat ı̂n memorie, pentru a putea fi
folosit la reconstituirea drumului - nu avem de unde să ştim care din aceştia sunt efectiv
folosiţi ı̂n refacerea drumului, deci nu ne permitem să ştergem din memorie până când se
reface drumul de la starea iniţială la cea finală; alfel zis, complexitatea ı̂n spaţiu este tot
O(bd+1 ).
Complexităţile nu sunt ı̂ncurajatoare, deoarece pentru un factor de ramificare b = 10
şi adâncime a nodului soluţie d = 8 este nevoie de 31 de ore de rulare şi 1 teraoctet de
memorie RAM (la o rată de producere a nodurilor de 10000 noduri/secundă şi 1000 octeţi
pentru fiecare nod). Ca atare, acest tip de explorare nu se foloseşte ı̂n practică decât
pentru probleme de dimensiuni mici.
A A
B C B C
D E F G D E F G
H I J K L M N O H I J K L M N O
A A
B C B C
D E F G D E F G
H I J K L M N O H I J K L M N O
(c) După expandarea nodului B, pre- (d) După expandarea nodului D; acesta
luat din vârful stivei; acesta dispare din dispare din stivă, dar se adaugă la vârful
stivă, dar se adaugă la vârful ei nodu- ei nodurile I şi apoi H. Următoarea
rile E şi apoi D (a se vedea remarca des- operaţie este expandarea (şi deci elimi-
pre altă ordine de adăugare la stivă din nare din stivă) a nodului H, ceea ce
subfigura anterioară). nu duce la adăugarea de alte noduri ı̂n
colectieNoduri.
A A
B C B C
D E F G D E F G
H I J K L M N O H I J K L M N O
(e) Se extrage vârful stivei, adică no- (f) După expandarea nodului I; acesta
dul H şi se ı̂ncearcă expandarea lui; dispare din stivă şi nu se adaugă nici
deaorece el nu are descendenţi, stiva un alt nod la stivă.
colectieNoduri rămâne nemodificată
A A
B C B C
D E F G D E F G
H I J K L M N O H I J K L M N O
(a) După expandarea nodului E; acesta (b) După expandarea nodului J; acesta
dispare din stiva colectieNoduri, ı̂n dispare din stiva colectieNoduri şi
schimb sunt adăugate nodurile K şi apoi deoarece nu are descendenţi nu produce
J. noi elemente ı̂n stivă.
A A
B C B C
D E F G D E F G
H I J K L M N O H I J K L M N O
(c) După expandarea nodului K; acesta (d) După expandarea nodului C; acesta
dispare din stiva colectieNoduri şi dispare din stivă, dar se adaugă la
deoarece nu are descendenţi nu pro- vârful ei nodurile G şi apoi F.
duce noi elemente ı̂n stivă.
A A
B C B C
D E F G D E F G
H I J K L M N O H I J K L M N O
(e) Se extrage vârful stivei, adică no- (f) Expandările frunzelor M şi L re-
dul F şi se expandează, adăugând-se la duc numărul de elemente din stivă
stivă nodurile M şi apoi L. cu cate o unitate, urmează expanda-
rea nodului G (deci scoaterea lui din
stiva colectieNoduri) şi introduce-
rea frunzelor O şi N. După expandarea
acestor frunze (deci eliminarea lor din
stivă) colectieNoduri devine vidă şi
căutarea se opreşte.
şi optimalitate pentru cazul ı̂n care functia de cost a căii este nedescrescătoare faţă de
numărul de arce pentru cale.
2.5. CĂUTAREA “MAI ÎNTÂI ÎN ADÂNCIME” CU ADÂNCIRE ITERATIVĂ
(a) Evoluţia arborelui de căutare pentru l = 0
(b) Evoluţia arborelui de căutare pentru l = 1; se reconstruieşte rădăcina şi apoi se obţin cele două
noduri copil B şi C.
(c) Evoluţia arborelui de căutare pentru l = 2; se reconstruiesc rădăcina, cei doi copii ai ei B şi C şi
apoi se obţin cele patru noduri nepot D, E, F şi G.
Figura 2.6: Evoluţia arborelui de căutare pentru diferite valori ale lui l.
27
28 CAPITOLUL 2. STRATEGII DE CĂUTARE NEINFORMATĂ
Strategia algoritmului căutarea “mai ı̂ntâi ı̂n adâncime” cu adâncire iterativă6 ar putea
părea neeficientă, deoarece se creează toate nodurile de la adâncimea i − 1 atunci când se
caută la adâncimea i. Putem observa ı̂nsă că cu cât un nivel de noduri se recreează mai
des, cu atât este de fapt adâncimea lui mai mică (deci numărul de noduri corespunzător
este mai redus). Putem calcula numărul de noduri care sunt expandate astfel: nodurile
de la adâncimea d sunt generate o singură dată (de fapt, la ultima iteraţie s-ar putea să
nu fie chiar toate generate), cele de la nivelul d − 1 sunt generate de două ori, etc, cele de
la nivelul 0 (adică rădăcina) de d ori; numărul de noduri este dat ca:
pe când la căutarea “mai ı̂ntâi ı̂n lăţime” numărul de noduri generate este O(bd+1 ).
Am obţinut deci un algoritm de căutare care este complet, este optim dacă funcţia de
cost este nedescrescătoare faţă de numărul de arce ale drumului, are cerinţe de memorie
modeste şi complexitate ı̂n timp mai mică decât cea a algoritmilor anterior prezentaţi. În
practică se consideră că algoritmul de căutare mai ı̂ntâi ı̂n adâncime cu adâncire iterativă
este algoritmul preferat de căutare atunci când spaţiul de căutare este mare iar adâncimea
nodului soluţie este necunoscută.
Figura 2.7: Căutare bidirecţională. Aria ı̂nsumată a celor două cercuri este mai mică
decât aria unui cerc mare care pleacă din nodul de start şi ajunge ı̂n nodul de scop.
Start Goal
La fiecare expandare de nod se verifică dacă acesta nu a fost cumva atins de căutarea
din sens contrar. Dacă da, atunci soluţia (secvenţa de acţiuni care duce dinspre nodul
6
În limba engleză, ı̂n original: iterative deepening depth-first search.
2.7. PROBLEMA STĂRILOR DUPLICAT 29
de start spre cel de scop) se reface pe baza drumurilor construite spre nodul comun.
Determinarea faptului că un nod se găseşte ı̂ntr-o lista de noduri se face ı̂n timp constant,
dacă se foloseşte o tabelă de dispersie. Dar tocmai faptul că necesarul de memorie este
O(bd/2 ) face acest algoritm să nu poată fi aplicat ı̂n practică. În rest ı̂nsă, algoritmul este
complet şi optimal dacă fiecare din cele două căutări este efectuată prin parcurgere “mai
ı̂ntâi ı̂n lăţime” (şi desigur, cu ipoteza suplimentară cerută de algoritmul menţionat). Alte
variante de combinare pot face algoritmul neoptim sau incomplet.
Mai trebuie zis aici că algoritmul poate fi folosit doar ı̂n cazul ı̂n care se poate calcula
uşor funcţia de predecesor, opusul funcţiei succesor care face parte din definiţia problemei
- lucru care nu se ı̂ntâmplă la toate problemele. Încă un aspect merită menţionat - dacă
există mai multe noduri scop care pot fi enumerate (nu doar teoretic, ci şi practic) atunci
se poate crea o stare scop nouă, unică, al cărui pas de predecesor să ducă ı̂n stările scop
originale. Dacă mulţimea stărilor scop este foarte largă sau validarea nodurilor scop se
face faţă de un predicat, atunci căutarea bidirecţională este greu sau imposibil de aplicat,
ı̂n lipsa unei descrieri compacte a proprietăţii de a fi stare scop.
Figura 2.8: Reţea pentru care neevitarea stărilor duplicat duce la o explozie exponenţială
a numărului de noduri cu stări repetate.
Detectarea se face prin căutarea stării nodului ce urmează a fi expandat ı̂n lista stărilor
care au fost deja expandate. Dacă un algoritm evită stările duplicat, atunci poate fi văzut
30 CAPITOLUL 2. STRATEGII DE CĂUTARE NEINFORMATĂ
ca o căutare ı̂n graf. Algoritmul este dat ı̂n figura 2.9 şi foloseşte o mulţime a stărilor deja
expandate numită stariVechi. Algoritmul nou obţinut se numeşte Cautare-in-graf.
Căutare informată
Strategiile euristice prezentate ı̂n acest capitol pornesc de la o idee simplă: ce s-ar
ı̂ntâmpla dacă s-ar explora ı̂ntr-o direcţie care pare mai promiţătoare pentru rezolvarea
problemei? am putea astfel să evităm explorarea unor noduri care au o şansă mică de
ajungere ı̂n nodul scop, cu efect benefic asupra complexităţii ı̂n timp şi spaţiu. Este o
strategie des folosită de experţii umani, care pe baza experienţei şi intuiţiei evită explo-
rarea tuturor posibilităţilor şi decid o căutare ı̂n anumite direcţii, cele estimate a fi mai
promiţătoare.
În cazul problemelor de căutare formalizate ı̂n capitolul 1, vom considera pentru fiecare
nod n capacitatea estimată a lui de a duce spre un nod scop. Concret, pentru fiecare nod
n se calculează o funcţie de evaluare f (n). Nodul cu cea mai mică valoare a acestei funcţii
este ales pentru expandare. Ca atare, algoritmul de căutare pe arbore poate fi folosit cu
o modificare minoră: lista de noduri colectieNoduri trebuie să fie organizată ca o coadă
de priorităţi.
Există o clasă ı̂ntreagă de algoritmi bazaţi pe această idee. O componentă comună a
acestora este o funcţie euristică notată tradiţional cu h(n). h(n) reprezintă costul estimat
al celei mai “ieftine” căi care duce de la nodul curent la un nod scop1 . În mod firesc, vom
impune ca h(n) = 0 dacă n este nod scop.
De exemplu, pentru problema drumului din Arad ı̂n Bucureşti putem să vedem această
funcţie ca fiind distanţa pe drum drept de la oricare oraş către Bucureşti. Figura 3.1
conţine atât harta schematizată a României, cât şi un tabel cu distanţele pe drum drept
dintre oraşe şi Bucureşti.
1
Dacă problema este de minimizare, atunci h(n) este costul estimat al celei mai scurte căi; dacă este
problemă de maxim, atunci este costul estimat al celei mai “scumpe” căi
31
32 CAPITOLUL 3. CĂUTARE INFORMATĂ
2
În limba engleză, ı̂n original: greedy best-first search.
3.2. CĂUTAREA EURISTICĂ LACOMĂ
Straight−line distance
Oradea to Bucharest
71
Neamt Arad 366
87 Bucharest 0
Zerind 151 Craiova
75 160
Iasi Dobreta 242
Arad 140 Eforie 161
92 Fagaras 178
Sibiu 99 Fagaras Giurgiu 77
118 Hirsova
Vaslui 151
80
Iasi 226
Rimnicu Vilcea Lugoj
Timisoara 244
142 Mehadia 241
111 211 Neamt 234
Lugoj 97 Pitesti
Oradea 380
70 98 Pitesti 98
146 85 Hirsova
Mehadia 101 Urziceni Rimnicu Vilcea 193
75 138 86 Sibiu 253
Bucharest Timisoara 329
120
Dobreta
90 Urziceni 80
Craiova Eforie Vaslui 199
Giurgiu Zerind 374
Figura 3.1: Harta României şi distanţele pe drum drept dintre oraşe şi Bucureşti.
33
34
(a) Nodul eles pentru expandare este unic, (b) După expandarea nodului rădăcină; nodul ce urmează a fi
rădăcina expandat este Sibiu, având costul f (= h) cel mai mic.
(d) După expandarea nodului Făgăraş; se ajunge ı̂n oraşul Bucureşti, care
va fi ales la următoarea iteraţie din algoritmul Cautare-in-arbore.
Figura 3.2: Paşi ı̂n executarea algoritmului de căutare euristică lacomă. Valorile scrise sub noduri provin din figura 3.1
3.3. ALGORITMUL A* 35
3.3 Algoritmul A*
Cea mai cunoscută formă a acestor algoritmi de căutare informată este algoritmul A*,
pentru care funcţia f (n) este dată ca:
unde g(n) este costul real al drumului de la nodul de start la nodul n – un nod din
arborele de căutare conţine deja această valoare – iar h(n) este, precum anterior, costul
estimat al celei mai bune căi de la nodul n la un nod scop. Avem deci că f (n) este costul
estimat al celui mai bun drum de la nodul de start la un nod scop, drum ce trece prin n.
Pentru câteva condiţii impuse lui h se obţine că algoritmul A* este optim şi complet; ı̂n
practică, rezultatele obţinute sunt foarte bune, prin comparaţie cu strategiile de căutare
oarbă studiate anterior.
Vom considera funcţii h care sunt euristici admisibile, adică h(n) niciodată nu supra-
estimează (depăşeşte) costul unei soluţii de la nodul n la nod scop3 . Prin natura lor, acest
tip de funcţii sunt optimiste – ele permanent subestimează costul real al drumului. Deoa-
rece funcţia g cuantifică efortul exact de a ajunge din nodul iniţial ı̂n nod scop, deducem
că valoarea f (n) nu supraestimează efortul de a ajunge din nodul iniţial ı̂n nod scop via
nodul intermediar n.
Un exemplu de funcţie euristică admisibilă este cea care estimează efortul de ajungere
din nodul n ı̂n Bucureşti ca fiind distanţa pe drum drept de la n la Bucureşti. Este evident
că orice rută s-ar alege, ea nu poate avea cost mai mic decât costul drumului drept.
Evoluţia algoritmului A* pentru problema ajungerii de la Arad la Bucureşti este re-
prezentată ı̂n figurile 3.3 şi 3.4.
3
Aceasta este definiţia pentru problemă ı̂n care se cere minimizarea căii; pentru probleme de maximi-
zare, o euristică admisibilă nu subestimează efortul real de ajungere la nod scop.
36
(a) Nodul eles pentru expandare este unic, (b) După expandarea nodului rădăcină; nodul ce urmează a fi expan-
rădăcina dat este Sibiu, având costul f cel mai mic.
(d) După expandarea nodului Râmnicu Vâlcea; nodul ce urmează a fi expandat este
Făgăraş.
Figura 3.3: Paşi ı̂n executarea algoritmului A*. Valorile scrise sub noduri reprezintă valorile funcţiei f = g + h.
3.3. ALGORITMUL A*
(a) După expandarea nodului Făgăraş.
(b) După expandarea nodului Piteşti. Bucureşti este următorul nod expandat, dar şi nod scop,
deci căutarea se opreşte
37
38 CAPITOLUL 3. CĂUTARE INFORMATĂ
Teorema 1 Dacă algoritmul A* se termină, atunci nodul scop la care s-a ajuns are cost
optim.
Demonstraţie Fie G şi G2 noduri scop aflate ı̂n colectieNoduri, G2 suboptimal (adică
cu valoarea drumului până la el mai mare decât este necesar) şi G optimal. Avem
următoarele:
f (G2 ) = g(G2 ) + h(G2 ) = g(G2 )
f (G) = g(G)
Apoi:
g(G2 ) > g(G)
Condiţia din teorema anterioară este satisfăcută dacă există un număr finit de noduri
pentru care f (·) ≤ f (G).
Dacă se foloseşte algoritmul Cautare-in-Graf ı̂n locul algoritmului Cautare-in-Arbore,
optimalitatea nu mai este neapărat valabilă. Reamintim că algoritmul parcurgerii pe graf
evită stările repetate astfel: un nod din coleţia de noduri se expanda doar dacă starea
sa nu se regăse ı̂ntr-o listă de stări deja parcurse. Problema cu această abordare este că
se poate astfel că prima ajungere ı̂ntr-o anumită stare să se facă cu un cost suboptimal,
iar următoarele drumuri care conduc la aceeaşi stare sunt neglijate, chiar dacă ar duce la
ı̂mbunătăţirea costului pentru acea stare.
Există două soluţii care se pot aplica. Prima constă ı̂n menţinerea căii care are costul
cel mai bun. Se poate scrie asemenea algoritm, chiar dacă este mai complex (presupune
de exemplu ca să se modifice şi costurile nodurilor care sunt descendenţi ai nodurilor cu
cost ı̂mbunătăţit). A doua soluţie cere ca să ne asigurăm că prima cale care duce la o
anumită stare este ı̂ntotdeauna cu cost optim, ca atare putem neglija drumurile ulterioare
care redescoperă starea. Vom detalia ı̂n cele ce urmează care sunt condiţiile care trebuie
să fie ı̂ndeplinite de către funcţia h pentru a aplica această variantă.
Definiţia 9 O funcţie h se numeşte consistentă dacă pentru orice nod n şi orice succesor
n′ generat de o acţiune a avem că:
unde c(n, a, n′ ) este costul acţiunii a care permite mutarea din starea n ı̂n starea n′ – a
se vedea figura 3.5.
n
c(n,a,n’)
h(n)
n’
h(n’)
G
O funcţie consistentă se mai numeşte şi monotonă. Este o formă a inegalităţii triun-
ghiului, triunghi format de vârfurile n, n′ şi nodul scop cel mai apropiat de n. Se poate
arăta că orice funcţie consistentă este şi admisibilă. Reciproca nu este adevărată, dar
trebuie destul de multă ingeniozitate pentru a crea o funcţie care este admisibilă şi nu
este şi monotonă.
Pentru problema drumului Arad–Bucureşti, funcţia euristică dată de distanţa pe drum
drept de la oraşul curent la Bucureşti este de asemenea şi consistentă, deoarece satisface
inegalitatea triunghiului din geometria plană.
Arătăm că dacă h este monotonă, atunci valorile lui f de-a lungul unui drum sunt
nedescrescătoare. Fie n′ un succesor al lui n; atunci:
(conform definiţiei lui g, unde a este acţiunea care permite schimbarea stării curente din
n ı̂n n′ ) şi
• se poate ca A* să expandeze câteva noduri care au f (n) = C ∗ ı̂nainte ca să expandeze
nod scop (şi deci să se termine algoritmul);
40 CAPITOLUL 3. CĂUTARE INFORMATĂ
Ultima observaţie este deosebit de importantă, deoarece arată că se evită expandarea
unui nod care are costul mai mare decât costul optim, chiar dacă acest cost optim nu este
cunoscut decât la terminarea algoritmului! De exemplu, nodul aferent oraşului Timişoara
nu este niciodată expandat, având cost prea mare. Datorită monotoniei funcţiei f avem că
nici oraşele care descind direct din Timişoara nu vor fi expandate, de fapt nici un nod de
pe vreo rută care include Timişoara ca nod intermediar nu va fi expandat; se face astfel o
“retezare” a arborelui de căutare, prin eliminarea unor variante care nu ar fi dus oricum la
un rezultat optim. Geografic, realizăm că toată partea Banatului este exclusă din arborele
de căutare, deoarece costurile nodurilor din această regiune sunt oricum prea mari faţă
de costul optim (momentan necunoscut, determinat doar la sfârşitul algoritmului) C ∗ .
Algoritmul este complet, dacă nu cumva sunt infinit de multe noduri n care au f (n) ≤
C ∗ . Este şi optimal; mai mult decât atât, este optimal eficient pentru orice funcţie
euristică dată – adică nici un alt algoritm optimal nu garantează expandarea unui număr
mai mic de noduri decât A*, abstracţie făcând de numărul de noduri n pentru care
f (n) = C ∗ . Dacă am avea un un algoritm care nu expandează toate nodurile n cu
f (n) < C ∗ , atunci ar exista riscul ca să se rateze o cale optimă.
Există totuşi o problemă: numărul de noduri care au f (·) < C ∗ creşte exponenţial cu
lungimea soluţiei. Un caz ı̂n care nu se ı̂ntâmplă aşa ceva este când:
unde h∗ (n) este costul real al ajungerii de la nodul n la scop. Din păcate, cele mai multe
euristici folosite ı̂n practică sunt măcar proporţionale cu costul căii, ca atare obţinem
număr de noduri exponenţial – şi toate trebuie ţinute ı̂n memorie, pentru a putea reface
soluţia. De multe ori algoritmul epuizează toată memoria pusă la dispoziţie, ı̂nainte de
ca timpul pus la dispoziţie să se scurgă.
condiţie, iar dacă memoria pusă la dispoziţie este prea puţină, atunci va returna cea mai
bună soluţie (suboptimală) pe care a putut-o descoperi. Pe de altă parte, ı̂nsă, o problemă
poate deveni intratabilă datorită complexităţii de timp crescute.
• h2 — suma distanţelor dintre poziţiile actuale şi cele din starea finală a pieselor.
Deoarece piesele se pot mişca doar pe orizontală şi verticală, nu vom folosi distanţa
euclidiană – precum ı̂n problema drumului de la Arad la Sibiu – ci distanţa L1 (sau
distanţa Manhattan):
Din nou se observă că este o euristică admisibilă, deoarece pentru mutarea unei
piese la poziţia corectă se fac cel puţin mutările pe orizontală şi pe verticală.
N = 1 + b∗ + (b∗ )2 + . . . + (b∗ )d
noduri, algoritmul A*(h1 ) generează 227 noduri, iar A*(h2 ) generează 73 noduri. Pen-
tru adâncime 24, algoritmul de căutare oarbă clachează din lipsă de memorie, A*(h1 )
generează 39135 noduri, iar A*(h2 ) generează 1641 noduri.
Dacă există mai multe euristici ne putem pune problema dacă e vreuna mai bună
decât celelalte. Pentru h1 şi h2 , de pildă, avem că h2 (n) ≥ h1 (n), ∀n. Din cauză că A*
expandează fiecare nod care are f (n) < C ∗ (echivalent: h(n) < C ∗ − g(n)), rezultă că
orice nod expandat pentru funcţia h2 este sigur expandat şi pentru funcţia h1 . Ceea ce
ne ı̂ndeamnă a căuta funcţii euristice care să aibe valori cât mai mari, dar să rămână ı̂ncă
admisibile (sub valoarea reală). Problema cu o asemenea abordare este că funcţia, deşi
devine mai “bună”, poate cere de asemenea resurse computaţionale prea mari. Pentru
cazul ı̂n care ı̂ntre două euristici există relaţia h2 ≥ h1 spunem că h2 domină pe h1 4 .
Se pune ı̂ntrebarea: cum se pot inventa funcţii euristice? Este posibil a se inventa
asemenea funcţii ı̂n mod automat? Modul ı̂n care s–au descoperit este simplu: s–au
relaxat restricţiile problemei. Dacă problema se enunţă sub forma unor condiţii, precum:
“o piesă se mută din locaţia A ı̂n B dacă A este vecin orizontal sau vertical al lui B şi
B este spaţiu liber” atunci putem realiza trei variante relaxate prin eliminarea la o parte
din condiţii:
Prima variantă corespunde euristicii h2 , iar cea de-a treia este pentru euristica h1 .
Folosind această tehnică (şi alte strategii), s–a obţinut un program capabil de a găsi
variante relaxate de probleme, unele conducând la euristici superioare celor cunoscute.
Ce se ı̂ntâmplă când avem mai multe euristici, dar niciuna nu domină pe toate celelelate
(adică: avem h1 , h2 , . . . , hm şi pentru orice i, j, 1 ≤ i, j ≤ m, i 6= j există x, y astfel ı̂ncât
hi (x) ≤ hj (x) dar hi (y) > hj (y))? Putem considera funcţia h definită punctual ca:
care domină pe toate celelalte; mai mult decât atât, se poate arăta că această funcţie este
şi consistentă!
O altă metodă de obţinere a euristicilor este de a pleca de la subprobleme ale problemei
iniţiale. De exemplu, putem să ne concentrăm atenţia doar asupra unora din piesele de pe
puzzle, pe care ı̂ncercăm să le aducem la poziţia corectă, ı̂n timp ce celelate pot ajunge ı̂n
4
Din nou, reamintim că ne-am fixat pe probleme ı̂n care dorim să obţinem soluţie de cost minim.
Pentru probleme de maxim dominarea ı̂nseamnă schimbarea sensului inecuaţiei.
3.6. ALGORITMI DE CĂUTARE LOCALĂ ŞI PROBLEME DE OPTIMIZARE 43
orice poziţie. Pentru multe cazuri, rezultatul este mai bun decât dacă se foloseşte distanţa
Manhattan.
Se poate merge mai departe pe ideea acestor subprobleme: având ı̂n vedere că au
considerabil mai puţine stări decât problema originală, se poate să memorăm ı̂ntr-o bază
de date aceste stări, ı̂mpreună cu costul de ajungere de la ele la starea finală. Construirea
acestei baze5 poate fi laborioasă, dar efortul se amortizează rapid dacă trebuie rezolvate
mai multe probleme.
min(f ) = − max(−f )
şi deci exemplificările se vor face cu optimizări convenabil alese, dată fiind trecerea de la
un tip de optim la altul. Vom considera profilul funcţiei obiectiv (figura 3.6); dorim ca
pentru funcţia reprezentată să determinăm care este maximul.
5
Numită bază de tipare, original: pattern database
44 CAPITOLUL 3. CĂUTARE INFORMATĂ
Figura 3.6: Profilul unei funcţii obiectiv; se doreşte obţinerea unsi stări ı̂n care valoarea
funcţiei obiectiv este maximă. Punctul marcat pe grafic reprezintă valoarea aferentă stării
curente, pentru care o modificare poate să ducă la creşterea sau scăderea valorii funcţiei
obiectiv.
Figura 3.7: Algoritmul de căutare prin ascensiune (urcarea pe panta cea mai abruptă).
Dacă pentru nodul curent există un vecin de valoarea mai bună, atunci el este ı̂nlocuit cu
vecinul.
1. maximele locale: un maxim local este un vârf care este mai ı̂nalt decât punctele
situate ı̂ntr-o vecinătate a lui, dar este mai mic decât maximul global. Algoritmul
se termină atunci când nodul curent nu poate fi ı̂mbunătăţit printr-o mutare ı̂n
apropiere.
2. zonă plată: o zonă plată este o regiune din spaţiul stărilor ı̂n care funcţia de evaluare
este constantă. Poate fi un platou de unde nu există posibilitate de urcare, sau o
coamă de unde se poate obţine un progres. Aşa cum este dat algoritmul din figura
3.7, se produce valoarea constantă din platou.
3. creste7 ; rezultă ı̂n secvenţă de maxime locale pentru care direcţia corectă este dificil
de ales (figura 3.9).
Pentru problema celor opt regine, căutarea prin ascensiune duce la un optim local ı̂n
86% din cazuri; rezolvare cu funcţia de cost nulă se atinge doar ı̂n 14% din cazuri. Trebuie
7
În limba engleză ı̂n original: ridges.
46 CAPITOLUL 3. CĂUTARE INFORMATĂ
(a) O aşezare a opt regine pe tabla de (b) Un minim local pentru problema ce-
şah, cu costul euristic estimat 17. Pen- lor opt regine. Starea prezentată are va-
tru fiecare pătrat se arată valorea acestei loarea 1. Orice mutare din această stare
funcţii dacă s–ar face mutarea reginei de nu micşorează valoarea funcţiei.
pe coloana corespunzătoare ı̂n ea. Cele
mai bune mutări din această poziţie duc
la valoarea 12.
(c) Rezolvarea problemei celor 4 regine. Soluţia obţinută este de cost 0, deci dispunerea este corectă.
Figura 3.8: Rezolvarea problemei reginelor pe tabla de şah prin căutare prin ascensiune.
Se caută un minim al funcţiei care contorizează numărul de atacuri reciproce pe tablă.
3.6. ALGORITMI DE CĂUTARE LOCALĂ ŞI PROBLEME DE OPTIMIZARE 47
Figura 3.9: Creste, una din configuraţiile problematice pentru un algoritm de ascensiune.
să menţionăm totodată că numărul mediu de mutări ı̂n care se ajunge la un minim local
este 3 iar din 4 mutări se ajunge la o rezolvarea a problemei.
Algoritmul, aşa cum a fost enunţat, se opreşte atunci când ajunge ı̂n zonă de platou
sau de coamă. Pentru coamă, ı̂nsă, dacă s-ar permite căutarea pe zona plată, s-ar putea
ajunge din nou la o situaţie de urcuş. O variantă a algoritmului din figura 3.7 este cea
ı̂n care se permit paşi laterali pe zonă plată. Pentru a preveni plimbarea la infinit pe un
platou, se poate impune o limită a numărului de paşi succesivi care păstrează valoarea
funcţiei obiectiv. De exemplu, dacă se stabileşte această limită la 100, pentru problema
damelor se găseşte rezolvare corectă ı̂n 94% din cazuri. Numărul mediu de paşi creşte,
ı̂nsă: 21 de paşi pentru o rezolvare şi 64 pentru eşuare ı̂n minim local.
De asemenea mai există varianta ascensiunii stochastice: dintr-un punct se alege pro-
babilist panta pe care se face urcarea; cu cât panta este mai abruptă, cu atât este mai
mare şansa de alegere a ei ca direcţie următoare (dar nu e imposibil să se aleagă pante
de ı̂nclinaţie mai mică, adică să se ajungă ı̂n stări ı̂n care valoarea nu este cea mai mare
dintre toţi vecinii).
Algoritmii descrişi până acum sunt incompleţi – ei nu găsesc soluţia mereu, deoarece
se blochează ı̂n optime locale. Ascensiunea cu repornire aleatoare stabileşte puncte de
plecare aleator ı̂n spaţiul stărilor. Abordarea duce la un algoritm care este complet cu o
probabilitate ce tinde către 1, din motivul că repornirile aleatoare pot duce la alegerea
unui nod de start corespunzător unui nod scop. Dacă procentul de succes pentru o pro-
48 CAPITOLUL 3. CĂUTARE INFORMATĂ
blemă este p, atunci este nevoie de 1/p reporniri. Pentru problema celor opt regine, unde
p = 0.14, avem nevoie de aproximativ 7 iteraţii pentru a găsi o stare scop (de cost 0),
adică 6 porniri care duc la minim local şi 1 care duce la rezolvare (numerele date trebuie
ı̂nţelese ca valoari medii). Numărul mediu de paşi este 22. Dacă se foloseşte algoritmul
ce permite paşi laterali, un calcul asemănător duce la 25 de paşi necesari (ı̂n medie) pen-
tru rezolvarea problemei. Pentru o problemă de 3 milioane de regine, această abordare
(repornire aleatoare cu căutare cu paşi laterali) descoperă o soluţie ı̂n mai puţin de un
minut!
Problemele din lumea reală deseori au un profil al funcţiei obiectiv cu maxime şi
minime multiple, “ı̂ndesate” pe domeniul de definiţie; algorimul căutării prin ascensiune
duce, de regulă, ı̂ntr-un maxim local suficient de bun pentru tipul de calcul consumat.
Figura 3.10: Algoritmul coacerii simulate. Perturbările vor permite scoaterea bilei din
minimele locale.
Algoritmul este inspirat din metalurgie, ı̂n care se ı̂ncălzeşte un metal până la o tempe-
ratură ı̂naltă; pentru a durifica metalul se lasă apoi să se răcească foarte lent, permiţând
3.6. ALGORITMI DE CĂUTARE LOCALĂ ŞI PROBLEME DE OPTIMIZARE 49
structurii cristaline să ajungă ı̂ntr-o stare stabilă. Este important ritmul ı̂n care scade
temperatura.
Algoritmul pentru minimizarea unei funcţii este formalizat ı̂n figura 3.11. Dacă muta-
rea curentă duce ı̂ntr-o situaţie cu valoarea mai mică, atunci se acceptă; dacă noua situaţie
este defavorabilă, atunci se acceptă o mutare cu o anumită probabilitate. Probabilitatea
scade exponenţial cu lipsa de calitate a noii configuraţii şi cu “temperatura” curentă (va-
riabilă). Se poate arăta că dacă temperatura scade suficient de lent, atunci algoritmul
va găsi un optim local cu probabilitatea 1 [3]. Planificarea care apare ca parametu al
algoritmului este o funcţie descrescătoare faţă de timpul t.
Figura 3.11: Algoritmul de coacere simulată. Paşii defavorabili sunt permişi, dar proba-
bilitatea acestora este controlată. Parametrul planifiare determină valoarea temperaturii
T pentru timpul t.
1. selecţie: indivizii care sunt cei mai adecvaţi (faţă de valoarea funcţiei ce se vrea
50 CAPITOLUL 3. CĂUTARE INFORMATĂ
optimizată) sunt favorizaţi să apară de mai multe ori ı̂ntr-o populaţie nouă faţă de
indivizii mai puţin performanţi;
2. ı̂ncrucişare: are loc un schimb de gene ı̂ntre perechi de părinţi, formându-se copii;
aceştia se presupune că moştenesc şi combină performanţele părinţilor.
Pas 1. Crearea unei populaţii iniţiale de cromozomi. Se consideră mai multe va-
lori pentru variabila x ∈ [a, b]. Numărul acestor valori (numit dimensiunea populaţiei)
este dat ca parametrul al algoritmului, N R (ex. N R = 100). Toate valorile sunt
cuantificate prin cromozomi care sunt şiruri de k biţi (un bit se mai numeste şi
genă), k fiind alt parametru de intrare.
Generarea celor N R cromozomi se face aleator, prin setarea fiecărei gene la valoarea
0 sau 1, la ı̂ntâmplare. Se obţine astfel o populaţie iniţială formată din cromozomii
c1 , . . . , cN R .
Fiecare cromozom c (adica sir de k biţi) va produce un numar x(c) din intervalul
[a, b], astfel: daca valoarea ı̂n baza 10 a cromozomului este v(c), 0 ≤ v(c) ≤ 2k − 1,
atunci valoarea asociată din intervalul [a, b] este:
b−a
x(c) = a + v(c) · ∈ [a, b].
2k − 1
Pas 2. Evoluţia populaţiei. În acest pas se obţin generaţii succesive plecând de la
populaţia iniţială; populaţia de la generaţia g + 1 se obţine pe baza populaţiei de
la generatia g. Operatorii sunt selecţia, ı̂mperecherea (crosssover, ı̂ncrucişarea) şi
mutaţia.
Pas 2.1. Selecţia . Pentru fiecare cromozom din populatie se calculează funcţia
obiectiv vi = f (x(ci )), 1 ≤ i ≤ N R. Apoi se ı̂nsumează valorile funcţiilor
obiectiv obţinute pentru fiecare cromozom ı̂n parte:
NR
X
S= vi
i=1
Populaţia obtinută ı̂n pasul 2 reia ciclul de evoluţie. După ce se execută câteva astfel
de evoluţii (sau număr de generaţii, parametru al programului), se raportează valoarea
52 CAPITOLUL 3. CĂUTARE INFORMATĂ
x ← x + α∇f (x)
unde α este o constantă mică, a cărei valoare poate fi stabilită printr-o multitudine de
metode (volumul de studiu dedicat este impresionant).
Pentru multe probleme, cel mai bun algoritm este bazat pe metoda Newton–Raphson,
folosită pentru determinarea rădăcinilor ecuaţiilor de forma g(x) = 0 (g fiind funcţie de o
singură variabilă). Se calculează o nouă estimare a lui x prin:
g(x)
x←x−
g ′ (x)
Pentru a găsi un maxim al lui f (funcţie de mai multe variabile) următoarea valoarea a
lui x se determină astfel:
x ← x − Hf−1 (x)∇f (x)
unde Hf (x) este matricea hessiană, cu Hij = ∂ 2 f /∂xi ∂xj . Totuşi, inversarea matricilor
este computaţional intensivă pentru un număr mare de variabile.
8
Sau se foloseşte strategia elitistă: se returnează cel mai bun individ al tuturor generaţiilor.
9
S-a stabilit “ecuaţia” Algoritmi genetici + structuri de date = programare evoluţionistă, [4].
Capitolul 4
Probleme de satisfacere a
constrângerilor
Prezentul capitol tratează probleme ı̂n care stările se supun unor restricţii impuse.
Spre deosebire de reprezentările date la metodele de căutare din capitolele anterioare
(reprezentări care ţin cont de particularităţile problemei pentru care se face căutarea
soluţiei), problemele de satisfacere a constrângerilor au o formă mult mai generală, iar
euristicile sunt larg aplicabile.
53
54 CAPITOLUL 4. PROBLEME DE SATISFACERE A CONSTRÂNGERILOR
variabile este {rosu, verde, albastru}, iar restricţiile se pot exprima sub forma unor perechi
de forma X 6= Y unde X, Y ∈ W A, N T, Q, N SW, V, SA, T şi X, Y vecine pe hartă.
Northern
Territory
Western Queensland
Australia
South
Australia
New South Wales
Victoria
Tasmania
Deseori se recurge la reprezentarea acestor restricţii sub forma de graf ı̂n care două
variabile sunt legate printr-o muchie dacă se supun unei constrângeri. De exemplu, pentru
problema colorării regiunilor se leagă prin muchii noduri reprezentând regiuni vecine (şi
care trebuie colorate diferit) - fig 4.2.
NT
Q
WA
SA NSW
V
Victoria
• funcţie succesor : se asignează unei variabile ce nu are valoare dată (numită variabilă
liberă) o valoare din domeniul asociat, cu condiţia ca asignarea nou obţinută să fie
consistentă (să nu ı̂ncalce restricţiile impuse);
• test scop: asignarea curentă este completă, nu mai există variabile libere
4.1. PROBLEME DE SATISFACERE A CONSTRÂNGERILOR 55
Deoarece fiecare soluţie are toate cele n variabile cu valori asignate rezultă că adâncimea
soluţiei este n. Algoritmii folosiţi pentru rezolvarea acestui tip de probleme sunt cei de
căutare ı̂n adâncime (adâncimea se cunoaşte, iar cicluri nu putem avea, deoarece la fiecare
pas considerăm o altă variabilă liberă). De asemenea, algoritmii pentru căutare locală dau
rezultate bune.
Domeniile de valori pot fi discrete şi finite (precum mai sus) sau nu, şi ı̂n acest al doilea
caz restricţiile se dau folosind un limbaj care permite descrierea relaţiilor (de exemplu
x + y < z şi x − y = 4). Problemele cu domenii de tip continuu sunt studiate de către
cercetările operaţionale.
O constrângere poate fi unară – dacă se referă la o singură variabilă – şi atunci este
simplu de tratat, pentru că se modifică corespunzător domeniul de valori asociat prin
excluderea valorilor care nu satisfac restricţia. Deseori se dau restricţii binare, care implică
exact două variabile. De exemplu, pentru graful din figura 4.2 orice muchie reprezintă o
restricţie binară.
Există, desigur, şi restricţii de ordin mai mare, implicând cel puţin trei variabile.
Avem asemenea situaţie ı̂n problema următoare1 : să se substituie fiecare literă printr-o
cifră diferită, astfel ı̂ncât ecuaţia să fie adevărată
unu+
patru =
-----
cinci
Constrângerea ca valorile caracterelor diferite să fie diferite poate fi redusă la câteva de tip
binar - u 6= i, u 6= n, etc; apoi, pentru fiecare din cele cinci coloane avem câte o restricţie:
u + u = i + 10x1
n + r + x1 = c + 10x2
u + t + x = n + 10x3
2 (4.1)
a + x3 = i + 10x4
p + x4 = c
• la nodul rădăcină (cel care nu are nici o variabilă nu are valoare fixată) avem n · d
posibilităţi de a continua, deoarece avem n variabile şi pentru fiecare poate fi stabilită
o valoare din cele d;
• la nivelul următor avem (n − 1)d alegeri, pentru că au rămas mai puţine variabile
Numărul de frunze este mult mai mare decât dn care s-ar obţine prin enumerarea tuturor
posibilităţilor de asignare de valori pentru cele n variabile. Ca atare, aplicarea unei metode
de căutare oarecare poate să nu fie o idee bună.
Numărul supraestimat de frunze a apărut din cauză că la fiecare pas permitem luarea
ı̂n considerare a tuturor variabilelolor posibile, pe când soluţia unei PSC nu este senzitivă
la ordine. Este admisibil ca la fiecare pas să se ia ı̂n considerare doar o variabilă. Aşa
numărul de frunze devine dn .
Căutarea de tip backtracking este de fapt o căutare de tip “mai întâi ı̂n adâncime” care
generează un singur nod descendent. Deoarece reprezentarea PSC este standardizată, ea
se poate aplica independent de specificul domeniului. Algoritmul este dat ı̂n figura 4.4.
Fiind un algoritm de căutare neinformată, ı̂n practică el nu se comportă bine pentru
probleme de dimensiune mare. Există ı̂nsă nişte metode generale care măresc eficienţa
4.2. CĂUTARE BACKTRACKING PENTRU PSC 57
1. Care variabilă ar trebui luată ı̂n considerare la pasul curent, şi ı̂n ce ordine ar trebui
ı̂ncercate valorile?
2. Care sunt implicaţiile asignării curente de valoare pentru o variabilă pentru alte
variabile ce ı̂ncă nu au valori asociate?
dar nu se spune cum anume se face selectarea de variabilă. Se poate, desigur, opta,
pentru o ordine fixă a variabilelor. Dar putem observa că dacă asignăm W A = rosu şi
N T = verde, pentru SA rămâne o singură valoare care poate fi asignată, deci are sens
să considerăm la pasul următor variabila SA, mai degrabă decât Q, N SW sau V . După
acest pas, Q, N SW şi V au domeniu de alegere al valorilor restrâns la câte o variabilă.
Intuitiv, ar trebui să considerăm la fiecare pas variabila care are cele mai puţine valori
candidat.
Strategia numită “minim de valori rămase”(MVR) decide alegerea variabilei care are
cele mai puţine variante, astfel se ı̂ncearcă producerea unei eşuări cât mai devreme posibil
58 CAPITOLUL 4. PROBLEME DE SATISFACERE A CONSTRÂNGERILOR
ı̂n calea de căutare curentă, astfel ca să se reteze căile care nu duc la soluţii. De exemplu,
dacă avem o variabilă care are 0 valori rămase, atunci algoritmul o va alege pe aceasta
şi se va detecta eşuare. Acest lucru este corect, deoarece oricum mai devreme sau mai
târziu se ajunge la imposibilitatea de a da valoare pentru variabila ı̂n cauză, deci astfel
se evită nişte căutări care nu ar putea produce soluţie.
În practică, această strategie simplă duce la ı̂mbunătăţiri ale vitezei de 3 până la
3000 de ori. Se discută ı̂n secţiunea 4.2.2 modul ı̂n care contorizarea numărului de valori
disponibile rămase se poate face eficient.
Euristica nu este utilă la alegerea primei variabile, deoarece fiecare regiune poate avea
trei culori. Într-un asemenea moment se foloseşte euristica gradului care indică alegerea
acelei variabile care are cele mai multe contrângeri cu alte variabile fără valori asignate.
Noţiunea de grad face aici referire la valori definite ı̂n teoria grafurilor. De exemplu,
pentru harta din figura 4.1 avem că SA are gradul 5, alte variabile au valori 2, 3, 0. Ca
atare, se va alege ca primă variabilă SA (şi paşii următori, cu aceeaşi euristică duc la
rezolvarea problemei fără a fi nevoie să se revină). Strategia MVR este mult mai efectivă
decât aceasta, dar euristica gradului este utilă la deciderea următorului pas ı̂ntr-o situaţie
de egalitate.
Odată ce s–a ales variabila pentru care se va dă valoare trebuie determinat care este
ordinea de considerare a valorilor. Pentru asta se aplică strategia celei mai puţin con-
strângătoare valori. Concret, se preferă valorile care produc cele mai puţine eliminări
de valori pentru alte varibile neasignate. Ideea este de a se lăsa maximum de flexibili-
tate (posibilităţi) pentru alegerile următoare. De exemplu, dacă luăm W A = verde şi
N T = verde, iar pentru Q setăm culoarea albastră, atunci SA rămâne fără posibilitate
de a i se atribui valoare. Evident, dacă se cere generarea tuturor soluţiilor pentru PSC
sau dacă problema nu are nicio soluţie, strategia este inutilă.
Verificare ı̂nainte
Ori de câte ori unei variabile X i se asignează o valoare, pentru fiecare variabilă Y
care este conectată cu X printr–o restricţie se şterge din domeniul lui Y valorile care sunt
inconsistente cu proaspăta valoare a lui X. Tabelul 4.1 arată evoluţia căutării cu verificare
4.2. CĂUTARE BACKTRACKING PENTRU PSC 59
ı̂nainte. Se poate observa că după ce se asignează W A = rosu şi Q = verde, domeniile
pentru N T şi SA conţin doar un singur element; am redus deci factorul de ramificare
pentru aceste două variabile. Este clar că această verificare ı̂nainte face pereche bună cu
strategia MVR, pentru care următoarele variabile luate ı̂n considerare sunt SA şi N T .
Verificarea ı̂nainte este un mod eficient de calcularea a informaţiei de care MVR are nevoie.
Mai observăm că după ce setăm V = albastru domeniul lui SA este gol. Deci verifi-
carea ı̂nainte a determinat că asignarea parţială {W A = rosu, Q = verde, V = albastru}
este inconsistentă cu cerinţele problemei, necesitând un pas ı̂napoi.
WA NT Q N SW V SA T
Domeniile iniţiale RVA RVA RVA RVA RVA RVA RVA
După W A = rosu R VA RVA RVA RVA VA RVA
După Q = verde R A V RA RVA A RVA
După V = albastru R A V R A RVA
Tabela 4.1: Evoluţia in problema colorării hărţilor folosind verificarea ı̂nainte. R este
roşu, V este verde, A este albastru.
Propagarea constrângerilor
nu avem nici o valoare potrivită ce poate fi asignată lui SA. Arcul (N SW, SA) poate fi
făcut consistent prin eliminarea lui albastru din domeniul de valori al lui N SW .
Acelaşi proces se poate aplica şi perechii de variabile SA şi N T (ele fiind legate printr-o
restricţie): tot din linia 3 a tabelului 4.1 se observă că amândouă variabilele au domeniul
{albastru}, şi deci acţionarea pentru a menţine consistenţa oricărui arc (de la SA la N T
sau invers) duce la domeniu de valori vid pentru una din variabile. Se va produce deci
un pas ı̂napoi, datorită detectării devreme a imposibilităţii de continuare. Consistenţa
arcului “vede mai departe” decât propagarea ı̂nainte.
Procesul de verificare a consistenţei arcelor trebuie aplicat ı̂n mod repetat până când
nu mai există inconsistenţe. Acest proces se poate face ı̂nainte de ı̂nceperea căutării
sau după fiecare asignare de valoare. Ori de câte ori se face ştergerea unei valori din
domeniul unei variabile X, trebuie verificate toate arcele de la variabile Y la X. Algoritmul
consistenţei arcelor AC-3 este dat ı̂n figura 4.5 şi foloseşte o coadă care menţine arcele
ce trebuie să fie verificate din punct de vedere al consistenţei. Fiecare arc (Xi , Xj ) este
cercetat pe rând pentru consistenţă. Dacă se şterge vreo valoare din domeniul lui Xi ,
atunci toate arcele de forma (Xk , Xi ) ce indică spre variabila Xi sunt adăugate la coadă.
Complexitatea este O(n2 d3 ) [1]; beneficiile obţinute prin folosirea acestei strategii acoperă
efortul computaţional. Tot ı̂n [1] se explică de ce consistenţa arcelor nu determină toate
inconsistenţele.
Se pot efectua verificări de k-consistenţe, ı̂n care pentru orice set de k − 1 variabile
care au o asignare consistentă, o oricare a k-a variabilă poate să primească o valoare
consistentă (pentru k = 2 avem obţinem chiar consistenţa arcelor). Totuşi, cu cât k este
mai mare cu atât verificările sunt mai complexe.
Figura 4.5: Algoritmul AC-3 pentru consistenţa arcelor. După aplicarea lui fiecare arc
este consistent sau există variabile al căror domeniu este gol (şi ı̂n acest ultim caz PSC
nu poate fi rezolvată).
funcţionează bine şi pentru probleme “grele”: de exemplu, planificarea operaţiilor din
decursul unei săptămâni pentru telescopul Hubble a fost redusă la 10 minute, de la 3
săptămâni.
Un alt avantaj al căutării locale este că permite cătarea unei soluţii atunci când o parte
din restricţii se schimbă “pe loc”. De exemplu, pentru o problemă de planificare a zbo-
rurilor, dacă un aeroport devine indisponibil (accidente, condiţii meteo) atunci restricţia
corespunzătoare poate fi uşor introdusă şi plecând de la o planificare precedentă se poate
obţine una adecvată pentru situaţia actuală ı̂n timp foarte scurt.
Tabelul 4.2 conţine o comparaţie a performanţelor diferitelor variante de backtrac-
king pentru un set de probleme. Compararea se face pe baza numărului de verificări de
consistenţă. Prima problemă este găsirea unei colorări adecvate a hărţii SUA pentru 50
de state şi 4 culori. A doua problemă se referă la reolvarea problemei celor n regine,
pentru n ∈ [2, 50]. A treia problemă este jocul “Puzzle Zebra” [1]. Ultimele două sunt
probleme artificiale alese aleator. Rezultatele sugerează că verificarea ı̂nainte ı̂mpreună
cu MVR este mai bună decât orice altă strategie backtracking, dar nu ı̂ntotdeauna mai
bună decât căutarea locală cu conflicte minime.
Teorema 3 Dacă graful de constrângeri nu are cicluri, atunci PSC poate fi rezolvată cu
complexitatea O(n · d2 ).
1. alege un subset S din V ariabile[P SC] astfel ı̂ncât graful să devină un arbore după
eliminarea nodurilor din S şi a arcelor corespunzătoare. S se va numi set de eliminare
a ciclurilor.
2. Pentru fiecare asignare posibilă pentru variabilele din S care satisfac constrângerile
PSC:
(a) elimină din domeniul variabilelor rămase valorile care sunt inconsistente cu
asignările pentru S
(b) dacă PSC rămasă are o soluţie, returneaz–o ı̂mpreună cu asignările pentru S
Găsirea celui mai mic set de eliminare a ciclurilor este o problemă NP-grea, dar există
algoritmi eficienţi pentru obţinerea unor aproximări. Dacă acest set are dimensiunea c,
atunci complexitatea variantei de mai sus este O(dc · (n − c)d2 ).
A doua variantă porneşte de la construirea unei descompuneri a grafului de con-
strângeri ı̂ntr–un arbore format dintr-un set de probleme interconectate. Fiecare sub-
problemă se rezolvă independent, apoi soluţiile rezultate sunt combinate. Figura 4.8
64 CAPITOLUL 4. PROBLEME DE SATISFACERE A CONSTRÂNGERILOR
NT
Q
WA
NSW
V
Victoria
Figura 4.7: Prin eliminarea variabilei SA, graful de constrângeri din figura 4.2 devine un
arbore, pentru care rezolvarea se face ı̂n timp liniar.
Figura 4.8: O descompunere sub formă de arbore a grafului de constrângeri din figura 4.2
1. fiecare variabilă din problema originală trebuie să apară ı̂n cel puţin una din sub-
probleme;
2. dacă două variabile sunt conectate printr-o constrângere ı̂n problema originală,
atunci ele trebuie să apară ı̂mpreună ı̂n cel puţin una dintre subprobleme;
3. dacă o variabilă apare ı̂n două subprobleme din arbore, atunci ele trebuie să apară
ı̂n fiecare subproblemă de-a lungul unei căi care conectează aceste subprobleme.
Fiecare din subprobleme se rezolvă independent; dacă una dintre ele nu are soluţie,
4.4. STRUCTURA PROBLEMEI 65
atunci ı̂ntreaga problemă nu are soluţie. Constrângerile care trebuie respectate se rezolvă
prin interpretarea fiecărei subprobleme ca o variabilă mai mare şi aplicarea algoritmului
eficient de rezolvare pentru arbore. Constrângerile pentru acest graf arbore reprezintă
condiţia ca subprobleme cu variabile comune să aibe aceeaşi valoare pentru variabilele
partajate.
66 CAPITOLUL 4. PROBLEME DE SATISFACERE A CONSTRÂNGERILOR
Capitolul 5
Agenţi logici
5.1 Motivaţie
Spre deosebire de agenţii care aplică metodele de căutare prezentate ı̂n capitolele
anterioare, agenţii logici beneficiază de cunoaştere exprimată ı̂n cele mai variate forme,
combinând şi recombinând informaţia pentru a răspunde unor scopuri diverse. În plus,
cunoaşterea şi raţionarea de asemenea joacă un rol crucial ı̂n lucrul cu medii parţial
observabile. Un agent bazat pe cunoaştere poate să producă noi cunoştinţe pe baza
cunoştinţelor generale şi a percepţiilor ; de exemplu, un medic poate să pună un diagnostic
unui pacient, plecând de la simptomele acestuia şi cunoştinţele pe care i le-a asigurat
formarea medicală. Dar, deşi simptomele sunt cunoscute, un medic nu cunoaşte absolut
tot despre pacientul tratat – şi de aici rezultă o altă caracteristică a agenţilor logici:
necesitatea de a lucra cu observaţiile parţiale.
Un alt motiv pentru care se studiază agenţii bazaţi pe cunoaştere este flexibilitatea
produselor rezultate. Astfel de agenţi sunt ı̂n stare să accepte noi sarcini şi să câştige
rapid noi competenţe prin ı̂nvăţare sau prin descoperire de noi informaţii.
Principalul mod ı̂n care se abordează agenţii logici este bazat pe logică (propoziţională,
apoi de ordinul ı̂ntâi). Spectrul abordărilor curente este ı̂nsă mult mai bogat, deoarece ı̂n
lumea reală apar probleme legate de incertitudine, aici intervenind teoria probabilităţilor
şi sistemele fuzzy, iar partea de ı̂nvăţare se abordează de regulă prin teoria aferentă
domeniului ı̂nvăţării automate - reţele neuronale, arbori de decizie (vezi [5], [6]).
67
68 CAPITOLUL 5. AGENŢI LOGICI
Componenta centrală a unui agent este baza de cunoştinţe (BC), adică un set de
enunţuri care fac parte din domeniul de lucru al agentului. Fiecare enunţ este exprimat
ı̂ntr–un limbaj numit limbaj de reprezentare a cunoştinţelor şi reprezintă nişte aserţiuni
despre lume.
Mai este nevoie de un mecanism care să adauge noi propoziţii la BC şi unul care să
determine ce se cunoaşte (sau ce anumte trebuie să se facă la pasul curent). Numele
lor este Spune şi Intreaba. Al doilea mecanism presupune inferenţe – metode prin care
pornind de la cunoştinţe se deduc altele.
Figura 5.1 conţine o schiţă a unui program bazat pe cunoaştere. El preia o percepţie
ca intrare şi returnează o acţiune. Agentul menţine o BC care iniţial este formată din
cunoştinţele de bază şi care se ı̂mbogăţeste pe măsură ce i se comunică percepţii sau
propoziţii. Primul pas este de a comunica bazei de cunoştinţe ceea ce s-a perceput; la
pasul al doilea se ı̂ntreabă ce ar trebui făcut. La pasul al treilea i se comunică BC că s-a
efectuat acţiunea indicată la pasul anterior; această a doua comunicare este utilă pentru
a ţine BC ancorată ı̂n contextul curent.
• măsura de performanţă este dată de suma valorilor ataşate fiecărui eveniment: 1000
pentru preluarea aurului, -1000 pentru căderea ı̂ntr–o groapă sau omorârea de către
monstru, -10 pentru aruncarea săgeţii şi -1 pentru orice altă acţiune;
• mediul: o matrice de camere de 4 pe 4. Agentul ı̂ncepe ı̂n camera din stânga jos,
de coordonate [1, 1], cu faţa spre dreapta. Locaţia camerelor cu aurul, găurile şi
monstrul sunt alese aleator, dar se garantează că nu sunt ı̂n locaţia de pornire.
• acţiuni: agentul poate să se deplaseze ı̂n direcţia ı̂n care se află cu faţa, poate să se
ı̂ntoarcă la stânga sau la dreapta cu 90◦ . Personajul moare dacă intră ı̂n camera cu
monstrul viu. Dacă exact ı̂n faţa lui este un zid, atunci rămâne pe loc. Acţiunea
“apucă” este folosită pentru preluarea aurului, dacă se află ı̂n aceeaşi cameră cu el.
Acţiunea “trage” se poate folosi pentru a lansa săgeata ı̂n direcţia ı̂n care e orientat;
săgeată zboară până se izbeşte fie de zid, fie de monstru.
– ı̂n pătratul care conţine monstrul şi ı̂n camerele vecine (dar nu pe diagonală)
se percepe miros;
Cele cinci percepţii determină un vector cu cinci elemente care se raportează ori de
câte ori agentul (personajul) intră ı̂ntr–o cameră.
70 CAPITOLUL 5. AGENŢI LOGICI
Cunoştinţele date mai sus se introduc ı̂ntr–o BC. De fiecare dată când agentul vizitează
o cameră se primeşte vectorul de percepţii şi se pot face deducţii de tipul: e posibil ca ı̂n
camera [2, 1] să fie o groapă, sau sigur ı̂n camera [3, 3] nu se află monstru, deducţii care
se adaugă la BC (pentru a evita “redescoperirea roţii”).
5.4 Logica
Secţiunea prezentă conţine generalităţi despre reprezentări logice şi raţionament. De-
taliile sunt specifice logicilor concrete ce se studiază (logica propoziţiilor, logica predica-
telor, logica temporală, logica fuzzy).
Orice logică trebuie să clarifice două aspecte: sintaxa şi semantica. Sintaxa reprezintă
o specificare a ceea ce este corect exprimat ı̂n logica respectivă şi se poate reprezenta sub
formă de diagrame sau propoziţii folosind simboluri.
Semantica defineşte ı̂n general semnificaţia unui enunţ. În cadrul logicii ea permite
stabilirea unei valori de adevăr pentru un enunţ care este corect formulat din punct de
vedere sintactic. Mai mult, semantica trebuie să specifice valoarea de adevăr pentru fiecare
enunţ faţă de fiecare lume posibilă; de exemplu, a > b este adevărată pentru a = 3 şi
b = 2, dar falsă pentru a = b = 4.
O “lume posibilă” (set de valori ataşat variabilelor) se va numi de acum ı̂nainte model
şi vom spune că m este un model al enunţului a dacă a este adevărat ı̂n lumea m.
Raţionamentul logic (sau deducţia, adică partea de interes major ı̂ntr-o logică) repre-
zintă modul ı̂n care se poate deduce un enunţ dintr-un altul. Definiţia formală a deducţiei
este:
Definiţia 10 Spunem că din α se deduce β şi notăm α |= β dacă ı̂n orice model al
enunţului α avem că şi β este adevărat.
De exemplu, din propoziţia a > b se poate deduce şi b ≤ a, deoarece pentru orice
combinaţie de numere a şi b care fac prima propoziţie adevărată şi al doilea enunţ este
adevărat. Pentru jocul cu lumea monstrului, să presupunem că agentul nu detectează
curent de aer ı̂n poziţia [1, 1] şi detectează curent de aer ı̂n [2, 1]. Acestea ı̂mpreună cu
regulile jocului1 formează baza de cunoştinţe. Agentul este interesat dacă ı̂n [1, 2], [2, 2],
[3, 1] se află găuri. Fiecare din camere poate să conţină sau nu gaură, deci ı̂n total avem
8 modele posibile. Vom considera acele modele pentru care baza de cunoştinţe nu este
contrazisă; există trei asemenea cazuri din cele 8 posibile şi ı̂n toate propoziţia “nu există
groapă ı̂n [1, 2]” este adevărată, pe când “nu există groapă ı̂n [2, 2]” şi “nu există groapă
1
Pentru moment nu ne interesează cum anume se exprimă formalizat aceste reguli, vom presupune că
ele sunt reprezentate convenabil.
5.5. LOGICA PROPOZIŢIONALĂ 71
ı̂n [3, 1]” nu sunt adevărate pentru toate cele trei cazuri; şi negaţiile lor sunt ı̂n situaţie
similară.
Această metodă de verificare a posibilităţii de deducere se numeşte algoritmul veri-
ficării modelelor. Vom dezvolta mai mulţi algoritmi de deduţie; dacă avem un astfel de
algoritm i, atunci vom scrie α |=i β şi vom citi “β este dedus (sau derivat) din α prin i”
sau “i ı̂l derivează pe β din α”.
Un algoritm inferenţial se numeşte temeinic 2 dacă obţine numai enunţuri care sunt
derivabile din baza de cunoştinţe. Este evident că algoritmul de verificare a modelelor
este temeinic.
O altă proprietate pentru un algoritm inferenţial este cea de completitudine – dacă
poate să deducă toate enunţurile care sunt derivabile din baza de cunoştinţe. O examinare
sistematică ı̂n cazul unei probleme ı̂n care mulţimea de concluzii posibile este finită duce,
evident, la un algoritm complet; proprietatea este ı̂nsă esenţială pentru problemele ı̂n care
mulţimea concluziilor posibile este infinită.
5.5.1 Sintaxa
Enunţurile atomice din logica propoziţională3 sunt elemente sintactice indivizibile.
Fiecare simbol corespunde unei propoziţii care poate să fie adevărată sau falsă. Există
două simboluri propoziţionale cu semnificaţii fixate: Adevarat este propoziţia tot timpul
adevăratăşi Fals este propoziţia tot timpul falsă.
Enunţurile complexe sunt compuse din propoziţii simple folosind conectorii logici. Cei
cinci conectori sunt:
Tabelul 5.1 dă sintaxa folosită ı̂n logica propoziţională ı̂n forma BNF (Backus-Naur
Form).
Parantezele sunt importante: fiecare propoziţie care este construită cu conector binar
este ı̂ncadrată ı̂ntre paranteze. Uneori acestea se pot omite, dar numai dacă nu duc
la ambiguităţi. Suplimentar, se defineşte şi prioritatea operatorilor; aceştia, ı̂n ordinea
precedenţei sunt: ¬, ∧, ∨, ⇒, ⇔. Astfel, A ⇒ ¬B ∨ C este totuna cu (A ⇒ (¬B ∨ C)).
Suplimentar, semantica ne poate permitem să scriem A ∧ B ∧ C deoarece ((A ∧ B) ∧ C)
are ı̂ntotdeauna aceeaşi valoare de adevăr ca şi (A∧(B ∧C)), dar arată că este ambiguitate
pentru expresia A ⇒ B ⇒ C.
5.5.2 Semantica
Semantica defineşte reguli pentru determinarea valorii de adevăr a propoziţiilor relativ
la un model concret. În logica propoziţională un model reprezintă valorile de adevăr ale
simbolurilor propoziţionale. De exemplu, dacă avem propoziţiile P1,2 , P2,2 , P3,1 , atunci
un model posibil este m = {P1,2 = f als, P2,2 = adevarat, P3,1 = adevarat}.
Calculul valorii de adevăr se face recursiv, deoarece orice propoziţie este alcătuită din
propoziţii atomice şi conectori. Pentru ı̂nceput, trebuie să se determine valoarea de adevăr
a unei propoziţii atomice:
• Adevarat are valoarea de adevăr “adevărat” pentru orice model; Fals are valoarea
de adevăr “fals” pentru orice model;
• valoarea de adevăr a unei unui simbol propoziţional trebuie să rezulte din modelul
curent.
5.5. LOGICA PROPOZIŢIONALĂ 73
Pentru propoziţiile compuse se foloseşte tabela de adevăr (dată ı̂n tabelul 5.2) care
arată cum se calculează valoarea propoziţiei plecând de la elementele care o formează.
Pe baza celor de mai sus se poate scrie o funcţie (Este-Adevarat) care stabileşte dacă
valoarea de adevăr a unei expresii s, plecând de la un model dat m este adevărat.
S-a spus anterior că o bază de cunoştinţe este o mulţime de enunţuri. Dat fiind modul
de calcul al valorii de adevăr pentru o conjuncţie, se poate spune că o BC de forma α1 ,
. . . , αn se poate scrie ca: α1 ∧ . . . ∧ αn .
• nu există nici o groapă in camera din care ı̂ncepe jocul, deci avem regula R1 : ¬P1,1
• ı̂ntr–o cameră se simte curent de aer numai dacă ı̂n vecinătatea ei se află o groapă;
deci avem:
R2 : B1,1 ⇔ (P1,2 ∨ P2,1 )
şi
R3 : B2,1 ⇔ (P1,1 ∨ P2,2 ∨ P3,1 )
• introducem percepţiile: nu se simte curent de aer ı̂n prima cameră (deci R4 : ¬B1,1 )
şi se simte curent ı̂n camera (2, 1) (deci R5 : B2,1 ).
5.5.4 Inferenţa
Scopul unei inferenţe este de a detemina dacă BC |= α, pentru un α dat. Primul
algoritm pe care ı̂l dăm se bazează pe implementarea directă a definiţiei 10: se enumeră
74 CAPITOLUL 5. AGENŢI LOGICI
toate modelele şi se verifică dacă α este adevărată ı̂n toate modelele ı̂n care BC este
adevărată. Pentru logica propoziţională, mulţimea tuturor modelelor se obţine dând
toate combinaţiile de valori de adevăr pentru simbolurile propoziţionale. În cazul nostru
avem simbolurile B1,1 , B2,1 , P1,1 , P1,2 , P2,1 , P2,2 şi P3,1 . Sunt deci 27 = 128 de modele;
se poate verifica faptul că pentru trei dintre ele BC este adevărată; ı̂n aceste trei modele
¬P1,2 este adevărată, deci nu este groapă ı̂n camera de coordonate (1, 2). Mai departe,
P2,2 este adevărată doar ı̂n două din cele trei modele, deci nu putem deduce nici P2,2 nici
¬P2,2 .
Figura 5.2 conţine un algoritm general pentru a determina dacă se poate deduce α din
BC. Este o căutare de tip backtracking; algoritmul este temeinic, deoarece implementează
direct definiţia; este de asemenea şi complet deoarece se termină pentru orice bază de
cunoştinţe şi α, numărul de modele fiind finit.
Complexitatea algoritmului este dictată de n, numărul de simboluri. Complexitatea
ı̂n timp este O(2n ) iar cea ı̂n spaţiu este O(n), deoarece avem o căutare de tipul “mai
ı̂ntâi ı̂n adâncime”. Vom prezenta algoritmi care ı̂n practică sunt mult mai eficienţi, dar
pentru toţi algoritmii inferenţiali cunoscuţi există un cel mai defavorabil caz care duce la
complexitate de timp exponenţială.
(α ∧ β) ≡ (β ∧ α) comutativitatea lui ∧
(α ∨ β) ≡ (β ∨ α) comutativitatea lui ∨
((α ∧ β) ∧ γ) ≡ (α ∧ (β ∧ γ)) asociativitatea lui ∧
((α ∨ β) ∨ γ) ≡ (α ∨ (β ∨ γ)) asociativitatea lui ∨
¬(¬α) ≡ α eliminarea dublei negaţii
(α ⇒ β) ≡ (¬β ⇒ ¬α) contrapoziţie
(α ⇒ β) ≡ (¬α ∨ β) eliminarea implicaţiei
(α ⇔ β) ≡ ((α ⇒ β) ∧ (β ⇒ α)) eliminarea bicondiţională
¬(α ∧ β) ≡ (¬α ∨ ¬β) de Morgan
¬(α ∨ β) ≡ (¬α ∧ ¬β) de Morgan
(α ∧ (β ∨ γ)) ≡ ((α ∧ β) ∨ (α ∧ γ)) distributivitatea lui ∧ asupra lui ∨
(α ∨ (β ∧ γ)) ≡ ((α ∨ β) ∧ (α ∨ γ)) distributivitatea lui ∨ asupra lui ∧
Al doilea concept este validitatea. O propoziţie este validă dacă este adevărată ı̂n orice
model4 . Conceptul este util pentru următoare teoremă de deducţie:
Teorema 4 Pentru orice propoziţii α şi β, avem că α |= β dacă şi numai dacă propoziţia
α ⇒ β este validă.
Ultimul concept este satisfiabilitatea. O propoziţie este satisfiabilă dacă şi numai dacă
este adevărată ı̂n cel puţin un model. Dacă α este adevărată ı̂ntr–un model m, atunci
spunem că m satisface α, sau că m este un model al lui α.
A verifica dacă β se poate deduce din α (adică dacă α ⇒ β) este echivalent cu a vedea
dacă α ∧ ¬β este nesatisfiabilă - de fapt regăsim procedeul demonstraţiei prin reducere la
absurd.
adică: dacă din α se poate deduce β şi ştim că α este adevărată, atunci şi β este adevărată.
Altă regulă este eliminarea lui şi care spune că dintr–o conjuncţie oricare din termeni
poate să fie dedus:
α∧β
α
De asemenea, oricare din echivalenţele din tabelul 5.3 pot fi folosite ca reguli de
inferenţă; de exemplu echivalenţa pentru eliminarea bicondiţională duce la două reguli
de inferenţă:
α⇔β (α ⇒ β) ∧ (β ⇒ α)
şi
(α ⇒ β) ∧ (β ⇒ α) α⇔β
Exemplificăm utilizarea regulilor de inferenţă şi a echivalenţelor ı̂n lumea monstrului.
Continuăm lista prezentată ı̂n secţiunea 5.5.3. Aplicând eliminarea bicondiţională pentru
R2 obţinem:
R6 : (B1,1 ⇒ (P1,2 ∨ P2,1 )) ∧ ((P1,2 ∨ P2,1 ) ⇒ B1,1 )
Se aplică regula Modus Ponens pentru R8 şi faptul dat ı̂n R4 , obţinându–se:
R9 ¬(P1,2 ∨ P2,1 )
sau altfel zis, nici camera [1, 2] şi nici [2, 1] nu conţin groapă.
Derivarea precedentă se numeşte demonstraţie şi se bazează pe aplicarea unor reguli
de inferenţă. Oricare din algoritmii de căutare din capitolele 2 şi 3 poate fi folosit pentru
găsirea unei demonstraţii, folosind ca stare iniţială baza de cunoştinţe iar pas următor
oricare din regulile de inferenţă.
Deoarece inferenţa ı̂n logica propoziţională este NP-completă, s-ar putea spune că o
căutare de demonstraţie nu poate să fie mai eficientă decât enumerarea modelelor. În prac-
tică ı̂nsă, găsirea unei demonstraţii este mult mai eficientă, deoarece se evită propoziţiile
irelevante, indiferent de câte sunt. De exemplu, ı̂n demonstraţia anterioară nu s–a făcut
referire la propoziţiile care conţin simbolurile B2,1 sau P3,1 .
5.6. TIPARE DE RAŢIONAMENT ÎN LOGICA PROPOZIŢIONALĂ 77
5.6.1 Rezoluţia
În mod evident, regulile de inferenţă expuse anterior sunt temeinice; nu este ı̂nsă evi-
dent dacă sunt şi complete, adică dacă ele permit deducerea a orice poate fi demonstrat
pornind de la o bază de cunoştinţe. Aplicarea unui algoritm de căutare care este complet
având drept paşi următori regulile de inferenţă nu garantează obţinerea unui mecanism
inferenţial complet. De exemplu, dacă regula eliminării bicondiţionale nu ar fi fost pre-
zentă, atunci concluzia din demonstraţia anterioară nu s–ar fi putut dovedi.
Introducem o singură regulă de inferenţă, numită rezoluţie care produce un algoritm
de inferenţă complet, dacă este folosit ı̂n conjuncţie cu un algoritm de căutare complet.
Pentru lumea monstrului adăugăm următoarele fapte la baza de cunoştinţe:
R11 : ¬B1,2
şi
R12 : B1,2 ⇔ (P1,2 ∨ P2,2 ∨ P1,3 )
R13 : ¬P2,2
R14 : ¬P1,3
Se observă că literalul ¬P2,2 din R13 se reduce cu literalul P2,2 din R15 şi obţinem:
Putem, de asemenea, să reducem ¬P1,1 din R1 cu P1,1 din R15 şi obţinem:
R17 : P3,1
Aceste reduceri exprimă regula rezoluţiei unitate, care se scrie formalizat astfel:
l1 ∨ · · · ∨ lk , m
l1 ∨ · · · li−1 ∨ li+1 ∨ · · · ∨ lk
unde fiecare l este un literal iar li şi m sunt literali complementari (unul este negarea
celuilalt). Deci regula rezoluţiei unitate preia o clauză (o disjuncţie de literali) şi un
literal şi produce o nouă clauză.
Regula de mai sus admite o generalizare imediată:
l1 ∨ · · · ∨ lk , m1 ∨ · · · ∨ mn
l1 ∨ · · · li−1 ∨ li+1 ∨ · · · ∨ lk ∨ m1 ∨ · · · ∨ mj−1 ∨ mj+1 ∨ · · · ∨ mn
78 CAPITOLUL 5. AGENŢI LOGICI
adică se pleacă de la două clauze şi se ajunge la una nouă ı̂n care avem toţi literalii clauzelor
iniţiale, mai puţin cei doi termeni care sunt complementari. Desigur, se presupune că se
aplică şi factorizare, adică o expresie de forma A ∨ A ∨ · · · este redusă la A ∨ · · ·.
Este uşor de văzut că regula de rezoluţie este temeinică: dacă li este adevărată, atunci
mj este falsă şi deci m1 ∨ · · · ∨ mj−1 ∨ mj+1 ∨ · · · ∨ mn trebuie să fie adevărată; analog,
dacă li este falsă, atunci l1 ∨ · · · li−1 ∨ li+1 ∨ · · · ∨ lk este adevărată. Deoarece li este ori
adevărată, ori falsă, obţinem că una din cele două concluzii are loc, deci şi disjuncţia lor
este adevărată; această din urmă disjuncţie este exact concluzia regulii.
Se poate arăta, de asemenea, că orice algoritm complet de căutare care aplică doar
regula de rezoluţie poate să demonstreze orice concluzie care se poate demonstra plecând
de la o bază de cunoştinţe ı̂n logica propoziţională.
Există totuşi un aspect practic care trebuie menţionat: dacă se dă de exemplu propoziţia
A adevărată, metoda rezoluţiei nu poate să deducă automat că şi A ∨ B este adevărată.
Mai general, rezoluţia poate fi folosită pentru a confirma sau infirma orice propoziţie, dar
nu poate să genereze singură toate propoziţiile care pot fi deduse pornind de la baza de
cunoştinţe.
2. Se elimină ⇒, prin α ⇒ β ≡ ¬α ∨ β
1. nu există noi clauze care să fie adăugate la setul de clauze; ı̂n acest caz din BC nu
se poate deduce α;
2. două clauze produc clauza vidă, caz ı̂n care din BC se poate deduce α.
Clauza vidă este echivalentă cu Fals, deoarece o clauză este adevărată dacă şi numai
dacă cel puţin un termen al ei este adevărat; nefiind cazul, ı̂nseamnă ca FNC dată de
BC ∧ ¬α evoluează la un enunţ care conţine conjuncţie cu Fals, deci valoarea de adevăr
este fals. Din principiul reducerii la absurd avem că BC |= α.
O aplicare parţială a algoritmului de rezoluţie pentru BC = R2 ∧ R4 şi α = ¬P1,2 este
dată ı̂n figura 5.4. Tot din figură observăm că obţinem, de exemplu, ¬B1,1 ∨ P1,2 ∨ B1,1
care se reduce la Adevarat ∨ P1,2 care se evaluează la Adevarat. Nu este utilă o asemenea
clauză, deoarece este cuprinsă ı̂ntr–o conjuncţie, iar conform tabelei de adevăr 5.2 avem
că Adevarat ∧ X este echivalent cu X, pentru orice expresie X.
80 CAPITOLUL 5. AGENŢI LOGICI
Se defineşte ı̂nchiderea rezolutivă a unei propoziţii aflate ı̂n FNC ca fiind setul tuturor
clauzelor care se obţin din aplicarea repetată a regulii de rezoluţie peste propoziţie sau
clauze derivate din ea. Acestă mulţime este finită, deoarece numărul de combinaţii ı̂n
disjuncţii al unui set finit de simboluri este finit (se aplică şi factorizarea).
Completitudinea este dată de teorema:
Teorema 5 (Teorema de rezoluţie, [1]) Dacă un set de clauze este nesatisfiabil, atunci
ı̂nchiderea rezolutivă a acestor clauze conţine clauza vidă.
1. Fiecare clauză Horn poate fi scrisă ca o implicaţie a cărei premisă este o conjuncţie cu
literali pozitivi şi drept concluzie un singur literal pozitiv. De exemplu, ¬A∨¬B ∨C
este echivalentă cu A ∧ B ⇒ C – am aplicat eliminarea implicaţiei şi regula lui de
Morsgan. Această din urmă formă este naturală, motiv pentru care clauzele Horn
se regăsesc atât de uşor ı̂n bazele de cunoştinţe. Ele sunt element fundamental al
domeniului numit Programare logică.
Dacă o clauză Horn nu conţine nici un literal pozitiv (de exemplu: ¬A∨¬B), atunci
se poate scrie echivalent ¬A ∨ ¬B ∨ F als şi apoi ca A ∧ B ⇒ F als.
2. Inferenţele cu clauze Horn pot fi făcute cu doi algoritmi de de inferenţă care apar
ca naturali, ı̂nlănţuirea ı̂nainte şi ı̂nlănţuirea ı̂napoi.
3. Algoritmii de deducţie care folosesc clauze Horn sunt liniari ı̂n dimensiunea BC.
premisele unei implicaţii sunt cunoscute ca adevărate, atunci concluzia implicaţiei este
adevărată şi este adăugată la baza de cunoştinţe. Procedeul se repetă până când fie se
deduce q, fie nu se mai poate adăunga niciun simbol propoziţional nou la BC. Algoritmul
este dat ı̂n figura 5.5.
Cel mai bun mod de ı̂nţelegere a algoritmului de ı̂nlănţuire ı̂nainte este pe baza unui
exemplu. Să presupunem că avem baza de cunoştinţe exprimată sub formă de clauze
Horn:
P ⇒Q
L∧M ⇒P
B∧L⇒M
A∧P ⇒L
A∧B ⇒L
A
B
82 CAPITOLUL 5. AGENŢI LOGICI
Acestei baze de cunoştinţe i se poate asocia un graf de tipul şi—sau, construit astfel:
nodurile lui sunt simbolurile propoziţionale, arcele de graf unite reprezintă operatorul
∧, ı̂n timp ce arcele neunite corespund disjuncţiei. Figura 5.6 reprezintă graful şi—sau
asociat bazei de cunoştinţe date, ı̂mpreună cu evoluţia cunoştinţelor. În dreptul fiecărui
arc de joncţiune de arce se află numărul de premise care mai trebuie mai demonstrate
pentru a se putea deduce concluzia aflată la capătul arcului.
Se poate vedea că ı̂nlănţuirea ı̂nainte este temeinică, deoarece reprezintă aplicarea
repetată a regulii Modus Ponens. Este de asemenea şi un algoritm complet (a se vedea
[1]).
Înlănţuirea ı̂nainte este un exemplu de raţionament codus de date, adică al unui
raţionament ı̂n care demonstrarea unei concluzii se face pornind dinspre ipoteze. Spre
deosebire de regula rezoluţiei, poate fi folosită pentru a genera o listă de concluzii care
pot fi deduse plecând de la o bază de cunoştinţe.
Înlănţuirea ı̂napoi porneşte dinspre interogare spre baza de cunoştinţe. Dacă se cere
a se demonstra că Q este adevărată, se verifică prima dată dacă se ştie deja valoarea de
adevăr a lui Q; dacă nu se cunoaşte, atunci se găsesc toate implicaţiile care ı̂l produc pe
Q. Dacă se poate demonstra că premisele unei astfel de implicaţii sunt toate adevărate,
atunci şi Q este adevărată. Procesul de raţionament este unul direcţionat de scop. O
ilustrare a procesului este dată ı̂n figura 5.8.
De multe ori, costul unei ı̂nlănţuiri ı̂napoi este mult mai mic decât dimensiunea bazei
de cunoştinţe (deşi o implementare eficientă are costul liniar, ı̂n cel mai defavorabil caz).
Q Q
1 1
P P
2 2
M M
2 2
L L
2 2 1 1
A B A B
Q Q
1 1
P P
2 1
M M
1 0
L L
1 0 1 0
A B A B
Q Q
1 0
P P
0 0
M M
0 0
L L
1 0 0 0
A B A B
• terminare rapidă: algoritmul detectează dacă o propoziţie este adevărată sau falsă,
chiar dacă modelul este parţial completat. O clauză este adevărată dacă un literal
este adevărat, chiar dacă ceilalţi literali nu au valoare de adevăr fixată. Similar, o
conjunţie de clauze este falsă dacă o clauză este falsă, indiferent de valorile celorlalte
clauze.
• Euristica simbolurilor pure: un simbol este pur dacă apare cu acelaşi semn ı̂n fiecare
clauză. Este uşor de văzut că dacă o propoziţie are un model, atunci acesta are
proprietatea că simbolul pur are valoarea adevărat.
• Strategia clauzei unitate: o clauză unitate este o clauză cu un singur literal. În
contextul algoritmului, ı̂nseamnă şi o clauză unde toţi literalii, mai puţin unul, au
valoare fals. Strategia clauzei unitate asignează valori unor asemenea simboluri
ı̂nainte de a se apuca de altele. O astfel de setare de variabilă poate de asemenea să
ducă la alte clauze unitate.
5.10. INFERENŢĂ PROPOZIŢIONALĂ EFECTIVĂ 85
Q Q
P P
M M
L L
A B A B
Q Q
P P
M M
L L
A B A B
Q Q
P P
M M
L L
A B A B
Q Q
P P
M M
L L
A B A B
Figura 5.10: Algoritmul Walksat pentru verificarea satisfiabilităţii unui set de clauze.
Dacă algoritmul returnează un model, atunci acest model satisface clauzele. Dacă ı̂nsă
se returnează eşuare, atunci nu se poate şti sigur dacă expresia este nesatisfiabilă sau dacă
ar trebui ca algoritmul să fie lăsat să ruleze mai mult (dar nu se ştie cât de mult).
88 CAPITOLUL 5. AGENŢI LOGICI
Capitolul 6
6.1 Introducere
Logica propoziţională se dovedeşte a fi un limbaj neadecvat pentru reprezentarea
cunoştinţelor dintr-un mediu complex, ı̂ntr–un mod concis. De exemplu, pentru a spune
că ı̂ntr-o cameră vecină (pe verticală sau orizontală) cu cea de coordonate [1, 1] ı̂n care
se simte briză de aer există o groapă, scriem astfel:
şi ceva asemănător pentru fiecare cameră din joc. Limbajul natural este mult mai concis
(comparaţi “camerele vecine cu o cameră ı̂n care se simte curent de aer conţin o groapă”
cu cele n2 propoziţii care trebuie scris ı̂n logica propoziţională pentru a exprima acelaşi
lucru). Pe de altă parte, limbajul natural poate fi şi imprecis. Ne dorim deci o variantă
de limbaj care să fie concis, exact ı̂n exprimare şi să permită operarea uşoară.
Alte aspecte pe care le dorim de la un limbaj de reprezentare a cunoştinţelor sunt:
Mai mult, prin compararea cu ceea ce ne pune la dispoziţie limbajul natural, ne dăm
seama că dorim să putem lucra cu:
89
90 CAPITOLUL 6. LOGICA DE ORDINUL ÎNTÂI
• relaţii ı̂ntre obiecte: relaţii unare (ı̂nalt, roşu, prim) sau n-are: mai mare decât,
frate cu, compus din;
• funcţii: aplicate pe unul sau mai multe obiecte, duce la obţinerea altor obiecte: tatăl
lui, succesorul lui, etc.
Limbajul logicii de ordinul ı̂ntâi tratează satisfăcător toate aceste aspecte.
Cea mai mare diferenţă ı̂ntre logica propoziţională şi logica predicatelor este că ı̂n
prima se exprimă fapte care au sau nu loc. Fiecare fapt are una din două valori: adevărat
sau fals. Logica predicatelor ı̂nsă se referă la o mulţime de obiecte ı̂ntre care există sau
nu relaţii.
• variabile: x, y, etc
• conective: ¬, ∧, ∨, ⇒, ⇔
• egalitatea: =
• cuantificatori: ∀, ∃
Semantica trebuie să lege enunţurile de modele pentru a se putea determina valoarea
de adevăr. Avem deci nevoie de o interpretare care să specifice exact care obiecte, relaţii şi
funcţii sunt legate de ce simboluri asociate simbolurilor de constante, predicate şi funcţii.
Una din interpretările posibile, care este adecvată exemplului nostru este:
Există şi alte interpretări care se pot face, de exemplu se poate lega constanta Richard
de persoana John sau de coroană; sau se poate ca diferite nume să se refere la acelaşi
obiect.
Valoarea de adevăr a fiecărui enunţ se defineşte ı̂n raport cu un model şi o interpre-
tare pentru simbolurile din enunţ. Ca atare, deducerea, validitatea, satisfiabilitatea sunt
definite relativ la toate modelele si toate interpretările posibile. Subliniem că modelele
pot fi infinite, de exemplu dacă se referă la mulţimea numerelor naturale.
6.2.3 Termeni
Un termen este o expresie logică ce se referă la un obiect – constante, funcţii, relaţii.
Un simbol pentru funcţii este util pentru a pune ı̂n legătură obiecte (de exemplu constanta
John cu constanta piciorul stâng al lui John), cu efect benefic asupra reducerii numărului
de simboluri folosit pentru constante. Este un alt mod de a denumi obiecte, plecând de
la altele.
6.2.6 Cuantificatori
Cuantificatorii permit exprimarea de proprietăţi pentru colecţii de obiecte, ı̂n loc de a
le enumera pe toate (de aici şi dorita concizie a limbajului). Cuantificatorii sunt ı̂nsoţiti
6.3. PROCESUL DE MANAGEMENT AL CUNOŞTINŢELOR 93
de o variabilă care poate servi ca argument pentru funcţii şi relaţii. Un termen care nu
are variabile se numeşte termen legat. Enunţul ∀x P (x) arată că pentru orice obiect x, P
este adevărată.
Să consideră de exemplu propoziţia ∀x Rege(x) ⇒ P ersoana(x). Pentru a putea
spune că este adevărată, toate cele cinci propoziţii de mai jos ar trebui să fie adevărate:
5. Codificarea unei descrieri pentru o problemă concretă. Constă ı̂n scrierea enunţurilor
atomice despre instanţe ale conceptelor care sunt deja parte a ontologiei. Este
echivalentul furnizării datelor pentru programele din limbajele procedurale.
Se aplică instanc tierea universală primului enunţ folosind toate substituirile de variabile
cu termeni legaţi din vocabularul BC, deci {x/John} şi {x/Richard} şi obţinem:
Baza de cunoştinţe rezultată (se adaugă, evident, şi ultimele 3 propoziţii din BC iniţială)
este ı̂n formă propoziţională, dacă substituim enunţurile cu valori legate – Rege(John),
Lacom(John), etc – cu simboluri propoziţionale – α, β, etc. Se poate aplica oricare din
algoritmii din capitolul precedent şi se obţin concluzii – Rau(John).
Există ı̂nsă o problemă: daca BC include un simbol ataşat unei funcţii (de exemplu
TatalLui), atunci prin propoziţionalizare se ajunge la o BC infinită, deoarece putem sub-
stitui pe x cu John, T atalLui(John), T atalLui(T atalLui(John)), şi tot aşa la infinit.
Există ı̂nsă un răspuns, datorat lui Herbrand care spune că dacă un enunţ este implicat
de către baza de cunoştinţe originală, exprimată sub formă de predicate, atunci există
o demonstraţie care pleacă de la un set finit de enunţuri ı̂n formă propoziţională, prin
care se poate deduce enunţul respectiv. Se poate genera o astfel de demonstraţie plecând
de la ı̂nlocuirea lui x cu John şi Richard (deci adâncime 0), apoi cu T atalLui(John) şi
T atalLui(Richard) (adâncime 1) şi cu termeni de adâncime din ce ı̂n ce mai mare.
Ce se ı̂ntâmplă dacă enunţul dat ca posibilă concluzie nu este deductibil din baza
de cunoştinţe? Teorema lui Herbrand (sau alte rezultate) nu spun nimic ı̂n acest sens.
Procedura descrisă mai sus va genera termeni cu adâncime din ce ı̂n ce mai mare, dar
nefiind o limitare dată, procedeul se va repeta la nesfârşit. Altfel zis, problema implicaţiei
ı̂n logica de ordinul ı̂ntâi este semidecidabilă – adică există algoritmi care răspund pozitiv
pentru un enunţ care este deductibil din BC, dar nu există algoritm care de asemenea să
răspundă negativ la fiecare enunţ nedeductibil.
Bibliografie
[1] Artificial Intelligence. A Modern Approach, Prentice Hall, Stuart Russel, Peter Norvig,
2nd edition, 2003
[3] Pattern Classification, ediţia a doua, Ed. Wiley-Interscience, Richard O. Duda, Peter
E. Hart, David G. Stork, 2000
[6] Neural Networks. A comprehensive foundation, Ed. Prentice Hall, Simon Haykin, 1999
97