Alpha-beta algoritme
Geplaatst: zo 01 mei 2011, 21:15
Ik ben bezig met het schrijven van een AI voor een bordspel. Om wat met de gangbare technieken te testen besloot ik het eerst eenvoudig aan te pakken en een vier-op-een-rij AI te schrijven.
Momenteel heb ik het zodanig voor elkaar gekregen dat alpha-beta werkt zoals zou moeten. (M.a.w. ik krijg de correcte scores terug bij gebruik van een eenvoudige quotering van de posities)
Nu zou ik graag de volledige variant verkrijgen (tot maxdepth) en niet enkel de beste zet (depth=0) om meer inzicht te krijgen in de werking van quotering/zoeken.
Ik heb volgende code in python(bevat uiteraard veel meer maar ik geef enkel het essentiële) :
Iemand enig idee?
Noot:
- spelers worden gesymboliseerd door getallen 1 & 2 dus geeft 3-player de andere speler
- regel 11-12 slaat de beste zet op maar dus zonder de volledige variant
Momenteel heb ik het zodanig voor elkaar gekregen dat alpha-beta werkt zoals zou moeten. (M.a.w. ik krijg de correcte scores terug bij gebruik van een eenvoudige quotering van de posities)
Nu zou ik graag de volledige variant verkrijgen (tot maxdepth) en niet enkel de beste zet (depth=0) om meer inzicht te krijgen in de werking van quotering/zoeken.
Ik heb volgende code in python(bevat uiteraard veel meer maar ik geef enkel het essentiële) :
Code: Selecteer alles
01 def alphabeta(node, depth, maxdepth , alpha, beta, player, maxplayer):
02 global bestmove
03 if depth == maxdepth:
04 return node.value(player)
05 if player == maxplayer:
06 for child in node.legalMoves():
07
node.makeMove(child,player)
08
score = alphabeta( node, depth+1, maxdepth, alpha, beta, 3-player, maxplayer)
09
node.undoLastMove()
10
if score> alpha:
11
if depth==0:
12
bestmove = child
13
alpha = score
14
if beta <= alpha:
15
break
16 return alpha
17 else:
18 for child in node.legalMoves():
19
node.makeMove(child,player)
20
score = alphabeta( node, depth+1, maxdepth, alpha, beta, 3-player, maxplayer)
21
node.undoLastMove()
22
if score<beta:
23
beta = score
24
if beta <= alpha:
25
break
26 return beta
Noot:
- spelers worden gesymboliseerd door getallen 1 & 2 dus geeft 3-player de andere speler
- regel 11-12 slaat de beste zet op maar dus zonder de volledige variant