User Tools

Site Tools


chess:programming:alpha-beta_pruning:example

Chess - Programming - Alpha-Beta Pruning - Example

  • The initial call starts from A.
    • The value of alpha here is -INFINITY and the value of beta is +INFINITY.
    • These values are passed down to subsequent nodes in the tree.
    • At A the maximizer must choose max of B and C, so A calls B first.
  • At B it the minimizer must choose min of D and E and hence calls D first.
  • At D, the maximizer looks at its left child which is a leaf node.
    • This node returns a value of 3.
    • Now the value of alpha at D is max(-INF, 3) which is 3.
  • To decide whether its worth looking at its right node or not, it checks the condition beta⇐alpha.
    • This is false since beta = +INF and alpha = 3.
    • So it continues the search.
  • D now looks at its right child which returns a value of 5.
    • At D, alpha = max(3, 5) which is 5.
    • Now the value of node D is 5.
  • D returns a value of 5 to B.
    • At B, beta = min(+INF, 5) which is 5.
    • The minimizer is now guaranteed a value of 5 or less.
    • B now calls E to see if he can get a lower value than 5.
  • At E the values of alpha and beta is not -INF and +INF but instead -INF and 5 respectively, because the value of beta was changed at B and that is what B passed down to E.
  • Now E looks at its left child which is 6.
    • At E, alpha = max(-INF, 6) which is 6.
      • Here the condition becomes true. beta is 5 and alpha is 6.
      • So beta⇐alpha is true.
      • Hence it breaks and E returns 6 to B.
    • Note how it did not matter what the value of E's right child is.
      • It could have been +INF or -INF, it still would not matter.
      • We never even had to look at it because the minimizer was guaranteed a value of 5 or less.
      • So as soon as the maximizer saw the 6 he knew the minimizer would never come this way because the minimizer can get a 5 on the left side of B.
        • The Minimizer would always go for the left side of B as this gives a lesser value.
      • This way we do not have to look at that 9 and hence saved computation time.
  • E returns a value of 6 to B.
    • At B, beta = min(5, 6) which is 5.
    • The value of node B is also 5.

So far this is how our game tree looks.

  • The 9 is crossed out because it was never computed.

  • B returns 5 to A.
    • At A, alpha = max(-INF, 5) which is 5.
    • Now the maximizer is guaranteed a value of 5 or greater.
    • A now calls C to see if it can get a higher value than 5.
  • At C, alpha = 5 and beta = +INF.
    • C calls F.
  • At F, alpha = 5 and beta = +INF.
    • F looks at its left child which is a 1.
    • alpha = max(5, 1) which is still 5.
  • F looks at its right child which is a 2.
    • Hence the best value of this node is 2.
    • Alpha still remains 5.
  • F returns a value of 2 to C.
    • At C, beta = min(+INF, 2).
    • The condition beta ⇐ alpha becomes true as beta = 2 and alpha = 5.
    • So it breaks and it does not even have to compute the entire sub-tree of G.
  • The intuition behind this break off is that, at C the minimizer was guaranteed a value of 2 or lesser.
    • But the maximizer was already guaranteed a value of 5 if he choose B.
    • So why would the maximizer ever choose C and get a value less than 2?
      • Again you can see that it did not matter what those last 2 values were.
      • We also saved a lot of computation by skipping a whole sub tree.
  • C now returns a value of 2 to A.
    • Therefore the best value at A is max(5, 2) which is a 5.
  • Hence the optimal value that the maximizer can get is 5.

This is how our final game tree looks like.

  • As you can see G has been crossed out as it was never computed.


chess/programming/alpha-beta_pruning/example.txt · Last modified: 2021/10/31 00:35 by peter

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki