1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
|
def calc_move(self, pBoard, pDue):
score =0
validMoves = pBoard.find_possible_moves(CELL_OWN)
if len(validMoves) == 1:
return validMoves[0]
for move in validMoves:
pBoard.do_move(move)
score_move = self.max_value(pBoard, move, pDue, -float('inf'), float('inf'))
if score_move > score:
score = score_move
best_move = move
return best_move
def max_value(self, pBoard, move, pDue, alpha, beta):
if pDue - time.time() < 0.5 or move.is_EOG():
return self.evaluation(move, CELL_OWN)
v = -float('inf')
validMoves = pBoard.find_possible_moves(CELL_OWN)
for single_move in validMoves:
pBoard.do_move(single_move)
v = max(v, self.min_value(pBoard, single_move, pDue, alpha, beta))
if v >= beta:
return v
alpha = max(alpha, v)
return v
def min_value(self, pBoard, move, pDue, alpha, beta):
if pDue - time.time() < 0.5 or move.is_EOG():
return self.evaluation(move, CELL_OTHER)
v = float('inf')
validMoves = pBoard.find_possible_moves(CELL_OTHER)
for single_move in validMoves:
pBoard.do_move(single_move)
v = min(v, self.max_value(pBoard, single_move, pDue, alpha, beta))
if v <= alpha:
return v
beta = min(beta, v)
return v |
Partager