Sunteți pe pagina 1din 8

Inteligen artificial

Laboratorul 8

1. Obiectiv
Obiectivul acestui laborator este implementarea unui joc simplu ntre om i calculator,
folosind algoritmul minimax.

2. Jocuri
Un joc reprezint o succesiune de decizii (aciuni) luate de pri ale cror interese sunt
opuse. Jocurile pot fi clasificate dup:

numrul de juctori: 1, 2, n (n nu nseamn c particip efectiv n juctori, ci c regulile


permit mprirea juctorilor n n mulimi disjuncte, astfel nct juctorii din fiecare mulime
s aib interese comune);
natura mutrilor: exist jocuri cu mutri libere (mutarea este aleas contient, dintr-o
mulime de aciuni posibile, de exemplu ahul) i jocuri cu mutri aleatorii (mutarea este
dictat de un factor aleatoriu zaruri, cri de joc, monede etc.). Pot exista jocuri cu ambele
tipuri de mutri;
cantitatea de informaie de care dispune un juctor (un juctor de ah vede configuraia
complet a pieselor adversarului, pe cnd un juctor de cri nu are acces la configuraiile
celorlali juctori).

Exist dou motive pentru care jocurile sunt un bun domeniu de explorat pentru inteligena
artificial:

Au o organizare clar, n care e foarte uor de msurat succesul sau eecul;


Nu necesit cantiti mari de cunotine iniiale. Multe jocuri sunt concepute astfel nct s
poat fi rezolvate prin metode de cutare din starea iniial pn n poziia ctigtoare.
Bineneles, acest lucru este adevrat numai pentru jocurile simple. Un contraexemplu este
jocul de ah, care presupune un arbore de cutare cu factorul de ramificare 35, adic n
fiecare moment exist (n medie) 35 de mutri disponibile. Avnd n vedere c un juctor
face (tot n medie) aproximativ 50 de mutri, putem trage concluzia c pentru un joc trebuie
examinate 35250 2,55 10154 variante.

Din cauza numrului mare de posibiliti, trebuie s existe euristici de cutare. n acest scop,
se folosesc proceduri de generare i test. Procedurile de generare pot fi optimizate astfel nct s se

Florin Leon, Inteligenta artificiala - Laborator, http://florinleon.byethost24.com/lab_ia.htm

Florin Leon, Inteligenta artificiala - Laborator, http://florinleon.byethost24.com/lab_ia.htm

Jocuri. Algoritmul minimax

3. Algoritmul de cutare minimax


Minimax este un algoritm de cutare limitat n adncime (depth-first, depth-limited). Se
pleac de la poziia curent i se genereaz o mulime de poziii urmtoare posibile. n acest scop,
structura de date cel mai des folosit este arborele. Se aplic funcia de evaluare static i se alege
poziia cea mai bun.
Se presupune c jocul este de sum nul, deci se poate folosi o singur funcie de evaluare
pentru ambii juctori. Dac f(n) > 0, poziia n este bun pentru calculator i rea pentru om, iar dac
f(n) < 0, poziia n este rea pentru calculator i bun pentru om. Funcia de evaluare este stabilit de
proiectantul aplicaiei.
Pentru aplicarea algoritmului, se selecteaz o limit de adncime i o funcie de evaluare. Se
construiete arborele pn la limita de adncime. Se calculeaz funcia de evaluare pentru frunze i
se propag evaluarea n sus, selectnd minimele pe nivelul minimizant (decizia omului) i maximele
pe nivelul maximizant (decizia calculatorului).
S considerm mai nti cutarea pe un singur nivel (engl. ply, pliu, cut, strat; n teoria
jocurilor, aceast denumire sugereaz numrul de niveluri n arbore care se studiaz):

-1

Primul nivel este un nivel maximizant, de aceea valoarea rdcinii arborelui este maximul
dintre valorile fiilor. Aici, valoarea lui A este 8, deoarece valoarea lui B (8) este valoarea maxim.
Procedura minimax presupune cutarea alternativ pe niveluri maximizante i niveluri
minimizante. Dac vom cerceta dou niveluri, primul nivel va fi maximizant, iar al doilea
minimizant.

Florin Leon, Inteligenta artificiala - Laborator, http://florinleon.byethost24.com/lab_ia.htm

Florin Leon, Inteligenta artificiala - Laborator, http://florinleon.byethost24.com/lab_ia.htm

genereze numai mutri (sau ci) bune. De asemenea, procedurile de test trebuie s recunoasc
mutrile bune, pentru ca acestea s fie explorate primele.
Exist jocuri pentru care avem i alte tehnici, n afar de cutare. De exemplu, n ah
(drosophila IA, dup cum l considera Alexander Kronod), deschiderile i finalurile sunt deseori
memorate sub form de modele n baze de date. Aici pot fi combinate tehnicile de cutare cu tehnici
mai directe de genul celor menionate mai sus.
Cnd dimensiunea arborelui de cutare este prea mare, se utilizeaz o funcie de evaluare
static, care folosete informaiile disponibile la un moment dat pentru a evalua poziiile care au
probabilitate mare de a conduce la atingerea scopului ctigarea jocului. n absena informaiilor
complete, se alege euristic poziia cea mai promitoare. De multe ori, este greu de gsit o funcie
bun. De fapt, inteligena cu care joac calculatorul depinde n mare msur de aceast funcie de
evaluare.

Cutarea pe dou niveluri este de forma:

-2

MAX

-4

MIN

-6

-2

-4

-3

n nodul B, vom avea valoarea minim a fiilor si (6). La fel n C i D. n A, vom prelua
valoarea maxim dintre B, C i D, adic 2.
Aceste valori numerice sunt date de funcia de evaluare static. Deoarece aceasta este
deseori imprecis, e important cutarea pe ct mai multe niveluri, pentru a crete numrul de
posibiliti avute n vedere, i deci i ansele de a determina mutarea optim.
Pseudocodul algoritmului minimax este urmtorul:
Minimax (board, depth)
if depth = depthBound then
return StaticEvaluation(board)
else if IsMaximizingLevel(depth) then
foreach child c of board
compute Minimax(c, depth+1)
return maximum over all children
else if IsMinimizingLevel(depth) then
foreach child c of board
compute Minimax(c, depth+1)
return minimum over all children
Initialize(depthBound)
Minimax(currentBoard, 0)

4. Retezarea alfa-beta
Algoritmul minimax determin un proces de cutare n adncime. O cale de o anumit
lungime este explorat i apoi se aplic funcia de evaluare static asupra poziiilor jocului n
ultimul pas al cii, iar valoarea calculat este trimis la nivelul imediat superior pe cale i aa mai
departe pn se ajunge n rdcina arborelui.
Eficiena procedurilor depth-first poate fi mrit prin tehnici branch-and-bound, n care pot
fi abandonate mai repede soluiile pariale care sunt n mod evident inferioare altor soluii deja
cunoscute. Dup cum minimax necesit gestionarea straturilor minimizante i maximizante, i
strategia branch-and-bound trebuie modificat pentru a include dou limite, una pentru fiecare
3

Florin Leon, Inteligenta artificiala - Laborator, http://florinleon.byethost24.com/lab_ia.htm

Florin Leon, Inteligenta artificiala - Laborator, http://florinleon.byethost24.com/lab_ia.htm

-6

-2

MAX

-5

-5

MIN

Aceast metod este util atunci cnd arborele de cutare este explorat pe mai multe
niveluri. n acest caz, eliminnd un nod pe un anumit nivel, eliminm tot subarborele corespunztor
acelui nod desfurat pe nivelurile inferioare.
n exemplul urmtor, se prezint o situaie mai compex, n care praguri alfa i beta nu sunt
folosite doar pentru niveluri succesive n arbore. Trebuie remarcat n primul rnd faptul c factorul
de ramificare nu este constant, deoarece numrul de mutri posibile din configuraii diferite nu este
constant.

Florin Leon, Inteligenta artificiala - Laborator, http://florinleon.byethost24.com/lab_ia.htm

Florin Leon, Inteligenta artificiala - Laborator, http://florinleon.byethost24.com/lab_ia.htm

juctor. Aceast strategie modificat se numete retezare alfa-beta (engl. alpha-beta pruning). Ea
necesit meninerea a dou valori prag, una reprezentnd limita inferioar a valorii unui nod care
realizeaz o maximizare (alfa), iar cealalt limita superioar a valorii unui nod care realizeaz o
minimizare (beta). Retezarea alfa-beta este o optimizare a algoritmului minimax, care ntreese
generarea arborelui cu propagarea valorilor. Unele valori obinute n arbore furnizeaz informaii
privind redundana altor pri, care nu mai trebuie generate. n acest caz, se genereaz arborele n
adncime, de la stnga la dreapta i se propag valorile finale ale nodurilor ca estimri iniiale
pentru prinii lor. De fiecare dat cnd alfa beta, se oprete generarea nodurilor descendente.
n exemplul urmtor, dup ce examinm nodul F, tim c adversarul (omul) are garantat un
ctig de 5 sau mai puin n C, de vreme ce adversarul este juctorul minimizant. Dar mai tim de
asemenea c noi (calculatorul) avem garantat un ctig de 3 sau mai mult n nodul A, care poate fi
obinut dac mutm n B. Orice alt mutare care produce un ctig mai mic de 3 este mai proast
dect mutarea n B i poate fi ignorat. Deci, dup ce am examinat doar nodul F, suntem siguri c
mutarea n C este greit (va fi mai mic sau egal cu 5), indiferent de ctigul n G. De aceea nu
mai avem nevoie s explorm nodul G.

MAX

MIN

MAX

(4)
0

(7)

(7)

(8)

MIN

Dac explorm tot subarborele cu rdcina B, descoperim c n A ne putem atepta la un


ctig de minim 3. Cnd aceast valoare alfa este pasat n jos ctre F, ea ne va permite s evitm
explorarea lui L. Dup ce K este examinat, observm c n I este garantat un ctig de 0, ceea ce
nseamn c n F este garantat un minim de 0. Dar aceast valoare este mai mic dect valoarea alfa
= 3, astfel nct nu mai trebuie s evalum alte ramificaii pornind din I. Juctorul maximizant deja
tie c nu trebuie s aleag mutarea n C i apoi n I, de vreme ce prin aceast mutare ctigul
rezultant nu va fi mai mare de 0 i un ctig de 3 se poate obine mutnd n B. Apoi este examinat J,
ceea ce determin o valoare de 2, care i este atribuit lui F, de vreme ce este maximul dintre 0, n I,
i 2, n J. Aceast valoare devine pragul beta n nodul C, indicnd faptul c n C este garantat un
ctig mai mic sau egal cu 2. n acest moment, alfa =3 i beta = 2, se ndeplinete din nou condiia
alfa beta i n consecin, nu mai este necesar explorarea nodurilor G i H.
Nodurile care nu mai sunt expandate au valoarea funciei de evaluare notat ntre paranteze.
Pentru explicaii suplimentare, consultai cursul 3.

Florin Leon, Inteligenta artificiala - Laborator, http://florinleon.byethost24.com/lab_ia.htm

Florin Leon, Inteligenta artificiala - Laborator, http://florinleon.byethost24.com/lab_ia.htm

5. Aplicaie

exist doi juctori;


piesele sunt dispuse pe o tabl de 4x4 careuri;
configuraia (tabla) iniial este:

fiecare juctor are ca scop s ajung pe ultima linie cu toate piesele (n acest caz, a ctigat
omul):

mutri posibile: fiecare pies poate fi mutat n orice direcie, ntr-un careu liber adiacent.

Indicaii. Se d un prototip de aplicaie, n care sunt implementate toate clasele necesare


pentru rezolvare i interfaa grafic cu utilizatorul. Diagrama UML de clase a aplicaiei complete
este urmtoarea:

Florin Leon, Inteligenta artificiala - Laborator, http://florinleon.byethost24.com/lab_ia.htm

Florin Leon, Inteligenta artificiala - Laborator, http://florinleon.byethost24.com/lab_ia.htm

Realizai o variant simplificat a unui joc de dame, cu urmtoarele reguli:

Board.EvaluationFunction() : double
Calculeaz funcia de evaluare static pentru configuraia (tabla) curent. Pentru fiecare
pies p, se poate calcula distana pn la linia scop dy(p). Funcia de evaluare static trebuie s ia n
calcul sumele distanelor dy(p) pentru piesele calculatorului, respectiv ale omului. Cu ct funcia
este mai mare, cu att poziia este mai bun pentru calculator, adic aceasta este mai aproape de
configuraia ctigtoare.
Piece.ValidMoves(Board currentBoard) : List<Move>
Returneaz lista tuturor mutrilor permise n configuraia curent.
Folosete metoda IsValidMove.
Piece.IsValidMove(Board currentBoard, Move move) : bool
Testeaz dac o mutare este permis n configuraia curent. O mutare este invalid dac: nu
mut nicio pies, nu mut ntr-un careu adiacent ci sare peste mai multe careuri, mut n afara tablei
sau mut ntr-un careu ocupat de alt pies. Aceast metod valideaz att mutrile calculatorului
(n Piece.ValidMoves) ct i mutrile omului (n MainForm.pictureBoxBoard_MouseUp).

Florin Leon, Inteligenta artificiala - Laborator, http://florinleon.byethost24.com/lab_ia.htm

Florin Leon, Inteligenta artificiala - Laborator, http://florinleon.byethost24.com/lab_ia.htm

Trebuie implementate doar urmtoarele metode:

Florin Leon, Inteligenta artificiala - Laborator, http://florinleon.byethost24.com/lab_ia.htm

Florin Leon, Inteligenta artificiala - Laborator, http://florinleon.byethost24.com/lab_ia.htm

Minimax.FindNextBoard(Board currentBoard) : Board


Aplic algoritmul minimax pe un singur nivel. Primul nivel corespunde mutrii
calculatorului, deci este maximizant. Transform mutrile valide ale tuturor pieselor din
currentBoard ntr-o list de configuraii, folosind metoda Board.MakeMove. Apoi selecteaz din
aceast list configuraia cu funcia de evaluare static maxim. Dac exist mai multe configuraii
cu funcia de evaluare maxim, se alege aleatoriu una dintre ele. n cazul general, descris n
laborator, algoritmul ar trebui s lucreze pe un arbore.

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