9.13 Bouwsteen 7 — utility(bord)
Leerdoel: je vertaalt een terminale positie naar een getal: +1 /
-1 / 0. Dat getal is waar minimax straks op rekent.
Wat doet deze functie?
Minimax wil de uitkomst in een getal uitdrukken:
| Wat gebeurt er | utility |
|---|---|
| X wint | +1 |
| O wint | −1 |
| Remise (vol bord, geen winnaar) | 0 |
Waarom deze keuze? Omdat X = MAX wil maximaliseren → een hoger getal is
beter voor X. O = MIN wil minimaliseren → een lager getal is beter voor O.
Met +1 / −1 / 0 werken max(...) en min(...) van Python
direct correct.
Hergebruik winner
Net als terminal leunt deze functie op winner — drie cases, één
enkele oproep. Heel kort.
Specificatie
- Input: een terminale bord (de aanroeper garandeert dat
terminal(bord) == True). - Output:
1,-1of0.
Voorspel
Voor elk van deze terminale borden — welke utility?
a = [["X","X","X"], ["O","O",None], [None]*3] # X heeft een rij
b = [["O","X","X"], ["O","X",None], ["O",None,None]] # O heeft kolom 0
c = [["X","O","X"], ["X","O","O"], ["O","X","X"]] # remise
Antwoord
a: X wint →+1.b: O wint →-1.c: remise →0.
Bouw zelf en test
Code-omgeving wordt voorbereid…
Tip
Drie if's achter elkaar, of een if/elif/else. Het patroon dat
veel mensen gebruiken:
w = winner(bord)
if w == "X":
return 1
if w == "O":
return -1
return 0
Of compact in één regel met een ternary expression, maar drie regels zijn duidelijker.
Door naar stap 14: bouwsteen 8 — helpers →.