Documente Academic
Documente Profesional
Documente Cultură
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
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!
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
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
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
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.
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.
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.
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.
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.
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.
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.
3 - 0 = 3
2 - 1 3 = -1 2
MIN
0 -1 1 0
MIN
0 -1 1 0
MAX MIN
0 -1 1 0
-1
-2
-1
MAX MIN
0 -1 1 0
-1
0 -2 -1 0
MAX MIN
0 -1 1 0
-1
0 -2 -1 0
MAX MIN
0 -1 1 0
-1
0 -2 -1 0
MAX MIN
0 -1 1 0
-1
0 -2 -1 0
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
MAX
1 0 -1 1 0
MIN
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
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
MAX
1 0 -1 1
s
0
MIN
-1
0
min-max(
,MAX,0)
-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
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
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
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
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.
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