Ga naar hoofdinhoud

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 erutility
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, -1 of 0.

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

Python
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 →.