| 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("----") | |