# Coding an UNBEATABLE Tic Tac Toe AI (Game Theory Minimax Algorithm EXPLAINED)

TLDRThis video tutorial demonstrates how to code an unbeatable Tic Tac Toe AI using the minimax algorithm. The presenter explains the game's finite number of states and how the minimax algorithm, involving a maximizer and minimizer, can be applied to determine the best move. A utility function is introduced to measure game outcomes, and the video walks through an example to illustrate the algorithm's effectiveness. The implementation includes a tic-tac-toe class, various player types, and a minimax function to ensure the AI always makes optimal decisions, leading to an unbeatable AI opponent.

### Takeaways

- 😎 The video demonstrates how to create an unbeatable Tic Tac Toe AI using the minimax algorithm.
- 🧠 The AI is tested against a weak player and other smart AI players, proving its invincibility.
- 📊 There are a finite number of game states in Tic Tac Toe, calculated to be approximately 20,000.
- 🔢 The minimax algorithm is based on the concept of a Maximizer and a Minimizer, aiming to maximize wins and minimize losses.
- 🎯 The utility function is introduced as a measure of the value of the game's final result.
- 🌳 The script explains how to build a decision tree to determine the best move by exploring all possible game scenarios.
- 🏆 The video provides a step-by-step guide on implementing the minimax algorithm in a Tic Tac Toe game.
- 👾 The AI is designed to be unbeatable by always choosing the optimal move to either win or force a draw.
- 👨💻 The code includes a class structure with different player types: human, random computer, and smart computer.
- 🔄 The minimax function is implemented recursively to evaluate the best move at each stage of the game.

### Q & A

### What is the minimax algorithm and how does it apply to Tic Tac Toe?

-The minimax algorithm is a decision-making algorithm used in game theory, particularly for zero-sum games like Tic Tac Toe. It involves two players: a maximizer and a minimizer. The algorithm helps to find the optimal move by assuming the opponent will also play optimally. In Tic Tac Toe, the algorithm is used to predict all possible moves and outcomes, allowing the AI to choose the best move that minimizes the chance of losing and maximizes the chance of winning.

### How many possible states are there in a game of Tic Tac Toe?

-There are approximately 20,000 possible states in a game of Tic Tac Toe. This is calculated by considering that each of the nine squares on the board has three possible states (empty, X, or O), leading to 3^9 possible combinations. However, not all of these states are reachable in a realistic game between two players.

### What is a utility function in the context of the minimax algorithm?

-A utility function is a scoring system that assigns a numerical value to a game state, indicating its desirability. In the context of the minimax algorithm, the utility function helps to determine how valuable a particular game state is to the player. For example, in Tic Tac Toe, a win might be assigned a positive value, a loss a negative value, and a draw a value of zero.

### How does the AI determine the best move in Tic Tac Toe using the minimax algorithm?

-The AI determines the best move by simulating all possible moves from the current state of the game, evaluating each move using the utility function, and then choosing the move that results in the highest utility value for the maximizing player (X) while minimizing the utility for the opponent (O). This process is recursive and continues until the game reaches a terminal state (win, loss, or draw) or all possible moves have been evaluated.

### What is the purpose of the 'winner' function in the Tic Tac Toe AI?

-The 'winner' function checks if a player has won the game after a move is made. It does this by examining the rows, columns, and diagonals of the board to see if any of them contain the same letter (X or O) without interruption. If a winning condition is met, the function returns true, indicating that the game has ended and the player has won.

### How does the AI handle draws in Tic Tac Toe?

-In the minimax algorithm, draws are handled by assigning a utility value of zero to game states where no player has won and the board is full. This value is propagated back up the decision tree, and the AI will choose moves that avoid unfavorable outcomes (losses) even if it means settling for a draw.

### What is the role of the 'empty squares' function in the Tic Tac Toe AI?

-The 'empty squares' function is used to determine if there are any available moves left on the board. It checks each square to see if it is empty and returns a count of the empty squares. This information is crucial for the minimax algorithm to know when to stop evaluating further moves (when the board is full) and to decide the best move based on the remaining possibilities.

### How does the AI handle different types of players in Tic Tac Toe?

-The AI handles different types of players by using a class hierarchy. There is a base 'Player' class with derived classes for 'HumanPlayer', 'RandomComputerPlayer', and 'SmartComputerPlayer'. Each class implements a method to determine the next move. 'HumanPlayer' takes user input, 'RandomComputerPlayer' chooses a random available move, and 'SmartComputerPlayer' uses the minimax algorithm to choose the optimal move.

### What is the significance of the 'available moves' function in the Tic Tac Toe AI?

-The 'available moves' function identifies which squares on the board are still empty and can be played. This is important for both human and AI players to know where they can make their next move. For the AI, it provides the list of potential moves to evaluate using the minimax algorithm.

### How does the AI decide to make the first move in Tic Tac Toe?

-In the provided script, if the game is at the start (empty), the 'SmartComputerPlayer' makes a random move. This is because the first move in Tic Tac Toe does not have a significant impact on the game's outcome, and any move can be considered equally valid at this stage.

### Outlines

### 🎮 Creating an Undefeatable Tic-Tac-Toe AI

The speaker describes their experience coding a tic-tac-toe game and teaching a computer to play it. They created a weak player for testing and compared it to a smart AI player. The smart player, using the minimax algorithm, was found to be unbeatable. The speaker explains the finite number of game states in tic-tac-toe, which allows the minimax algorithm to be effective. They also discuss the concept of a utility function used to evaluate the value of different game states, and provide an example of how the minimax algorithm is applied in a partially completed game of tic-tac-toe.

### 💡 Implementing the Minimax Algorithm in Tic-Tac-Toe

The speaker delves into the implementation of the tic-tac-toe game, detailing the class structure and functions used. They explain the minimax algorithm's role in determining the best move by exploring all possible game states. The utility function is further elaborated upon, with the speaker sharing their method for assigning values to game outcomes based on the number of steps to win. The speaker also outlines the process of propagating utility values back up the game tree to find the optimal path. The paragraph concludes with a discussion of the different types of players implemented in the game, including human, random computer, and smart computer players.

### 👾 Coding the Tic-Tac-Toe Game and Players

The speaker provides an in-depth look at the coding of the tic-tac-toe game, including the initialization of the game board and the winner variable. They describe the functions for making moves, checking for winners, and determining available moves. The speaker also explains the creation of a superclass 'Player' and subclasses for different types of players. The minimax function is further detailed, explaining how it is used to simulate different game outcomes and choose the best move. The paragraph ends with a description of the 'play' function, which orchestrates the game by alternating between players and checking for game-ending conditions.

### Mindmap

### Keywords

### 💡Tic Tac Toe

### 💡Minimax Algorithm

### 💡Maximizer and Minimizer

### 💡Utility Function

### 💡Game States

### 💡Recursive Algorithm

### 💡Backtracking

### 💡Human Player

### 💡Random Computer Player

### 💡Smart Computer Player

### 💡Game Tree

### Highlights

Coding a Tic Tac Toe AI that cannot be defeated using the minimax algorithm.

Creating a weak player to test the AI against, confirming the AI's unbeatable status.

Tic Tac Toe has a finite number of game states, approximately 20,000.

Many game states are unreachable in realistic play, reducing the actual number of states.

The minimax algorithm is used to teach the computer to play Tic Tac Toe optimally.

Minimax is based on the concepts of a Maximizer and a Minimizer.

The utility function measures the value of the final result in the game tree.

An example is given of using the minimax algorithm in a partially completed game of Tic Tac Toe.

The utility function is used to assign values to game states, aiming for a quick win.

The minimax algorithm is explained through a step-by-step example of game play.

The implementation of the Tic Tac Toe game includes a class with methods for board management.

The game checks for a winner after each move using a specific function.

Different types of players are created, including human, random computer, and smart computer players.

The smart computer player uses the minimax algorithm to make optimal moves.

The minimax function is detailed, including its recursive nature and decision-making process.

The game is played by combining all components, allowing for various player configurations.

The final game output includes the ability to print the game state for visualization.