Minimax Algorithm with Alpha-beta pruning
Ever since the advent of Artificial Intelligence (AI), game playing has been one of the most interesting applications of AI. The first chess programs were written by Claude Shannon and by Alan Turing in 1950, almost as soon as the computers became programmable.
Games such as chess, tic-tac-toe, and Go are interesting because they offer a pure abstraction of the competition between two armies. It is this abstraction which makes game playing an attractive area for AI research.
Minimax is a recursive algorithm which is used to choose an optimal move for a player assuming that the other player is also playing optimally. It is used in games such as tic-tac-toe, go, chess, isola, checkers, and many other two-player games. Such games are called games of perfect information because it is possible to see all the possible moves of a particular game. There can be two-player games which are not of perfect information such as Scrabble because the opponent’s move cannot be predicted.
It is similar to how we think when we play a game: “if I make this move, then my opponent can only make only these moves,” and so on.
Minimax is called so because it helps in minimizing the loss when the other player chooses the strategy having the maximum loss.
· Game Tree: It is a structure in the form of a tree consisting of all the possible moves which allow you to move from a state of the game to the next state.
A game can be defined a search problem with the following components:
· Initial state: It comprises the position of the board and showing whose move it is.
· Successor function: It defines what the legal moves a player can make are.
· Terminal state: It is the position of the board when the game gets over.
· Utility function: It is a function which assigns a numeric value for the outcome of a game. For instance, in chess or tic-tac-toe, the outcome is either a win, a loss, or a draw, and these can be represented by the values +1, -1, or 0, respectively. There are games that have a much larger range of possible outcomes; for instance, the utilities in backgammon varies from +192 to -192. A utility function can also be called a payoff function.
There are two players involved in a game, called MIN and MAX. The player MAX tries to get the highest possible score and MIN tries to get the lowest possible score, i.e., MIN and MAX try to act opposite of each other.
The general process of the Minimax algorithm is as follows:
Step 1: First, generate the entire game tree starting with the current position of the game all the way upto the terminal states. This is how the game tree looks like for the game tic-tac-toe.
Let us understand the defined terminology in terms of the diagram above.
Step 2: Apply
the utility function to get the utility values for all the terminal states.
Step 3:
Determine the utilities of the higher nodes with the help of the utilities of
the terminal nodes. For instance, in the diagram below, we have the utilities
for the terminal states written in the squares.
Let us
calculate the utility for the left node(red) of the layer above the terminal.
Since it is the move of the player MIN, we will choose the minimum of all the
utilities. For this case, we have to evaluate MIN{3, 5, 10}, which we know is
certainly 3. So the utility for the red node is 3.
Similarly, for the green node in the same layer, we will have to evaluate MIN{2,2} which is 2.
Step 4:
Calculate the utility values with the help of leaves considering one layer at a
time until the root of the tree.
Step 5:
Eventually, all the backed-up values reach to the root of the tree, i.e., the
topmost point. At that point, MAX has to choose the highest value. In our
example, we only have 3 layers so we immediately reached to the root but in
actual games, there will be many more layers and nodes. So we have to evaluate
MAX{3,2} which is 3.
Therefore, the best opening move for MAX is the left node(or the red one). This move is called the minimax decision as it maximizes the utility following the assumption that the opponent is also playing optimally to minimize it.
To summarize,
Minimax Decision = MAX{MIN{3,5,10},MIN{2,2}}
= MAX{3,2}
= 3