othello / python /benchmark.py
phihung's picture
feat: Exhaustive search
8454f02
from othello import Game, AlphaBetaBot
import tqdm
def run_match(bot1, bot2):
game = Game.default()
while not game.state.ended:
bot = bot1 if game.state.player == "B" else bot2
pos = bot.find_move(game)
if pos >= 0:
game.make_move(pos)
else:
game.pass_move()
w, b = game.state.white_score, game.state.black_score
return 1 if b > w else 2 if w > b else 0
def run_matches(bot1, bot2, n):
cnts = [0, 0, 0]
for _ in tqdm.tqdm(range(n)):
result = run_match(bot1, bot2)
cnts[result] += 1
return cnts
def _str(bot):
return f"AlphaBetaBot({bot.depth}, {bot.exhaustive_depth})"
if __name__ == "__main__":
for i in range(2, 10):
bot1 = AlphaBetaBot(i, 14)
bot2 = AlphaBetaBot(i + 1, 14)
print(f"{_str(bot1)} vs {_str(bot2)})")
draw, win, lost = run_matches(bot1, bot2, 10)
print(f"Win: {win} | Draw: {draw} | Lost: {lost}")
print("----")
print(f"{_str(bot2)} vs {_str(bot1)})")
draw, win, lost = run_matches(bot2, bot1, 10)
print(f"Win: {win} | Draw: {draw} | Lost: {lost}")
print("----")