Ga naar hoofdinhoud

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 erutility
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, -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
  • a: X wint → +1.
  • b: O wint → -1.
  • c: remise → 0.

Bouw zelf en test

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