def search_ga(max_gens, pop_size, ad_mut_stp, mu_lambda):
    generation = 0
    population = init_population(pop_size)
    best = fitness_func(population)
    while generation < max_gens:
        new_population = mutate_random(tuple(population))
        new_best = fitness_func(new_population)
        if new_best <= best:
            LOG.debug("Better population>{0}".format(new_population))
            population = new_population
            best = new_best
        LOG.rbf("Generation>{0}:new best>{1}".format(generation, best))
        generation = generation + 1
def search_es(max_gens, pop_range, ad_mut_stp, mu_lambda):
    pop = init_population(pop_range)
    best = fitness_func(pop[0])
    p = 1.5
    for gen in range(0, max_gens-1):
        children = mutate(pop[0], pop[1], p)
        LOG.debug("children>{0}".format(children))
        fitness = fitness_func(children[0])
        if fitness <= best:
            best = fitness
            pop = children
            p = 1.5
        else:
            p = 1.5 ** (-1/4)
        if mu_lambda:
            pop = init_population(pop_range)
            best = fitness_func(pop[0])
        LOG.rbf("Generation>{0}:new best>{1}".format(gen, best))
    return best
def search_es(max_gens, pop_range, ad_mut_stp, mu_lambda):
    pop = init_population(pop_range)
    best = fitness_func(pop[0])
    p = 1.5
    for gen in range(0, max_gens - 1):
        children = mutate(pop[0], pop[1], p)
        LOG.debug("children>{0}".format(children))
        fitness = fitness_func(children[0])
        if fitness <= best:
            best = fitness
            pop = children
            p = 1.5
        else:
            p = 1.5**(-1 / 4)
        if mu_lambda:
            pop = init_population(pop_range)
            best = fitness_func(pop[0])
        LOG.rbf("Generation>{0}:new best>{1}".format(gen, best))
    return best