73 lines
3.6 KiB
Markdown
73 lines
3.6 KiB
Markdown
# 📑 Technical Specification: Connect 4 AI Logic
|
|
|
|
## 1. Board Representation: The 2D Grid Model
|
|
|
|
The game state is maintained in a 2D array of signed integers: `int8_t board[COLS][ROWS]`. This structure mirrors the physical dimensions of a standard Connect 4 rack.
|
|
|
|
### Data Structure
|
|
|
|
- **Dimensions:** 7 columns (X) by 6 rows (Y).
|
|
- **Mapping:** \* `0`: Null/Empty slot.
|
|
- `1`: Player 1 (Yellow / Human).
|
|
- `2`: Player 2 (Red / AI).
|
|
- **Hardware Translation:** To drive the 8x8 NeoPixel matrix, the 2D coordinates are flattened into a 1D index using the specific mapping:
|
|
$$Index = (y \times 8) + x$$
|
|
_Note: The 8th column ($x=7$) is ignored by the game logic and reserved for UI borders._
|
|
|
|
---
|
|
|
|
## 2. Positional Evaluation
|
|
|
|
Since Connect 4 has a state-space complexity of approximately $4.5 \times 10^{12}$, the ESP32 cannot calculate every possible outcome to the end of the game from the first move. Instead, it uses a **Heuristic Evaluation Function** to score board positions.
|
|
|
|
### Scoring Heuristics
|
|
|
|
1. **Terminal Victory:** Any move that results in a 4-in-a-row is valued at $+1000$ (for AI) or $-1000$ (for Human).
|
|
2. **Temporal Weighting:** To ensure the AI chooses the _fastest_ path to victory and the _longest_ path to defeat, the score is adjusted by the search depth:
|
|
- **AI Win:** $1000 + depth$
|
|
- **Human Win:** $-1000 - depth$
|
|
3. **Column Geometry:** The AI inherently values central columns higher than edges. This is not explicitly hardcoded in the score but emerges from the search logic: a disc in column 3 can be part of horizontal, vertical, and diagonal win lines in both directions, making it mathematically more valuable.
|
|
|
|
---
|
|
|
|
## 3. Determining the Value of a "Half-Move"
|
|
|
|
A "half-move" is a single disc placement by one player. Its value is determined via the **Minimax Algorithm** with **Alpha-Beta Pruning**.
|
|
|
|
### The Recursive Search Process
|
|
|
|
The AI simulates a move (a "branch") and then recursively simulates the opponent's best possible responses. The value of a move is the "minimized" maximum score possible from that branch.
|
|
|
|
### Optimization: Alpha-Beta Pruning
|
|
|
|
To prevent the ESP32-C3 from timing out, the engine "prunes" branches that are mathematically guaranteed to be worse than previously explored paths.
|
|
|
|
- **Alpha ($\alpha$):** The best score the AI (Maximizer) can guarantee.
|
|
- **Beta ($\beta$):** The best score the Human (Minimizer) can guarantee.
|
|
- **The Cut-off:** If at any point $\beta \leq \alpha$, the branch is abandoned.
|
|
|
|
### 4. Dynamic Move Ordering
|
|
|
|
The efficiency of the value determination is heavily reliant on **Move Ordering**. By evaluating the most promising columns first (starting from the center), the AI finds a high "Alpha" value quickly.
|
|
|
|
- **Search Order:** `3 -> 2 -> 4 -> 1 -> 5 -> 0 -> 6`
|
|
This ordering allows the Alpha-Beta pruning to discard up to 90% of the possible moves in the outer columns without calculating them, significantly reducing the "Thinking" time on the microcontroller.
|
|
|
|
---
|
|
|
|
## 5. Summary of Logic Execution
|
|
|
|
1. **Generate** all valid moves for the current board state.
|
|
2. **Order** moves starting from the center column.
|
|
3. **Execute** Minimax recursion for each move up to the current **Ply**.
|
|
4. **Prune** branches that cannot mathematically improve the current best option.
|
|
5. **Return** the move with the highest heuristic value.
|
|
|
|
---
|
|
|
|
## References
|
|
|
|
- [Information on how to analyze Connect-four](https://www.google.com/search?q=https://en.wikipedia.org/wiki/Connect_Four%23Mathematical_solution)
|
|
- [How does minimax work](https://en.wikipedia.org/wiki/Minimax)
|
|
- [What is aplpha-beta pruning](ttps://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning)
|