added alpha-beta-pruning-functionality
This commit is contained in:
16
minimax.py
16
minimax.py
@@ -4,7 +4,8 @@ import random
|
||||
|
||||
class Minimax:
|
||||
|
||||
def minimax(self, current_field, is_maximizing, player1_char, player2_char):
|
||||
def minimax(self, current_field, is_maximizing, player1_char, player2_char, alpha=float('-inf'),
|
||||
beta=float('inf')):
|
||||
checkwin = self.check_win(current_field, player1_char, player2_char)
|
||||
if checkwin == (1, 1): # Draw
|
||||
return 0, 0, 0
|
||||
@@ -20,17 +21,26 @@ class Minimax:
|
||||
for k in range(0, len(current_field), 2):
|
||||
if current_field[j][k] == " ":
|
||||
current_field[j][k] = player1_char if not is_maximizing else player2_char
|
||||
score = self.minimax(current_field, not is_maximizing, player1_char, player2_char)[0]
|
||||
score = self.minimax(current_field, not is_maximizing, player1_char, player2_char, alpha, beta)[
|
||||
0]
|
||||
current_field[j][k] = " "
|
||||
|
||||
if is_maximizing and score > best_score:
|
||||
best_score = score
|
||||
best_move = j, k
|
||||
alpha = max(alpha, best_score)
|
||||
if alpha >= beta:
|
||||
break
|
||||
elif not is_maximizing and score < best_score:
|
||||
best_score = score
|
||||
best_move = j, k
|
||||
beta = min(beta, best_score)
|
||||
if alpha >= beta:
|
||||
break
|
||||
|
||||
if alpha >= beta:
|
||||
break
|
||||
|
||||
# else:
|
||||
if best_move is None:
|
||||
return 0, -1, -1 # No available moves
|
||||
else:
|
||||
|
||||
Reference in New Issue
Block a user