pseudcode pentru algoritmul MINMAX

voturi
3

Vreau să ajung Pseudocodul pentru algoritmul MINMAX. Trebuie să fac 2 funcții, def maxAgent (gameState, adâncimea) și minAgent. Există orice organism care are dreptul și pseudocod ușor pentru ea.

Întrebat 29/07/2010 la 05:13
sursa de către utilizator
În alte limbi...                            


2 răspunsuri

voturi
2

Algoritmul MINMAX încearcă să maximizeze scorul pentru jucător A și a minimiza scorul pentru jucător B. Având în vedere un nod, puteți găsi rezultatul final de la faza optimă prin luarea maxim (pentru A) sau min (pentru B) din punctajul nodurile succesoare.

Presupunând că nodurile frunză au un castigator atribuit (1 pentru A, -1 pentru B) în timp ce toate celelalte noduri au un scor de 0. Puteți calcula apoi rezultatul final câștigătoare pentru A cu ceva de genul

  getMaxScore(node) {
    score = node.score;
    for each child node 
       score = max(score, getMaxScore(node))  
    next

    return score;
  }

Acesta este algoritmul de bază. Puteți, scurt-circuit de evaluare imediat ce scorul devine 1, atunci aveți un câștig cunoscut pentru A.

Algoritmul este aceeași pentru B, getMinScore, numai utilizați funcția min, și dacă Scurtcircuitarea, căutați -1.

Publicat 29/07/2010 la 05:43
sursa de către utilizator

voturi
2

Doi jucători, A și B, pe rând pentru a juca.

Ni se dă o funcție de punctaj f care evaluează o poziție de bord dat, P. valori mai mari ale f (P) sunt mai bune pentru A și mai rău pentru B (de exemplu, f (P) este o estimare a modului în care „bun“ P este pentru A fără a face nici un lookahead mai departe).

Luați în considerare o poziție de bord P.

În cazul în care P este un nod frunză (de exemplu, P este o poziție câștigătoare sau ne-am uitat la fel de departe ca dorim sa), atunci ne întoarcem f (P) ca scorul pentru acest nod.

În caz contrar, P nu este un nod frunză și are copii C1, ..., Cn. Am recursiv calcula scorurile pentru copii, oferindu-S1, ..., Sn.

În cazul în care o joacă la P, atunci scorul pentru P este de max {S1, ..., Sn} din moment ce o va juca întotdeauna să maximizeze avantajul său.

Dacă B joacă la P, atunci punctajul P este min {S1, ..., Sn} deoarece B va juca întotdeauna pentru a minimiza avantajul lui A.

Acest lucru ar trebui să fie suficient pentru a transforma în cod.

După ce ați făcut asta, au o privire la tăiere alfa-beta, care ar trebui (drastic) reduce cantitatea de căutare, trebuie să faci. Alfa-beta de tăiere se bazează pe ideea că, dacă A deduce că B poate juca pentru a forța avantajul maxim de A pentru a fi M, atunci nu există nici un punct în considerare orice subarborele al cărui scor este mai mare decât M, deoarece B nu va permite o această opțiune!

Publicat 29/07/2010 la 07:39
sursa de către utilizator

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more