'Given a GameState object, returns a list of (action, probability) pairs
according to the network outputs
If a list of moves is specified, only those moves are kept in the distribution'

def eval_state(self, state, moves=None):

    tensor = self.preprocessor.state_to_tensor(state)
    network_output = self.forward(tensor)
    moves = (moves or state.get_legal_moves())
    return self._select_moves_and_normalize(network_output[0], moves, state.size)
