def play_valid_move(self, position, move_probs): for move in sorted_moves(move_probs): if go.is_eyeish(position.board, move): continue candidate_pos = position.play_move(move, mutate=True) if candidate_pos is not None: return candidate_pos return position.pass_move(mutate=True)
def play_valid_move(self, position, move_probs): for move in sorted_moves(move_probs): if go.is_eyeish(position.board, move): continue try: candidate_pos = position.play_move(move, mutate=True) except go.IllegalMove: continue else: return candidate_pos return position.pass_move(mutate=True)
def test_is_eyeish(self): board = load_board(''' .XX...XXX X.X...X.X XX.....X. ........X XXXX..... OOOX....O X.OXX.OO. .XO.X.O.O XXO.X.OO. ''') B_eyes = pc_set('A2 A9 B8 J7 H8') W_eyes = pc_set('H2 J1 J3') not_eyes = pc_set('B3 E5') for be in B_eyes: self.assertEqual(go.is_eyeish(board, be), BLACK, str(be)) for we in W_eyes: self.assertEqual(go.is_eyeish(board, we), WHITE, str(we)) for ne in not_eyes: self.assertEqual(go.is_eyeish(board, ne), None, str(ne))
def test_is_eyeish(self): board = utils_test.load_board(''' .XX...XXX X.X...X.X XX.....X. ........X XXXX..... OOOX....O X.OXX.OO. .XO.X.O.O XXO.X.OO. ''') B_eyes = coords_from_kgs_set('A2 A9 B8 J7 H8') W_eyes = coords_from_kgs_set('H2 J1 J3') not_eyes = coords_from_kgs_set('B3 E5') for be in B_eyes: self.assertEqual(go.is_eyeish(utils_test.BOARD_SIZE, board, be), BLACK, str(be)) for we in W_eyes: self.assertEqual(go.is_eyeish(utils_test.BOARD_SIZE, board, we), WHITE, str(we)) for ne in not_eyes: self.assertEqual(go.is_eyeish(utils_test.BOARD_SIZE, board, ne), None, str(ne))
def step(self, pos_cur, epsilon): state = features.extract_features(pos_cur) move_probs = self.sess.run(self.action_logits, feed_dict={self.observation_placeholder: state[None, :]})[0] move_probs = move_probs.reshape([go.N, go.N]) coords = [(a, b) for a in range(go.N) for b in range(go.N)] if random.random() < epsilon : random.shuffle(coords) else: coords = sorted(coords, key=lambda c: move_probs[c], reverse=True) for move in coords: if go.is_eyeish(pos_cur.board, move): continue try: pos_next = pos_cur.play_move(move, mutate=False) except go.IllegalMove: continue else: return [pos_next, state, move[0]*go.N+move[1], 0] return None
def is_move_reasonable(position, move): return position.is_move_legal(move) and go.is_eyeish( position.board, move) != position.to_play
def is_move_reasonable(position, move): # A move is reasonable if it is legal and doesn't fill in your own eyes. return position.is_move_legal(move) and go.is_eyeish( position.board, move) != position.to_play
def is_move_reasonable(position, move): # A move is reasonable if it is legal and doesn't fill in your own eyes. return position.is_move_legal(move) and go.is_eyeish(position.board, move) != position.to_play
def is_move_reasonable(position, move): return position.is_move_legal(move) and go.is_eyeish(position.board, move) != position.to_play