Sunteți pe pagina 1din 59

Curs 8

Jocuri

Regulile de joc
Doi juctori: MAX i MIN Fiecare are ca obiectiv ctigarea jocului Doar unul poate ctiga n modelarea iniial nu intervine ansa
dar ea poate fi simulat

Exemple:
ah checkers tic-tac-toe ...

Jocul tic-tac-toe

MAX joac cu X-uri

MIN joac cu O-uri

Jocul tic-tac-toe

MAX

Jocul tic-tac-toe

MIN

Jocul tic-tac-toe

MAX

Jocul tic-tac-toe

MIN

Jocul tic-tac-toe

MAX

Jocul tic-tac-toe

MIN

Jocul tic-tac-toe

MAX

Jocul tic-tac-toe

MIN

Jocul tic-tac-toe

MAX

Remiz!

Jocul tic-tac-toe

Jocul tic-tac-toe

MAX

Jocul tic-tac-toe

MIN

Jocul tic-tac-toe

MAX

Jocul tic-tac-toe

MIN

Jocul tic-tac-toe

MAX

Jocul tic-tac-toe

MIN

Jocul tic-tac-toe

MAX

Jocul tic-tac-toe

MAX ctig

Reprezentarea ca o problem de IA
1. Problem versus instan 2. Spaiul strilor:
o stare: poziia pe tabla a semnelor ntre dou mutri dimensiunea spaiului: < 9+8.9+7.8.9++9! < 9.9!

3. Reprezentarea unei stri:


o matrice 3x3

4. Reprezentarea unei tranziii


algoritmic (n abordarea de fa)

5. Cum controlm evoluia jocului?


metoda MIN-MAX metoda ALPHA-BETA

Arborele de joc
MAX
o clas de simetrie

Arborele de joc
MAX MIN

Arborele de joc
MAX MIN

Arborele de joc
MAX MIN

Arborele de joc
MAX MIN

Valoarea unei stri

Ctig pentru MAX: +

Valoarea unei stri

Ctig pentru MIN: -

Evaluarea unei stri

O stare este mai bun dac deschide mai multe posibiliti de ctig pn la sfritul jocului. Un exemplu de funcie de evaluare: valoarea strii este diferena dintre numrul de linii pe care le mai poate completa MAX i cele pe care le mai poate completa MIN.

8 7 6 5 4 3 2 1

Evaluarea unei stri

O stare este mai bun dac deschide mai multe posibiliti de ctig pn la sfritul jocului. Un exemplu de funcie de evaluare: valoarea strii este diferena dintre numrul de linii pe care le mai poate completa MAX i cele pe care le mai poate completa MIN.

8 - 5 4= 3 3 2 1

Evaluarea unei stri

O stare este mai bun dac deschide mai multe posibiliti de ctig pn la sfritul jocului. Un exemplu de funcie de evaluare: valoarea strii este diferena dintre numrul de linii pe care le mai poate completa MAX i cele pe care le mai poate completa MIN.

Liniile fr nici un semn pot fi luate de ambii juctori...

Evaluarea unei stri

O stare este mai bun dac deschide mai multe posibiliti de ctig pn la sfritul jocului. Un exemplu de funcie de evaluare: valoarea strii este diferena dintre numrul de linii pe care le mai poate completa MAX i cele pe care le mai poate completa MIN.

Liniile fr nici un semn pot fi luate de ambii juctori...

Evaluarea unei stri

O stare este mai bun dac deschide mai multe posibiliti de ctig pn la sfritul jocului. Un exemplu de funcie de evaluare: valoarea strii este diferena dintre numrul de linii pe care le mai poate completa MAX i cele pe care le mai poate completa MIN.

Liniile fr nici un semn pot fi luate de ambii juctori...

Evaluarea unei stri

O stare este mai bun dac deschide mai multe posibiliti de ctig pn la sfritul jocului. Un exemplu de funcie de evaluare: valoarea strii este diferena dintre numrul de linii pe care le mai poate completa MAX i cele pe care le mai poate completa MIN.

Liniile fr nici un semn pot fi luate de ambii juctori...

Evaluarea unei stri

O stare este mai bun dac deschide mai multe posibiliti de ctig pn la sfritul jocului. Un exemplu de funcie de evaluare: valoarea strii este diferena dintre numrul de linii pe care le mai poate completa MAX i cele pe care le mai poate completa MIN.

Liniile fr nici un semn pot fi luate de ambii juctori...

Evaluarea unei stri

O stare este mai bun dac deschide mai multe posibiliti de ctig pn la sfritul jocului. Un exemplu de funcie de evaluare: valoarea strii este diferena dintre numrul de linii pe care le mai poate completa MAX i cele pe care le mai poate completa MIN.

Liniile fr nici un semn pot fi luate de ambii juctori...

Evaluarea unei stri

O stare este mai bun dac deschide mai multe posibiliti de ctig pn la sfritul jocului. Un exemplu de funcie de evaluare: valoarea strii este diferena dintre numrul de linii pe care le mai poate completa MAX i cele pe care le mai poate completa MIN.

Liniile fr nici un semn pot fi luate de ambii juctori...

3 - 0 = 3

Evaluarea unei stri

2 - 1 3 = -1 2

Evaluarea: de jos n sus


MAX
1

MIN
0 -1 1 0

Evaluarea: de jos n sus


MAX
1

MIN
0 -1 1 0

Evaluarea: de jos n sus


-1

MAX MIN

0 -1 1 0

-1

-2

-1

Evaluarea: de jos n sus


-1

MAX MIN

0 -1 1 0

-1

0 -2 -1 0

Evaluarea: de jos n sus


-1 -2

MAX MIN

0 -1 1 0

-1

0 -2 -1 0

Evaluarea: de jos n sus


-1 -2

MAX MIN

0 -1 1 0

-1

0 -2 -1 0

Evaluarea: de jos n sus


1 -1 -2

MAX MIN

0 -1 1 0

-1

0 -2 -1 0

Evaluarea: de jos n sus


MAX alege mutarea cea mai bun pentru el
1

O dezvoltare a spaiului de joc pe o adncime de 2 duce la concluzia c juctorul care joac primul are o ans de ctig n plus dac ocup centrul
1

-1 -2

MAX MIN

0 -1 1 0

-1

MAX gndete: MIN alege mutarea cea mai bun pentru el = cea mai proast pentru mine

0 -2 -1 0

Metoda MIN-MAX
function min-max(state, player, depth) begin if (depth = 0) then return score(state); val = worst(player); while (mai sunt stri de generat) begin generez o stare -> s; val <- back-up-compare(val, min-max(s, not(player), depth-1), player); // urmtoarea micare micoreaz spaiul de cutare n cazul n care se obine poziia de ctig ntr -una // din strile generate: if (val = -worst(player)) return(val); end return(val); end function worst(player) begin if player = MAX then return - ; else return + ; end funtion back-up-compare(val1, val2, player) begin if player = MAX then return max(val1, val2); else return min(val1, val2); end

Apelul: min-max( ,MAX,2)

Evaluarea: de jos n sus


-1

MAX
1 0 -1 1 0

MIN

val=-1; player = MAX; depth=1;


while (mai sunt stri de generat) begin generez o stare -> s; ... end

Evaluarea: de jos n sus


-1

MAX
1 0 -1 1 0

min-max(
val=-1; player = MAX; depth=2;
while (mai sunt stri de generat) begin generez o stare -> s; val <- back-up-compare(val, min-max(s, not(player), depth-1), player); if (val = -worst(player)) return(val); end

,MIN,1)

MIN

Evaluarea: de jos n sus


-1

MAX
1 0 -1 1

s
0

MIN
1
0

min-max(

,MIN,1)

val= val = worst(player); while (mai sunt stri de generat) begin generez o stare -> s; val <- back-up-compare(val, min-max(s, not(player), depth-1), player); if (val = -worst(player)) return(val); end

Evaluarea: de jos n sus


-1

MAX
1 0 -1 1

s
0

MIN
-1
0

min-max(

,MAX,0)
-1

if (depth = 0) then return score(state);

Evaluarea: de jos n sus


-1

MAX
1 0 -1 1

s
0

MIN
-1
0 -2 -1 0

min-max(

,MIN,1)
-1

val= ; player=MIN;
val <- back-up-compare(val, -1, player); if (val = -worst(player)) return(val); end

Evaluarea: de jos n sus


-1

MAX
1 0 -1 1

s
0

MIN
-1
0 -2 -1 0

min-max(

,MIN,1)
-1 -2

val= ; player=MIN;
val <- back-up-compare(val, -1, player); if (val = -worst(player)) return(val); end

Evaluarea: de jos n sus


-1

MAX
1 0 -1 1

s
0

MIN
-1
0 -2 -1 0

min-max(

,MIN,1)
-1 -2

val= ; player=MIN;
val <- back-up-compare(val, -1, player); if (val = -worst(player)) return(val); end

Evaluarea: de jos n sus


-1

MAX
1 0 -1 1

s
0

MIN
-1
0 -2 -1 0

min-max(

,MIN,1)
-1 -2

val= ; player=MIN;
val <- back-up-compare(val, -1, player); if (val = -worst(player)) return(val); end

Metoda alpha-beta
-1 -1

MAX
-1

Un moment din dezvoltarea arborelui n care apare o situaie particular:


0 -1 1 0

La acest nivel se calculeaz un maxim. Acest maxim (valoarea nodului rdcin) nu poate fi mai mic dect -1!

MIN
Generarea poate fi oprit!
-1

La acest nivel se calculeaz un minim. Orice valoare a nodului printe poate fi mai mic sau egal cu -1.

Ea nu mai poate influena valoarea nodului rdcin!

Metoda alpha-beta
1 -1 -2 -1

MAX MIN

0 -1 1 0

-1

0 -2 -1 0

Metoda alpha-beta
function alpha-beta(state, player, depth) begin if (depth = 0) then return score(state); val = worst(player); while (mai sunt stri de generat) begin generez o stare -> s; newval <- alpha-beta(s, not(player), depth-1); if player=MAX & newval val then return(newval); else if player=MIN & newval val then return(newval); else val back-up-compare(val, min-max(s, not(player), depth-1), player); // urmtoarea micare micoreaz spaiul de cutare n cazul n care se obine poziia de ctig // ntr-una din strile generate: if (val = -worst(player)) return(val); end return(val); end function worst(player) begin if player = MAX then return - ; else return + ; end function back-up-compare(val1, val2, player) begin if player = MAX then return max(val1, val2); else return min(val1, val2); end

Apelul: alpha-beta ( ,MAX,2)

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