Sunteți pe pagina 1din 18

UNIVERSITATEA DIN PITETI FACULTATEA DE MATEMATIC-INFORMATIC SPECIALIZAREA: INFORMATIC

INTELIGEN ARTIFICIAL
Rezolvarea problemelor n inteligena artificial

Coordonator: Lector univ. dr. Maria Miroiu

Student: Ionu Alexandru Chivu

Rezolvarea problemelor n inteligena artificial

Inteligena artificial: o ncercare de definire


Ce este inteligena artificial? Exist numeroase definiii sau ncercri de a defini inteligena artificial. Multitudinea acestor definiii provine tocmai din faptul c domeniul, fiind legat de nsi esena naturii umane, este deosebit de provocator. O ncercare de definire a inteligenei artificiale ar trebui s porneasca de la definiia inteligenei, definiie departe de a fi banal de formulat. Multe din abordrile caracterizrii domeniului au eludat sau au atins doar parial acest aspect, altele l-au considerat implicit. Cteva definiii ale inteligenei artificiale, dintre cele mai cunoscute i relevante, sunt date n continuare: Inteligena artificial este domeniul tiinei calculatoarelor care se ocup de studiul i crearea sistemelor de calcul i a programelor care prezint o forma de inteligen: sisteme care nva noi concepte, care pot raiona i deduce concepte utile ntr-un domeniu al lumii inconjuratoare, sisteme care pot nelege limbajul natural sau percepe i nelege un peisaj, ntr-un cuvnt sisteme care necesit capacitai inteligente specifice omului. Inteligena artificial este studiul ideilor care permit calculatoarelor s fie inteligente. Inteligena artificial este studiul facultailor mentale pe baza modelelor computaionale. Inteligena artificial se distinge prin subiectele pe care le trateaz, nu prin istorie sau metode specifice. Subiectul tratat de inteligena artificial este mintea, considerat ca un sistem de prelucrare a informaiei. Un program inteligent este un program care manifest o comportare similar cu aceea a omului cnd este confruntat cu o problem similar. Nu este necesar ca

programul s rezolve sau s ncerce s rezolve problema n acelai mod n care ar rezolva-o oamenii. Inteligena artificial este studiul procesului prin care calculatoarele pot fi instruite s faca lucruri care, pentru moment, sunt facute mai bine de oameni. Se poate observa din aceste definiii c anumite curente de opinii privesc inteligena artificial ca o modalitate de cercetare, descoperire i simulare (copiere) a modului de funcionare a inteligenei umane. Aceast perspectiv a condus la numeroase cercetari n inteligena artificial i la dezvoltarea unor noi domenii cum ar fi tiina cunoaterii, domeniu studiat de psihologi, lingviti, informaticieni, filozofi, i domeniul reelelor neuronale, numit i inteligen artificial la nivel subsimbolic. O a doua perspectiv asupra inteligenei artificiale consider domeniul dintr-un punct de vedere pragmatic. Nu conteaz dac inteligena artificial utilizeaz modelele i mecanismele comportamentului inteligent uman, important este capacitatea sistemelor de calcul de a rezolva aceleai probleme cu performane similare cu cele ale oamenilor. Textul de fa se orienteaz preponderent spre aceast opinie asupra inteligenei artificiale.

Natura problemelor de inteligen artificial


Majoritatea cercetrilor n domeniul inteligenei artificiale efectuate la nceputul apariiei disciplinei s-au orientat spre rezolvarea unor probleme uor formalizabile dar considerate ca necesitnd un comportament inteligent: demonstrarea teoremelor i jocurile. Programul "The Logic Theorist" al lui A. Newell, J. Shaw i H. Simon [1963] putea s demonstreze mai multe teoreme din primul capitol al lucrrii "Principia Matematica" a lui Whitehead i Russell. Programul care juca ah al lui A. Samuel [1967] i mbuntea performanele de joc dup fiecare partid jucat. Problemele rezolvate de aceste programe au o caracteristic comun: ele sunt probleme grele, deci NP-complete. Orict de performant ar fi un calculator, acesta nu poate rezolva o problem cu un algoritm de complexitate timp O(eN), pentru o valoare semnificativ a dimensiunii N a intrrii, ntr-un interval de timp rezonabil. Cercetrile n inteligena artificial s-au orientat tocmai spre ncercarea de a reduce explozia combinaional implicat de cutarea soluiei acestui tip de probleme. Una din contribuiile mari aduse de inteligena artificial tiinei calculatoarelor este utilizarea euristicilor n rezolvarea problemelor grele,

transformnd astfel probleme inabordabile din punct de vedere al timpului de rezolvare n probleme posibil de rezolvat n numeroase cazuri. ncercarea de a simula comportamentul inteligent uman a dus la investigarea unor alte tipuri de probleme, probleme care implic un grad nalt de expertiz uman, cum ar fi diagnosticul medical, managementul, proiectarea i rezolvarea problemelor inginereti generale. Aceste probleme necesit modelarea unor cantiti mari de informaii, informaii greu de formalizat, cum ar fi experiena i intuiia. Sistemele expert, rezultat direct al acestor cercetri, sunt acum mult utilizate n domeniile amintite. O alt direcie a cercetrilor de inteligen artificial a fost aceea a rezolvarii problemelor banale, cotidiene, care necesit cunotine de bun sim. Aceste probleme includ raionamentul despre obiecte fizice i relaiile ntre ele, i raionamentul despre aciuni i consecinele acestora. Oricine tie, de exemplu, c un obiect nu poate s fie simultan n dou locuri diferite sau c nu trebuie s dea drumul unui pahar din mna deoarece poate s cad i s se sparg. Aceste comportamente pot fi greu caracterizate ca necesitnd inteligen i, totui, ele sunt cele mai greu de modelat ntr-un program. Cunotinele de bun sim sunt la ndemna oricrui om, dar ele trebuie reprezentate explicit ntr-un program, iar volumul lor este impresionant. Surprinztor, cercetrile de inteligena artificial au avut rezultate cu mult mai bune n domenii ca rezolvarea problemelor formale dificile cum ar fi jocurile, demonstrarea teoremelor, sau a problemelor care necesit expertiz uman ntr-un anumit domeniu, dect n domeniile care necesit cunotine de bun sim. S-a reuit construirea unui program care s demonstreze teoreme matematice complicate i care s descopere chiar concepte matematice noi, dar nu s-a reuit construirea unui program care s tie tot ceea ce tie un copil de doi ani! Reprezentarea cunotinelor Sisteme expert Achiziia cunotinelor i nvare Demonstrarea automat a teoremelor Teoria jocurilor Planificare automat

Prelucrarea limbajului natural

Percepie: nelegerea imaginilor i a vorbirii Limbaje i medii de dezvoltare pentru inteligena artificial

Robotica

Structura sistemelor de inteligen artificial


Un sistem de inteligen artificial, sau sistem bazat pe cunotine, este format din dou componente fundamentale: (1) baza de cunotine care contine cunotinele specifice domeniului problemei i, eventual, cunotine generale, i motorul de inferen care utilizeaz cunotinele pentru rezolvarea problemei.

(2)

Din punct de vedere al inteligenei artificiale cunotinele pot fi vzute ca mulimea de fapte i principii acumulate de oameni sau, mai general, nivelul cunoaterii umane la un anumit moment dat. Cunotinele includ idei, concepte, teorii, abstractizri, limbaje, reguli, locuri, obiceiuri. Cunotinele dintr-un sistem inteligent, care se refer de obicei la un anumit domeniu, descriu universul problemei sau al clasei de probleme de rezolvat la nivel simbolic i formeaz coninutul bazei de cunotine. Modul de reprezentare i organizare a cunotinelor este un element esenial al oricrui sistem inteligent. Cunotinele dintr-un sistem bazat pe cunotine trebuie s posede urmtoarele caracteristici: Cunotinele trebuie s fie generale. Situaiile care prezint proprieti comune trebuie s poata fi reprezentate prin structuri simbolice comune i nu punctual, fiecare n parte. Dac cunotinele nu au aceast proprietate cantitatea de memorie necesar descrierii acestora poate deveni imens. Cunotinele unui sistem inteligent sunt n continu schimbare deoarece ele reflecta schimbrile din lumea nconjurtoare. Reprezentarea cunotinelor n sistem trebuie s poata modela uor aceste schimbri i s permit dezvoltarea incremental a bazei de cunotine. Reprezentarea cunotinelor trebuie s faciliteze achiziia lor. Multe din cunotinele necesare unui sistem inteligent sunt cunotine greu sau imposibil de formalizat i ele trebuie obinute de la oamenii care le posed. O reprezentare poate facilita sau ngreuna acest proces.

Cunotinele trebuie s poat fi utilizate n orice instan a problemei de rezolvat, chiar dac sunt incomplete sau parial incorecte. Cunotinele ntr-un sistem inteligent trebuie s fie organizate ntr-o structur care s corespund modului n care acestea vor fi utilizate. Cunotinele trebuie s fie astfel reprezentate, organizate i utilizate ncit s permit transparena sistemului. Expertul sau utilizatorul trebuie s poat inspecta cunotinele utilizate n rezolvarea unei probleme i inferenele pe baza crora problema a fost rezolvat. Aceste caracteristici pun n eviden diferena existent ntre cunotine i date. Feigenbaum i McCorduck [1983] ilustreaz aceast diferen prin urmatorul exemplu. Un medic care trateaz un pacient folosete cunotine i date. Datele sunt reprezentate de fia pacientului: simptome, boli anterioare, tratament prescris, reacie la tratament, etc. Cunotinele utilizate n tratarea pacientului reprezint tot ceea ce medicul a nvat n facultate i n decursul ntregii lui cariere prin practic, studiu, experien, n legtura cu modul de vindecare a bolii. Aceste cunotine se refer la fapte, teorii, tratament i, cel mai important, la cunotine euristice. Astfel, cunotinele necesit i includ utilizarea datelor, dar sunt mai mult dect acestea. Una dintre cele mai dificile probleme ale reprezentrii cunotinelor ntr-un sistem inteligent este reprezentarea cunotinelor euristice. Cunotinele euristice reprezint o form particular de cunotine utilizat de oameni pentru a rezolva probleme complexe. Ele reprezint cunotinele utilizate pentru a judeca corect, pentru a lua o decizie, pentru a avea un comportament dupa o anumit strategie sau a utiliza trucuri sau reguli de bun sim. Acest tip de cunotine nu este nici formalizat, nici demonstrat a fi efectiv i cteodat nici corect, dar este frecvent utilizat de oameni n numeroase situaii. Judea Pearl [1984], n lucrarea sa "Heuristics. Intelligent Search Strategies for Computer Problem Solving", definete cunotinele euristice astfel: "Euristicile sunt criterii, metode sau principii pentru a alege ntre diverse alternative de aciune pe aceea care promite a fi cea mai eficient n realizarea unui scop. Ele reprezint compromisuri ntre doua cerine: necesitatea de a lucra cu criterii simple i, n acelai timp, dorina de a vedea ca aceste criterii fac o selecie corect ntre alternativele bune i rele." Utilizarea cunotinelor n sistemele bazate pe cunotine necesita o forma de raionament, decizii i aciuni n scopul obinerii de noi cunotine care n final vor

reprezenta soluia problemei de rezolvat. Aceste aciuni se fac cu ajutorul metodei de inferen. Definiie. Se numete metod de inferen, sau pe scurt inferen, procedura de obinere la un moment dat, a noi elemente (fapte) implicate n mod direct de elementele particulare reprezentrii. Fiecare model de reprezentare a cunotinelor are metode de inferen specifice. Pentru a putea ajunge la soluia unei probleme este necesar, de cele mai multe ori, o aplicare repetat a metodei de inferen. Definiie . Se numete strategie de control procesul de aplicare repetat a metodei de inferen pentru a ajunge la soluie, de preferin ct mai repede. Metoda de inferen mpreun cu strategia de control formeaz nucleul motorului de inferen al unui sistem bazat pe cunotine. Datorit descoperirii i utilizrii unor strategii de control adecvate, programele de inteligen artificial au reuit s rezolve probleme grele, deci NP-complete, ntr-un timp acceptabil pentru dimensiuni semnificative ale intrrii. Definiie . Inferena este o form de raionament prin care se trece de la un enun la altul n mod deductiv sau inductiv direct, caz n care se numete inferen imediat, sau indirect, caz n care se numeste inferen indirect. Definiie . Deducia este o form fundamental de raionament n planul conceptelor n care concluzia decurge cu necesitate din premise. Exemplul tipic de deducie este silogismul. Definiie . Se numete silogism un tip de raionament deductiv alctuit din trei judeci: (1) premis major sau termen major care conine predicatul concluziei, (2) premis minor sau termen minor care conine subiectul concluziei, i (3) concluzia, derivat cu necesitate din primele dou. Legtura ntre (1) i (2) este mijlocit de termenul mediu care figureaz n ambele premise dar nu i n concluzie.

Termenul de silogism mpreun cu definiia de mai sus au fost date de Aristotel, acesta fiind considerat fondatorul teoriei deduciei. Ulterior deducia a fost dezvoltat de Descartes, Leibniz i de logica simbolic, n care silogismul ia forma regulii de inferen Modus Ponens. Definiie . Inducia este o form de raionament care trece de la particular la general, de la fapte la concepte. Exist dou tipuri de inducie: inducia completa, dac se enumer toate cazurile existente, i inducia incomplet, dac se enumer numai o parte din cazurile existente.

Tehnici de inteligen artificial


Problemele de inteligen artificial fac parte din diverse domenii i par s nu aib n comun alt caracteristic dect aceea c sunt dificil de rezolvat. Exist nsa tehnici specifice rezolvrii problemelor n inteligena artificial. Caracteristicile cunotinelor impun necesitatea gsirii unor modaliti adecvate de reprezentare i prelucrare a cunotinelor n sistem. n aceast seciune se discut trei rezolvri ale unei probleme, rezolvrile fiind prezentate n ordine cresctoare a urmtoarelor caracteristici: generalitate claritatea exprimrii cunotinelor extensibilitatea abordrii. n acest mod, cea de a treia rezolvare ajunge s devin ceea ce se inelege de obicei printr-o tehnic de rezolvare a problemelor n inteligena artificial. Se consider urmtorul joc, cunoscut sub numele de "Tic-Tac-Toe": pe o tabl de trei linii i trei coloane, care conine deci nou ptrate, doi juctori pot plasa X sau O. Ctig juctorul care reuete s formeze o secven de trei simboluri (X, respectiv O) pe orizontal, vertical sau diagonal. Se cere s se construiasc schema unui program care s simuleze acest joc, program care s poata juca pe postul juctorului X sau pe postul juctorului O i, evident, care s ncerce s ctige jocul. Cele trei rezolvri ale problemei sunt descrise n termenii reprezentrii universului problemei i ai algoritmului utilizat.

Rezolvarea 1 Se folosesc urmtoarele structuri de date: Tabla este un vector de 9 elemente care reprezint tabla de joc, tabla fiind liniarizat pe linii. Valorile elementelor acestui vector sunt 0 pentru spaiu liber (blanc), 1 pentru X si 2 pentru O. Tabela_de_mutari este un vector de 19.683 elemente (39), fiecare element al acestui vector fiind la rndul lui un vector de 9 elemente. Fiecrei poziii posibile de pe tabla de joc i corespunde o intrare n acest tabel de mutri care conine noua poziie obinut prin executarea mutrii respective. Algoritmul de rezolvare este prezentat n continuare. Algoritm: 1. 2. Problema "Tic-Tac-Toe". Rezolvarea 1

Iniializeaz Tabla cu blanc i Tabela_de_mutari cu toate poziiile posibile ct timp nici un juctor nu a ctigat execut

2.1 Consider Tabla ca un numr ternar (n baza 3) i convertete-l n baza 10 obtinnd M 2.2 2.3 2.4 2.5 3. Sfrit. Acest algoritm este foarte eficient din punct de vedere al timpului i, teoretic, ar putea s joace un joc optim de "Tic-Tac-Toe." Algoritmul prezint ns mai multe dezavantaje. n primul rnd aceast abordare necesit un spaiu foarte mare pentru memorarea tabelei de mutri care specific micrile corecte asociate fiecrei configuraii a tablei. n al doilea rnd este greu s se stabileasc i s se introduc valorile corecte n tabela de mutri. n final, dac se dorete extinderea jocului pentru un caz mai general, de exemplu cazul n trei dimensiuni, trebuie refcut toat tabela de mutri de la nceput. n particular, pentru cazul jocului n trei dimensiuni aceast abordare nu mai funcioneaz Utilizeaz M ca index n Tabela_de_mutari i obine

PozNoua Tabela_de_ mutari[M]


Tabla PozNoua
dac PozNoua este poziie ctigtoare atunci ntrerupe ciclul Citete mutare adversar i modific Tabla n consecin Anun juctorul ctigtor

deloc deoarece ar trebui memorate 327 poziii n tabela de mutri. Tehnica folosit n aceast rezolvare nu respect nici una din cerinele unei tehnici de inteligen artificial. Rezolvarea 2 Se folosesc urmtoarele structuri de date: Tabla este un vector similar cu cel prezentat n Rezolvarea 1, dar folosete urmtoarea codificare a simbolurilor de pe tabla: 2 pentru blanc, 3 pentru X i 5 pentru O. Mutare este o variabil cu valori ntregi care indic numrul mutrii ce urmeaz a se face. Valoarea 1 indic prima mutare, iar valoarea 9 indic ultima mutare. Algoritmul de rezolvare are o strategie predefinit pentru micrile pe care trebuie s le execute. Algoritmul execut numai micrile impare dac joac pe postul juctorului X sau micrile pare dac joac pe postul juctorului O. Se folosesc trei subprograme: Muta(N) efectueaz o mutare in ptratul N, PosCastig(P) evalueaz posibilitatea de ctig a jucatorului P cu urmtoarea micare n funcie de configuraia curent a tablei i Scop implementeaz o euristic de alegere a unui ptrat n cazul n care exist mai multe miscri posibile care nu pericliteaz ctigul juctorului curent. Subprogramul PosCastig(P) trebuie s verifice pe rnd fiecare linie, coloan i diagonal a tablei pentru a investiga posibilitatea de ctig a lui P n urmtoarea micare. Datorit modului n care sunt codificate simbolurile de pe tabl se poate testa posibilitatea de ctig a unei linii, coloane, respectiv diagonale prin inmulirea celor trei valori din secvena. Dac produsul este 27 (3 3 3) atunci juctorul X poate s ctige. Dac produsul este 50 (5 5 2) atunci juctorul O poate s ctige. n momentul n care se gasete o linie, coloan sau diagonal din care se poate ctiga, se caut poziia liber din aceasta i se intoarce ca valoare a subprogramului PosCastig(P) aceast poziie. Algoritm: 1. 2. 3. Problema "Tic-Tac-Toe". Rezolvarea 2

Iniializeaz Tabla cu blanc

Mutare 1
ct timp nici un juctor nu a ctigat execut 3.1 alege Mutare dintre Mutare = 1: Muta(1) Mutare = 2: dac Tabla[5] = 2

atunci Muta(5) altfel Muta(1) Mutare = 3: dac Tabla[9] = 2 atunci Muta(9) altfel Muta(3) Mutare = 4: dac PosCastg(X 0 ) atunci Muta(PosCastig(X)) /* blocheaz ctig adversar */ altfel Muta(Scop) Mutare = 5: daca PosCastg(X 0 ) atunci (i) (ii)
Muta(PosCastig(X)) /* deci ctiga X */

ntrerupe ciclul

altfel daca PosCastig(O) 0 atunci Muta(PosCastig(O)) /* blocheaz ctig adversar */ altfel dac Tabla[7] = 2 atunci Muta(7) altfel Muta(3) Mutare = 6: dac PosCastig(O) 0 atunci (i) (ii)
Muta(PosCastig(O)) /* deci ctig O */

ntrerupe ciclul

altfel dac PosCastg(X 0 ) atunci Muta(PosCistig(X)) /* blocheaz ctig adversar */ altfel Muta(Scop) Mutare = 7: dac PosCastg(X 0 ) atunci (i) (ii)
Muta(PosCastig(X)) /* deci ctig X */

ntrerupe ciclul

altfel dac PosCastig(O) 0 atunci Muta(PosCastig(O)) altfel mut n orice ptrat liber Mutare = 8: daca PosCastig(O) 0 atunci (i) (ii)
Muta(PosCastig(O)) /* deci ctiga O */

ntrerupe ciclul

altfel dac PosCastg(X 0 ) atunci Muta(PosCastig(X)) altfel mut n orice ptrat liber Mutare = 9: dac PosCastig(O) 0 atunci (i) (ii)
Muta(PosCastig(X)) /* deci ctiga X */

/* identic cu Mutare 7 */

ntrerupe ciclul

altfel dac PosCastig(O) 0 atunci Muta(PosCastig(O)) altfel mut n orice ptrat liber 3.2 Sfrit. Muta(N) 1. 2. dac Mutare are valoare impar atunci Tabla[N] 3 dac Mutare are valoare par atunci Tabla[N] 5 sfrit. PosCastig(P) 1. 2. dac juctorul P nu poate ctiga n mutarea urmtoare atunci ntoarce 0 ntoarce poziia ptratului cu micare ctigtoare Sfrit.

Mutare Mutare+1

Scop 1. dac ptratul din mijloc este gol atunci intoarce 5 2. intoarce poziia unui ptrat care nu se afl n coluri, i.e. pozitia 2,4,6,8, care este liber Sfrit. Din punct de vedere al timpului acest algoritm nu este la fel de eficient ca primul deoarece trebuie s verifice mai multe condiii nainte de a executa o micare, dar este mai eficient din punct de vedere al spaiului. Algoritmul prezint avantajul utilizrii unei strategii relativ explicite care poate fi nteleas i modificat mult mai uor dect n cazul primei rezolvri. Cu toate acestea strategia general este stabilit de programator apriori, este codificat direct n program i nu prezint generalitatea necesar. Dac se dorete extinderea jocului, de exemplu la "Tic-Tac-Toe" n trei dimensiuni, ntregul algoritm trebuie schimbat. Urmtoarea rezolvare va elimina aceste inconveniente. Rezolvarea 3 Se folosesc urmtoarele structuri de date: Tabla este un vector similar cu cel prezentat n Rezolvarea 2. Urm este o list cu toate configuraiile urmtoare posibile care se obin din configuraia curent a tablei prin execuia mutrilor permise din configuraia curent. Merit este un numr ntreg care reprezint o estimare a posibilitaii de ctig din configuraia curent a tablei prin una sau mai multe mutri. Deci meritul unei configuraii reprezint ct de promitoare este configuraia curent pentru ctig. Algoritm: 1. 2. Problema "Tic-Tac-Toe". Rezolvarea 3 /* ptratul cu indicele 5 */

Iniializeaz Tabla cu blanc ct timp nici un juctor nu a ctigat execut 2.1 2.2

Urm { }
pentru fiecare mutare posibil din configuraia curent C execut 2.2.1 Determin configuraia urmtoare C1 a tablei 2.2.2 Urm Urm C1

2.3

pentru fiecare configuraie C1 din lista Urm execut 2.3.1 Merit DetMerit(C1 ) 2.3.2 Reine n MeritMaxim valoarea maxim a variabilei Merit

2.4 PozNoua 2.5 2.6 sfrsit. DetMerit(C1) 1.

Execut mutarea asociata configuraiei cu meritul MeritMaxim i obine dac PozNoua este poziie ctigtoare atunci ntrerupe ciclul Citete mutare adversar i modific Tabla n consecin

dac configuraia C1 este ctigtoare atunci ntoarce valoarea maxim predefinit a meritului Consider toate mutarile posibile ale adversarului din configuraia C1 Calculeaz meritul Mi al fiecarei configuraii rezultate prin aceste mutri

2. 3.

4. Alege configuraia cu meritul cel mai mic, Mmin, considernd c adversarul va face cea mai defavorabil micare pentru opozant 5. ntoarce Mmin Sfrit. Algoritmul poate inspecta n avans mai multe secvene de micri pentru a determina secvena care va duce la ctig i, deci, a obine o estimare mai bun a configuraiilor urmtoare. Algoritmul ncearca s maximizeze ansele de a ctiga presupunnd c adversarul va ncerca s minimizeze aceste anse pentru oponent. Din acest motiv algoritmul este cunoscut sub numele de strategia "MinMax" i este utilizat frecvent n implementarea problemelor de jocuri n inteligenta artificial. n cazul unor jocuri mai complicate dect "Tic-Tac-Toe", formularea subprogramului DetMerit(C1) din algoritmul de mai sus poate implica un apel recursiv infinit n pasul 3. n realitate se introduce o limit a micrilor urmtoare investigate, pltind nsa preul scderii acurateei estimrii meritului. Rezolvarea 3 necesit un timp de calcul mai mare dect primele dou rezolvri deoarece trebuie s inspecteze naintea fiecrei mutri o parte din arborele de configuraii urmtoare posibile. Pentru probleme simple, cum ar fi cea discutat, primele dou

abordri sunt evident mai eficiente. Ultima rezolvare este superioara nsa celorlalte dou din urmtoarele motive: (1) poate fi extins la jocuri mai complicate dect "Tic-Tac-Toe", jocuri pentru care enumerarea exhaustiv a tuturor posibilitilor de mutare este imposibil, strategia de joc poate fi mbuntit sau schimbat prin modul de calcul al meritului.

(2)

Aceast ultim abordare este un exemplu tipic de tehnic de inteligen artificial. Ea ilustreaz trei aspecte caracteristice ale rezolvrii problemelor n inteligena artificial: obinerea soluiei prin cutare, utilizarea cunostinelor specifice domeniului i abstractizarea, i.e. separarea caracteristicilor importante ale problemei de aspectele de detaliu.

Implementare Tic-Tac-Toe n limbajul LISP

Common Lisp: Common Lisp (CL) este un limbaj de programare de nivel nalt, a crei
sintax urmrete o structur simpl, asemntoare unei liste. n acest context, o list este considerat o secven de articole. CL accept o mare varietate de structuri de date, flexibile i eficiente. ntr-un anumit sens, Lisp acioneaz similar conceptului de main virtual Java, dar ntr-un mod mai natural. (defvar board (make-array 9)) (defvar magic-board (make-array 9 :initial-contents '(2 7 6 9 5 1 4 3 8))) (defvar move 0) (defvar winner nil) (defmacro until (test &body body) `(do () (,test) ,@body))

;;Iniialeaz table cu _ pentru marcarea spaiilor goale (defun init-board () (loop for i from 0 to 8 do (setf (aref board i) "_"))) ;;Afieaz tabla (defun print-board () (format t "~%") (loop for i from 0 to 8 do (format t "~a " (aref board i)) (if (or (= i 2) (= i 5) ) (if (= i 8) (format t "~%") (format t "~%----------~%")) (if (not (= i 8)) (format t "| "))))) ;;Cere o mutare utilizatorului, trebuie sa fie una valid (defun get-move () (format t "~%Please enter a move (0-8): ") (let ((mov -1)) (until (and (>= mov 0) (<= mov 8) (valid-move mov)) (setq mov (read))) (return-from get-move mov))) ;;Verific daca mutarea este valid (defun valid-move (x) (cond ((string= (aref board x) "_") t) (t nil))) ;;Verific daca e X sau O. Depinde cine e la rnd. (defun get-symbol () (cond ((= (mod move 2) 0) 'X) (t 'O))) (defun do-move () (format t "~%~%It is ~a's turn." (get-symbol)) (setf (aref board (get-move)) (get-symbol))

(setq move (+ move 1))) ;;Verific daca este vreun catigtor utiliznd patratul magic (defun get-winner () (loop for a from 0 to 2 do (loop for b from 3 to 5 do (loop for c from 6 to 8 do (if (and (not (string= (aref board a) "_")) (string= (aref board a) (aref board b)) (string= (aref board b) (aref board c)) (= (+ (aref magic-board a) (aref magic-board b) (aref magicboard c)) 15)) (return-from get-winner (aref board a)))))) nil) ;;ine jocul pornit pn ctig cineva (defun game-loop () (until (not (equal winner nil)) (print-board) (do-move) (setq winner (get-winner)))) (defun play-game () (format t "Welcome to Tic-Tac-Toe!~%") (init-board) (game-loop) (print-board) (format t "~%~%The winner is ~a!~%" winner)) (play-game)

Bibliografie:
1. Faculatea de Automatic i Calculatoare, Curs Inteligen Artificial 2.www.dreamincode.net