Bouwsteen 7 — utility(bord)
Leerdoel: je vertaalt een terminale positie naar een getal, +1,
-1 of 0. Dat getal is waar minimax straks mee rekent.
Wat doet deze functie?
Minimax wil de uitkomst als een getal:
| Wat gebeurt er | utility |
|---|---|
| X wint | +1 |
| O wint | −1 |
| Remise (vol bord, geen winnaar) | 0 |
Waarom zo? X is MAX en wil maximaliseren, dus een hoger getal is beter
voor X. O is MIN en wil minimaliseren, dus een lager getal is beter voor
O. Met +1, −1 en 0 werken max(...) en min(...) van Python
meteen goed.
Hergebruik winner
Net als terminal leunt deze functie op winner: één aanroep, drie
gevallen.
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
Bij a wint X, dus +1. Bij b wint O, dus -1. c is remise, 0.
Bouw zelf en test
Code-omgeving wordt voorbereid…
Tip
Sla winner(bord) op in een variabele en vergelijk die met "X" en
met "O". Blijft er niets over, dan is het remise.
Antwoord
def utility(bord):
w = winner(bord)
if w == "X":
return 1
if w == "O":
return -1
return 0
Door naar bouwsteen 8: helpers →.