Ciprian Chichirita
grupa 407 (I.A.)

Programarea Algoritmilor Eficienti

Cuprins

  1. Euristica
  2. MinMax
  3. Arbore de cautare (game tree)
  4. Definitie
  5. Exemple
  6. La ce ne ajuta?
  7. Bibliografie

Euristica

Metoda de descoperire a unor premise noi folosind premise si concluzii vechi, astfel, rezultatul unui argument va deveni premisa.

In programare, euristica e o tehnica proiectata pentru a rezolva o problema intr-un mod mai rapid decat metodele clasice sau pentru a gasi o solutie aproximativa atunci cand metodele clasice nu pot gasi nici o solutie exacta. In termeni generali, euristica poate fi privita ca o scurtatura.

Un exemplu in care o euristica face ca un algoritm sa se comporte mai rapid in anumite scenarii este algoritmul de cautare. Initial, euristica incearca orice posibilitate la fiecare pas, la fel ca algoritmul clasic (in cazul nostru minMax) dar poate sa se opreasca din cautat oricand daca posibilitatea curenta sau rezultatul curent e mai rau decat cel precedent. In astfel de scenarii, o euristica poate fi folosita pentru a incerca mai intai posibilitatile sau rezultate bune astfel, cele rele pot fi elimminate devreme.

MinMax

MinMax e o regula de decizie folosita in teoria jocurilor, statistica si filosofie pentru minimizarea pierderilor posibile in cel mai rau caz (pierdere maxima/totala). Initial a fost formulata pentru teoria jocurilor cu 2 jucatori si suma zero (daca adunam toate castigurile si scadem toate pierderile, rezultatul va fi zero), suportand ambele cazuri in care jucatorii actioneaza alternativ sau simultan, de asemenea a fost extinsa sa suporte jocuri mai complexe si sa ia decizii generale in prezenta incertitudinii.

Calcularea valorii maxime a unui jucator se face folosind abordarea cazului cel mai rau: pentru oricare actiune posibila a jucatorului, varificam toate actiunile posibile ale celorlati jucatori si determinam combinatia cea mai proasta de actiuni - cea in care jucatorul "i" primeste cea mai mica valoare. Apoi, determinam care actiune poate jucatorul "i" sa ia a.i. valoarea cea mai mica gasita e cea mai mare posibila.

Arbore de cautare (game tree)

In teoria jocurilor, un arbore joc (game tree) e un graf orientat ale carui noduri sunt pozitii in joc si ale carui laturi (ramure) sunt mutari. Un arbore joc complet pentru un joc e un arbore joc care incepe de la pozitia initiala a jocului (de start) si contine toate mutarile posibile pentru toate pozitiile.

Definitie

Alpha–beta pruning e un algoritm de cautare care incearca sa reduca numarul de noduri evaluate din arborele de cautare ale algoritmului minmax. Este un algoritm de cautare folosit in general pentru jocuri in care participa 2 jucatori (Ex.: Sah). Atunci cand este aplicat unui arbore minmax, acesta returneaza aceleasi valori dar sterge/taie ramurile arborelui care nu pot influenta solutia/decizia finala.

Algoritmul mentine 2 valori, alpha(max) si beta(min), care reprezinta punctajul maxim pe care jucatorul maximizat il poate avea si scorul minim pe care jucatorul minimizat il poate avea. Initial alpha e -∞ iar beta e +∞, astfel, fiecare jucator incepe cu scorul cel mai mic posibil. Se poate intampla ca atunci cand alegem o ramura a unui nod, scorul minim al jucatorului minimizat poate deveni mai mic decat scorul maxim al jucatorului maximizat, adica beta <= alpha. Daca se intampla acest lucru, nodul parinte nu ar trebui sa aleaga acest nod, pentru ca va inrautati scorul nodului parinte, astfel, celelalte ramuri ale acestui nod nu necesita a fi parcurse.

Definitie

 function alphabeta(node, depth, α, β, maximizingPlayer)
      if depth = 0 or node is a terminal node
          return the heuristic value of node
      if maximizingPlayer
          v := -∞
          for each child of node
              v := max(v, alphabeta(child, depth - 1, α, β, FALSE))
              α := max(α, v)
              if β ≤ α
                  break (* β cut-off *)
          return v
      else
          v := ∞
          for each child of node
              v := min(v, alphabeta(child, depth - 1, α, β, TRUE))
              β := min(β, v)
              if β ≤ α
                  break (* α cut-off *)
          return v

(* Initial call *)
alphabeta(origin, depth, -∞, +∞, TRUE)

Pseudo-cod

Exemple

Exemple

Exemple

La ce ne ajuta

Ne ajuta sa gasim solutii pentru diferite jocuri, cum ar fi:

 

  • X si 0
  • Sah
  • Go
  • Orice joc de 2 persoane

Bibliografie

Multumesc!

Alpha-Beta pruning

By ciprian chichirita

Alpha-Beta pruning

(RO) Scurta prezentare a algoritmului de cautare Alpha-Beta Pruning.

  • 726