'Batch version of get_move. A list of moves is returned (one per state)'

def get_moves(self, states):

    sensible_move_lists = [[move for move in st.get_legal_moves(include_eyes=False)] for st in states]
    all_moves_distributions = self.policy.batch_eval_state(states, sensible_move_lists)
    move_list = ([None] * len(states))
    for (i, move_probs) in enumerate(all_moves_distributions):
        if ((len(move_probs) == 0) or (len(states[i].history) > self.move_limit)):
            move_list[i] = go.PASS_MOVE
        elif ((self.greedy_start is not None) and (len(states[i].history) >= self.greedy_start)):
            max_prob = max(move_probs, key=itemgetter(1))
            move_list[i] = max_prob[0]
        else:
            (moves, probabilities) = zip(*move_probs)
            probabilities = self.apply_temperature(probabilities)
            choice_idx = np.random.choice(len(moves), p=probabilities)
            move_list[i] = moves[choice_idx]
    return move_list
