Sunteți pe pagina 1din 6

IA

Laborator 1
Scopul: Insusirea ideilor fundamentale despre inteligenta artificiala, insusirea ideilor fundamentale despre programarea logica, deosebirea intre programarea logica si programarea clasica.

1. Inteligenta artificiala
Inteligenta Artificiala poate fi definita ca simularea inteligentei umane procesata de masini, in special, de sisteme de computere. Acest domeniu a fost, in general, caracterizat de cercetari complexe in laboratoare si doar destul de recent a devenit parte a tehnologiei in aplicatii comerciale. In ultimii ani au avut loc numeroase discutii privind filozofia Inteligentei Artificiale si rolul sau in dezvoltarea tehnologiilor. De-a lungul timpului, opinia publica a ridicat unele intrebari legate de avansul tehnologic bazat pe Inteligenta Artificiala: -in ce masura masinile inteligente vor face parte din viata oamenilor ? -pot fi construite masini cu constiinta ? -sunt oamenii capabili sa construiasca masini cu adevarat inteligente si daca da, cum le vor controla ? -cine va detine puterea, omul sau masina ? -avem cu adevarat nevoie de masini inteligente ? Termenul de Inteligenta Artificiala este intalnit azi in numeroase publicatii tehnice, medicale, militare, stiintifice, de obicei, cand vine vorba de aplicatii ce realizeaza performante de care numai omul era socotit capabil: recunoasterea si analiza vocii si a imaginilor, traduceri dintr-o limba in alta, diferite jocuri de inteligenta (sah, bridge), luarea unor decizii complexe fara interventia unui operator uman etc. Initial, obiectivele Inteligentei Artificiale au fost foarte ambitioase: masina trebuia sa rezolve diferite probleme, sa invete din propria experienta si din evenimentele exterioare sistemului sau, sa efectueze rationamente, sa conceapa noi obiecte cu proprietati prestabilite. Principalul scop al Inteligentei Artificiale este de a imita creierul uman in modul in care acesta gandeste, raspunde si interactioneaza. In urma cercetarilor din ultimii ani, calculatorul este capabil sa realizeze rationamente si sa descopere legaturi logice intre fapte descrise corect prin propozitii. De asemenea, calculatorul este capabil sa invete din propriile greseli si sa interactioneze cu un utilizator. Folosindu-se de aceste performante, omul a creat computere si programe specifice care sa lucreze pentru el, sa rezolve ecuatii

complicate, sa proceseze baze de date cu sute de mii de inregistrari, sa-l ajute in proiectarea si producerea unor echipamente tehnice avansate etc. Cateva dintre din domeniile in care este si va fi folosita Inteligenta Artificiala sunt: Sisteme expert. Un sistem expert este format dintr-un grup de programe si o colectie de informatii specifice, cu ajutorul carora se poate purta un dialog omcomputer, in vederea rezolvarii problemelor. Informatiile primite de la calculator sunt asemanatoare cu cele date de un expert uman in domeniul respectiv. Sistemele expert multiplica inteligenta formalizata a unor specialisti punand-o la dispozitia acelor persoane al caror acces la respectivii specialisti este imposibila Retele neuronale. Sunt sisteme care simuleaza inteligenta prin reproducerea tipurilor de conexiuni fizice care se gasesc in creierul biologic. Din cauza limitarilor tehnologice, numarul acestor conexiuni este foarte mic, comparativ cu cele cateva zeci de miliarde de conexiuni din creierul uman Intelegerea limbajului natural.Reprezinta programarea computerelor astfel incat acestea sa inteleaga si sa interactioneze cu utilizatorii in limbajul natural al acestora. La baza intelegerii limbajului natural se afla recunoasterea vocala care transforma un dialog in text, folosind un dispozitiv special Agentii. Sunt entitati computerizate care actioneaza in locul operatorilor umani, adunand stiri de pe Internet, trimitand mesaje de e-mail sau filtrandu-le pe cele primite. Desi lucreaza pe baza unor "cuvinte cheie" si se afla inca in cercetare, agentii vor deveni foarte utili, ajutandu-si utilizatorul sa gaseasca, spre exemplu, numai stirile sau articolele care il intereseaza, scutindu-l de ore intregi de navigare inutila pe Internet Roboti. Noile modele de roboti au in componenta computere programate sa "auda", sa "vada" si sa reactioneze la diferiti stimuli externi. Exista deja roboti care pasesc asemenea unei fiinte vii, disting o voce din mai multe, raspunzand numai la comanda acesteia, se orienteaza in spatiu, recunoscand obiectele inconjuratoare, aleg drumul cel mai scurt intre doua puncte si ocolesc obstacolele. Jocurile pe computer. Dezvoltarea jocurilor si a domeniului multimedia, in general, este in plina expansiune, o afacere de sute de milioane de dolari. La ora actuala, nu se mai poate concepe un joc fara a avea in structura elemente de Inteligenta Artificiala. Implementata corect, aceasta garanteaza un produs bine vandut, deci profit si satisfactie oferita jucatorilor. Este deja cunoscut ca programele de sah pe computer pot invinge un oponent uman, cel mai elocvent exemplu fiind cel din 1997, in care campionul Gary Kasparov a fost intrecut de un super-computer, Deep Blue, creat de firma IBM. Obtinuta in sase partide, aceasta victorie a insemnat trecerea liniei Inteligentei Artificiale dincolo de ce s-a realizat pana in acel moment. Din studiile efectuate, a reiesit ca in creierul uman se afla aproximativ 100 miliarde de neuroni, fiecare capabil de 1000 de operatii pe

secunda. in jur de 30 de miliarde de neuroni formeaza "materia cenusie", cea care gandeste, restul de 70 de miliarde constituind "materia alba", cea care face legatura intre neuronii din "materia cenusie". in contrast, Deep Blue continea 480 de procesoare create special pentru jocul de sah, fiecare dintre ele fiind capabil sa gandeasca aproximativ 2 milioane de pozitii pe secunda. Fara alte comentarii... Un computer actual poate realiza 10 la puterea 17 operatii pe secunda (o operatie in timpul in care lumina ar strabate un atom de hidrogen). E clar ca viteza apartine masinii. Ce atu are omul ? Cel mai important pare a fi elementul surpriza, omul este imprevizibil, gandirea sa nu respecta intotdeauna un algoritm, asa cum il stie masina.

2. Programarea logica
Inceputurile logicii sunt strans legate de gandirea stiintifica. Logica furnizeaza un limbaj precis pentru expresia explicita a obiectivelor cunostintelor si a ipotezelor. Logica ofera bazele pentru deducerea consecintelor din premize, pentru studierea adevarului sau falsitatii unor expresii cunoscand valoarea de adevar a altor expresii, pentru a stabili consecintele afirmatiilor cuiva si pentru a verifica validitatea argumentelor cuiva. Calculatoarele sunt relativ noi in istoria intelectualitatii noastre. Similar logicii, ele sunt obiectul studiilor stiintifice si o unealta puternica pentru eforturile facute in directia progresului stiintific. La fel ca logica, au nevoie de expresia precisa si explicita a scopurilor si ipotezelor cuiva. Spre deosebire de logica, ce s-a dezvoltat cu puterea gandirii umane ca singura consideratie externa, dezvoltarea calculatoarelor a fost guvernata de la inceput de constrangeri tehnologice si ingineresti. Marea majoritate a calculatoarelor utilizate sunt bazate pe conceptul timpuriu al lui von Neumann si al colegilor lui, ce a aparut in anii 1940. Masina von Neumann este caracterizata de un spatiu larg de celule de memorie si o unitate de procesare cu anumite celule locale, numite registri. Unitatea de procesare poate incarca date din memorie in registri, poate efectua operatii aritmetice sau logice asupra registrilor si poae stoca valoarea registrilor inapoi in memorie. Un program pentru masina von Neumann consta dintr-o secventa de instructiuni ce executa asemenea operatii si dintr-un set de instructiuni de control ce pot influenta instructiunea ce urmeaza a fi executata, posibil in functie de continutul anumitor registri. Pe masura ce problemele construirii calculatoarelor erau intelese si rezolvate, problemele datorate utilizarii lor cresteau. Concluzia a fost ca problemele nu se datorau incapacitatii calculatorului de a executa instructiunile omului, ci mai degraba inabilitatii omului de a instrui calculatorul. Astfel a inceput o cautare a limbajelor de programare convenabile omului. Pornind de la limbajul inteles direct de calculator, limbajul masina, au fost dezvoltate notiuni si formalisme mai bune. Desi sporind in abstractizare, dezvoltarea limbajelor, de la limbajul de asamblare la Fortran, Algol, Pascal si Ada, a purtat semnul masinii bazate pe arhitectura von Neumann.

Pentru o persoana inteligenta, dar neinitiata, care nu este familiarizata cu constrangerile ingineresti care au condus la proiectarea ei, masina von Neumann pare a fi un dispozitiv misterios, chiar bizar. Gandirea in termenii constrangerii setului de operatii nu este o problema triviala. Aceste aspecte caracteristice programarii calculatoarelor von Neumann au condus la o anumita separare a sarcinilor: pe de-o parte erau cei care se gandeau cum sa rezolve problema si proiectau metodele pentru solutia ei, de cealalta parte erau cei care scriau codul, care realizau sarcina migaloasa de a traduce instructiunile proiectantilor in instructiuni pe care calculatorul le poate interpreta. Atat logica cat si programarea necesitau exprimarea cunostintelor si a metodelor intr-un formalism unanim acceptat. Sarcina de a face explica cunostintele cuiva este delicata. Formalizarea cunostintelor cuiva este, adesea, o activitate intelectula ce conduce la o aprofundare a problemei in cauza. Insa rar se intampla ca formalizarea problemei si folosirea metodelor de rezolvare bazate pe multimea de instructiuni von Newmann sa conduca la aceste efecte benefice. Desi logica a fost folosita ca unealta pentru proiectarea calculatoarelor, pentru rationamente legate de calculatoare si pentru programarea lor inca de la inceputurile calculatoareor, utilizarea logicii in sine ca limbaj de programare, numita programare logica, este destul de recenta. Programarea logica se departeaza radical de principalul limbajelor de programare traditionale. Este bazata pe ideea ca in loc ca oamenii sa invete sa gandeasca in termenii operarii unui calculator, ar trebui ca acesta sa execute instructiuni ce sunt usor de formulat de catre om. Programarea logica nu formuleaza instructiunile explicite pentru executarea operatiilor, ci mai degraba cunostintele despre problema si ipotezele suficiente pentru a o rezolva sub forma unor axiome logice. Un astfel de set de axiome constituie o alternativa la programarea conventionala. Programul poate fi executat prin furnizarea unei probleme, formalizata ca o declaratie logica ce trebuie dovedita, numita expresia scopului. Executia este o incercare de a rezova problema, adica de a demonstra scopul, dandu-se ipotezele in programul logic. Aceste idei pot fi cuprinse in urmatoarele doua ecuatii metaforice: Program = Calculare = multime de axiome dovada constructiva a scopului din program

Limbajele de programare logica se mai numesc si limbaje declarative. Spre deosebire de limbajele procedurale, la care fiecare pas procedural trebuia specificat in detaliu, la limbajele declarative, se specifica ceea ce se asteapta in obtinerea solutiei (scopul problemei). Pe langa faptul ca solutia poate fi furnizata fara specificarea pasilor necesari, programul poate explica uneori cum a obtinut solutia. Teoria matematica care sta la baza acestei paradigme este logica predicatelor de ordin unu, care lucreaza cu entitati logice (nu cu numere). Logica predicatelor este o logica

simbolica al carei scop este de a reprezenta tipuri de rationamente. Atata timp cat calculul predicatelor are reguli si formalitati matematice definite printr-o teorie, solutia la o problema specifica este completa si efectiva. Problemele care sunt indicate spre a fi rezolvate prin programare logica sunt din domeniul demonstrarii de probleme si propagarii de cunostinte. Programarea cunostintelor face parte sin metoda solutiei generale, care implica propagarea constrangerilor. Uneori se numeste si propagarea adevarului, deoarece implica propagarea constrangerilor care implica valori de adevar. Valorile de adevar pot fi binare (T, F) sau multi-valoare (T, probabil T, posibil T, F). Un exemplu de limbaj de programare logica este Prolog.

3. Programarea logica vs. programarea clasica


Un program este alcatuit din doua elemente : logica si controlul . Prin termenul logica se desemneaza toate notiunile care stabilesc CE face un program, in timp ce termenul control semnifica toate notiunile sintactice care stabilesc CUM o face (de exemplu algoritmul care rezolva o problema). Un program scris in PASCAL sau in alt limbaj de programare traditional consta din instructiuni care descriu actiunile ce trebuie executate pas cu pas de catre calculator pentru ca programul sa produca rezultatul dorit. Un program in PROLOG este o baza de natura logica, in care programatorul defineste obiecte si relatii intre aceste obiecte : relatii care exista direct intre obiecte si regulile dupa care se pot deduce alte relatii sau proprietati ale acestora. Obiectele sunt reprezentate in PROLOG prin nume simbolice. Relatiile existente intre obiecte se definesc cu ajutorul clauzelor. Exista doua feluri de clauze: fapte si reguli. Structura sintactica a unui fapt este urmatoarea: nume(arg1, arg2, , argn). unde: nume este un nume de predicat, adica o succesiune de caractere (alfabetice, cifre sau liniuta de subliniere) avand proprietatea ca primul caracter este o litera mica a alfabetului arg1, arg2, , argn se numesc argumentele predicatului, iar din punct de vedere sintactic pot fi nume de obiecte sau nume de variabila (un nume de variabila este o succesiune de caractere astfel incat primul caracter este o litera mare din alfabet). O regula este o constructie sintactica de forma: cn+1 :- c1, c2,, cn.

unde entitatile c1, c2,, cn, cn+1 sunt de forma nume(arg1, arg2, , argk) , nume, arg1, arg2, , argk avand aceeasi semnificatie ca in cazul unei fapte. cn+1 se numeste capul regulii c1, c2,, cn formeaza corpul regulii Clauza codifica urmatorul enunt: Daca c1 si c2 si cn sunt adevarate, atunci cn+1 este adevarata. Sa luam drept exemplu un program care citeste doua numere reale si il afiseaza pe cel mai mare dintre ele. Program in PASCAL: var x,y: real; begin write(numar1 = ); readln(x); write(numar2 = ); readln(y); if (x < y) then writeln(x) else writeln(y); end.

Program in PROLOG: predicates program mai_mare(real,real,real) clauses program :- write("n1="), readreal(X), write("n2="), readreal(Y), mai_mare(X,Y,Z), write(Z), nl. mai_mare(X,X,X). mai_mare(X,Y,Y):-X<Y. mai_mare(X,Y,X):-Y<X. goal program

S-ar putea să vă placă și