def test_flatten(self): self.assertEqual(utils.flatten_coords((0, 0)), 0) self.assertEqual(utils.flatten_coords((0, 3)), 3) self.assertEqual(utils.flatten_coords((3, 0)), 27) self.assertEqual(utils.unflatten_coords(27), (3, 0)) self.assertEqual(utils.unflatten_coords(10), (1, 1)) self.assertEqual(utils.unflatten_coords(80), (8, 8)) self.assertEqual(utils.flatten_coords(utils.unflatten_coords(10)), 10) self.assertEqual(utils.unflatten_coords(utils.flatten_coords((5, 4))), (5, 4))
def test_flatten(self): self.assertEqual(utils.flatten_coords((0, 0)), 0) self.assertEqual(utils.flatten_coords((0, 3)), 3) self.assertEqual(utils.flatten_coords((3, 0)), 27) self.assertEqual(utils.unflatten_coords(27), (3, 0)) self.assertEqual(utils.unflatten_coords(10), (1, 1)) self.assertEqual(utils.unflatten_coords(80), (8, 8)) self.assertEqual(utils.flatten_coords(utils.unflatten_coords(10)), 10) self.assertEqual(utils.unflatten_coords(utils.flatten_coords((5, 4))), (5, 4))
def select_weighted_random(position, move_probabilities): selection = random.random() cdf = move_probabilities.cumsum() selected_move = utils.unflatten_coords( cdf.searchsorted(selection, side="right")) if is_move_reasonable(position, selected_move): return selected_move else: # inexpensive fallback in case an illegal move is chosen. return select_most_likely(position, move_probabilities)
def select_weighted_random(position, move_probabilities): selection = random.random() cdf = move_probabilities.cumsum() selected_move = utils.unflatten_coords( cdf.searchsorted(selection, side="right")) if is_move_reasonable(position, selected_move): return selected_move else: # inexpensive fallback in case an illegal move is chosen. return select_most_likely(position, move_probabilities)
def sorted_moves(probability_array): #coords = [(a, b) for a in range(go.N) for b in range(go.N)] coords = [i for i in range(go.N * go.N)] coords.sort(key=lambda c: probability_array[c], reverse=True) coors = list(map(lambda x: utils.unflatten_coords(x), coords)) return coors