This commit is contained in:
2023-05-23 15:52:09 +08:00
parent e8f9c8a287
commit 663edbb5e2
88 changed files with 6250 additions and 0 deletions
+41
View File
@@ -0,0 +1,41 @@
import numpy as np
from tugo.agent.base import Agent
from tugo.agent.helpers_fast import is_point_an_eye
from tugo.goboard import Move
from tugo.gotypes import Point
__all__ = ['FastRandomBot']
class FastRandomBot(Agent):
def __init__(self):
Agent.__init__(self)
self.dim = None
self.point_cache = []
def _update_cache(self, dim):
self.dim = dim
rows, cols = dim
self.point_cache = []
for r in range(1, rows + 1):
for c in range(1, cols + 1):
self.point_cache.append(Point(row=r, col=c))
def select_move(self, game_state):
"""Choose a random valid move that preserves our own eyes."""
dim = (game_state.board.num_rows, game_state.board.num_cols)
if dim != self.dim:
self._update_cache(dim)
idx = np.arange(len(self.point_cache))
np.random.shuffle(idx)
for i in idx:
p = self.point_cache[i]
if game_state.is_valid_move(Move.play(p)) and \
not is_point_an_eye(game_state.board,
p,
game_state.next_player):
return Move.play(p)
return Move.pass_turn()