def Algorithm(myproblem, algorithm_string, population=1024, mutation_probability=None, pool=None):
    """
    Provide a uniform interface to initialize an algorithm class for serial and parallel execution

    :param myproblem: EZFF Problem to be optimized
    :type myproblem: Problem

    :param algorithm_string: EZFF Algorithm to use for optimization. Allowed options are ``NSGAII``, ``NSGAIII`` and ``IBEA``
    :type algorithm_string: str

    :param population: Population size for genetic algorithms
    :type population: int

    :param mutation_probability: Probability of a decision variable to undergo mutation to a random value within defined bounds
    :type mutation_probability: float between 0.0 and 1.0

    :param pool: MPI pool for parallel execution. If this is None, serial execution is assumed
    :type pool: MPIPool or None
    """
    return {"myproblem": myproblem, "algorithm_string": algorithm_string, "population": population, "mutation_probability": mutation_probability, "pool": pool}