[update] Background information and add Dutch translation.

This commit is contained in:
2026-03-15 16:19:01 +01:00
parent f489442cb5
commit 7118738818
2 changed files with 167 additions and 8 deletions
+149
View File
@@ -0,0 +1,149 @@
# Vier op een Rij AI: Hoe denkt de computer?
## 1. Het Virtuele Bord
De computer ziet geen gekleurde schijfjes op een bord. Voor de computer is het bord een tabel met cijfers:
- **0** = Lege plek
- **1** = Gele schijf
- **2** = Rode schijf
Het bord heeft 7 kolommen en 6 rijen. Na elke zet controleert de computer alle richtingen (horizontaal, verticaal en schuin) om te kijken of iemand vier op een rij heeft.
---
## 2. Wat is een "Ply"?
Een **ply** is één zet van een speler. Als de AI op ply 6 staat, kijkt hij 6 zetten vooruit. Omdat spelers om de beurt spelen, betekent ply 6 dat de AI 3 van zijn eigen zetten en 3 zetten van de tegenstander bedenkt.
Meer plies = slimmere zetten, maar het duurt langer om te berekenen. Op de ESP32-C3 is ply 4 bijna meteen klaar, ply 6 duurt ongeveer een seconde, en ply 8-10 kan enkele seconden duren. Terwijl de AI nadenkt, zie je een knipperend lichtje.
---
## 3. De Minimax Strategie
### Het basisidee
Stel je voor dat je Vier op een Rij speelt tegen een vriend. Voordat je je schijfje laat vallen, denk je: "Als ik mijn schijfje hier leg, wat doet mijn vriend dan? En wat doe ik daarna?" Dat is precies wat de computer doet, alleen kijkt hij naar **alle** mogelijke zetten, niet alleen een paar.
### Twee spelers, twee doelen
De AI noemt de twee spelers **Max** (de computer zelf) en **Min** (jij):
- **Max** wil de hoogste score (de computer wint).
- **Min** wil de laagste score (jij wint).
De AI gaat ervan uit dat jij altijd je beste zet doet. Hij hoopt niet dat jij een fout maakt.
### Een eenvoudig voorbeeld
Stel je voor dat er nog maar 3 kolommen over zijn en de AI kijkt 2 zetten vooruit. Hij maakt een soort boom:
```text
Beurt van de AI (Max - kiest de hoogste score)
/ | \\
kolom 2 kolom 3 kolom 4
/ \\ / \\ / \\
Jouw beurt (Min - kiest de laagste score)
... ... ... ... ... ...
+5 -3 +2 +8 -1 +4
```
1. Na kolom 2: jij zou de laagste score kiezen (-3).
2. Na kolom 3: jij zou de laagste score kiezen (+2).
3. Na kolom 4: jij zou de laagste score kiezen (-1).
De AI kiest dan de kolom met de hoogste score die overblijft, in dit geval kolom 3 (+2).
### Scoren: Hoe de AI een Bord Waardeert
Na het doorspelen van een "wat als?"-scenario, moet de AI beslissen: is dit een goed of slecht resultaat? Hij gebruikt een eenvoudig scoringsysteem met drie mogelijke uitkomsten:
- **+1000 of meer: "Ik win!"** De AI heeft een manier gevonden om vier op een rij te krijgen. Hoe sneller hij kan winnen, hoe hoger de score. Winnen in 2 zetten scoort hoger dan winnen in 6 zetten. Daarom gaat de AI altijd voor de snelste overwinning.
- **-1000 of minder: "Ik verlies!"** De tegenstander krijgt vier op een rij. Hoe sneller hij verliest, hoe slechter de score. Dit zorgt ervoor dat de AI het hardst vecht tegen zetten die dreigen tot een direct verlies.
- **0: "Ik weet het nog niet."** De AI heeft zo ver vooruit gekeken als hij kon (hij is door zijn plies heen) en niemand heeft gewonnen. Hij noemt deze positie "neutraal" — niet goed, niet slecht.
Dat is alles — de AI geeft geen extra punten voor drie op een rij, het controleren van het midden, of andere slimme trucs. Hij vertrouwt volledig op het ver vooruit kijken om te bepalen welke zetten tot een overwinning leiden en welke niet. Als hij binnen zijn zoekdiepte geen winst of verlies ziet, ziet elke positie er hetzelfde uit.
### Waarom de middelste kolom belangrijk is
Ook al geeft de AI geen bonuspunten voor spelen in het midden,
hij controleert altijd eerst de middelste kolom (kolom 3), en werkt dan naar buiten toe (2, 4, 1, 5, 0, 6).
De middelste kolom is betrokken bij meer mogelijke winnende lijnen dan de randen, dus door deze eerst te controleren,
vindt de AI sneller goede zetten en kan hij slechte zetten eerder overslaan (dankzij alpha-beta snoeien).
---
## 4. Alpha-Beta Snoeien: De Slimme Snelweg
### Het probleem
Acht plies vooruit kijken in Vier op een Rij betekent miljoenen bordposities verkennen.
Zelfs een snelle microcontroller kan ze niet allemaal in een redelijke tijd controleren.
### De oplossing
**Alpha-Beta pruning** is een manier om takken van de boom over te slaan die de uiteindelijke beslissing niet kunnen veranderen.
_"to prune" betekent snoeien of snijden_
Stel je voor dat je een verjaardagscadeau koopt.
Je gaat naar Winkel A en vindt een leuk speelgoed voor 10 euro. Dan ga je naar Winkel B.
Het eerste artikel dat je ziet, kost 15 euro, en je merkt dat alles in Winkel B nog duurder is.
Je hoeft niet elk artikel in Winkel B te controleren — je weet al dat Winkel A beter is.
Je verlaat Winkel B en bespaart tijd.
De AI doet hetzelfde:
- **Alpha** is de beste score die de AI (Max) tot nu toe heeft gevonden. Denk hierbij aan: "Ik weet al dat ik ten minste dit goed kan doen."
- **Beta** is de beste score die de tegenstander (Min) tot nu toe heeft gevonden. Denk hierbij aan: "De tegenstander weet al dat hij mij tot hoogstens dit kan beperken."
Wanneer de AI een tak verkent en ontdekt dat de score nooit beter kan worden dan wat hij al heeft (beta <= alpha),
**snijdt** hij (snijdt hij af) die hele tak. Hij slaat alle overgebleven zetten in die tak over, omdat ze het resultaat niet kunnen veranderen.
### Hoeveel helpt het?
In de praktijk laat snoeien de AI 50-90% van de posities overslaan die hij anders zou moeten controleren.
Daarom is de volgorde van de kolommen belangrijk — de AI controleert eerst de middelste kolom (kolom 3) en werkt dan naar buiten toe.
Goede zetten zitten vaak in het midden, dus door deze eerst te controleren, leidt dat tot betere snoeiing en een snellere zoektocht.
---
## 5. De Drie Fases van de AI
De AI doet zijn werk in drie stappen:
1. **Kan ik nu winnen?** De AI probeert in elke kolom een schijfje te leggen. Als hij ergens vier op een rij kan maken, doet hij dat meteen. Geen verdere berekeningen nodig.
2. **Kan de tegenstander volgende beurt winnen?** De AI controleert of jij ergens vier op een rij kunt maken. Zo ja, dan blokkeert hij die kolom. Dit overslaan zou een grote fout zijn.
3. **Diepe zoektocht.** Als er geen directe winst of bedreiging is, voert de AI de volledige minimax-strategie uit met alpha-beta snoeien.
Deze drie stappen maken de AI zowel snel (directe reacties op duidelijke zetten) als slim (diep nadenken als het nodig is).
---
## 6. Demo-modus: Verschillende Vaardigheden
In de demo-modus spelen twee AI's tegen elkaar.
Om het spannend te maken (in plaats van altijd gelijkspel), krijgt elke speler willekeurig een andere diepte toegekend.
De ene speler kijkt bijvoorbeeld 5 zetten vooruit, de andere maar 3.
De sterkere speler kan zo winnende zetten vinden die de zwakkere mist. Wie sterker is, wordt elke keer willekeurig bepaald.
---
## 7. Snelle Bediening
De ESP32-C3 heeft maar één kern. Als de AI nadenkt, kan hij de bediening een paar seconden blokkeren.
Twee trucs zorgen ervoor dat het spel soepel blijft:
1. **Knopcontrole tijdens het zoeken:** Tijdens het nadenken controleert de AI af en toe of je op de knop hebt gedrukt. Zo ja, stopt hij meteen met nadenken.
2. **Stopvlag:** Een wereldwijde vlag (`abortAi`) zorgt ervoor dat het nadenken meteen stopt als je op de knop drukt. Binnen microseconden stopt de hele berekening.
---
## Meer Weten?
- [Vier op een Rij - Wiskundige Oplossing (Wikipedia)](https://nl.wikipedia.org/wiki/Vier_op_een_rij)
- [Minimax Algorithme (Wikipedia)](https://nl.wikipedia.org/wiki/Minimax)
- [Alpha-Beta Pruning (Wikipedia)](https://en.wikipedia.org/wiki/Alpha%E2%80%93beta_pruning)
+18 -8
View File
@@ -53,27 +53,37 @@ Imagine there are only 3 columns left and the AI can look 2 moves ahead. It buil
The AI compares -3, +2, and -1, and picks column 3 because +2 is the best it can guarantee.
### Scoring
### Scoring: How the AI Rates a Board
The AI assigns scores to board positions:
After playing out a "what if?" scenario, the AI needs to decide: is this a good result or a bad one? It uses a very simple scoring system with only three possible outcomes:
- **+1000 or more:** The AI wins. A faster win gets a higher score, so the AI goes for the quickest victory.
- **-1000 or less:** The opponent wins. A faster loss gets a more negative score, so the AI fights hardest against immediate threats.
- **0:** Nobody has won and the search depth ran out. The position is neutral.
- **+1000 or more: "I win!"** The AI found a way to get four in a row. The bonus points above 1000 depend on how quickly it can win. Winning in 2 moves scores higher than winning in 6 moves. This is why the AI always goes for the fastest victory — it never wastes time when it can finish the game.
This scoring is why the AI has "killer instinct" - it doesn't just try to win, it tries to win as fast as possible.
- **-1000 or less: "I lose!"** The opponent gets four in a row. Losing sooner gets an even worse score. This makes the AI fight hardest against moves that threaten an immediate loss.
- **0: "I don't know yet."** The AI looked as far ahead as it could (it ran out of plies) and nobody won. It simply calls this position "neutral" — not good, not bad.
That's it — the AI does not give extra points for having three in a row, controlling the center, or any other clever trick. It relies entirely on looking many moves ahead to figure out which moves lead to wins and which ones don't. If it can't see a win or loss within its search depth, every position looks the same.
### Why the center column matters
Even though the AI doesn't give bonus points for playing in the center, it always checks the center column first (column 3), then works outward (2, 4, 1, 5, 0, 6).
The center column is involved in more possible winning lines than the edges, so checking it first helps the AI find good moves faster and skip bad ones sooner (thanks to alpha-beta pruning).
## 4. Alpha-Beta Pruning: The Smart Shortcut
### The problem
Looking ahead 8 plies in Connect 4 means exploring millions of board positions. Even a fast microcontroller can't check them all in a reasonable time.
Looking ahead 8 plies in Connect 4 means exploring millions of board positions.
Even a fast microcontroller can't check them all in a reasonable time.
### The solution
**Alpha-Beta pruning** is a way to skip branches of the tree that can't possibly change the final decision.
Think of it like shopping for a birthday present. You visit Shop A and find a nice toy for 10 euros. Then you go to Shop B. The first item you see costs 15 euros, and you notice everything else in Shop B is even more expensive. You don't need to check every item in Shop B - you already know Shop A is better. You leave Shop B and save time.
Think of it like shopping for a birthday present. You visit Shop A and find a nice toy for 10 euros.
Then you go to Shop B. The first item you see costs 15 euros, and you notice everything else in Shop B is even more expensive.
You don't need to check every item in Shop B - you already know Shop A is better. You leave Shop B and save time.
The AI does the same thing: