Exemplo n.º 1
0
 def test_survive_n_works(self, simple_chromosomes,
                          simple_evaluation_function):
     pop1 = Population(chromosomes=simple_chromosomes,
                       eval_function=simple_evaluation_function)
     pop2 = Population(chromosomes=simple_chromosomes,
                       eval_function=simple_evaluation_function)
     pop3 = Population(chromosomes=simple_chromosomes,
                       eval_function=simple_evaluation_function)
     assert len(pop1) == len(simple_chromosomes)
     assert len(pop2.survive(n=50)) == 50
     assert len(pop3.survive(n=75, luck=True)) == 75
Exemplo n.º 2
0
 def test_survive_n_and_p_works(self, simple_evaluation_function):
     chromosomes = list(range(200))
     pop1 = Population(chromosomes=chromosomes,
                       eval_function=simple_evaluation_function)
     pop2 = Population(chromosomes=chromosomes,
                       eval_function=simple_evaluation_function)
     pop3 = Population(chromosomes=chromosomes,
                       eval_function=simple_evaluation_function)
     assert len(pop1.survive(fraction=0.5, n=200)) == 100
     assert len(pop2.survive(fraction=0.9, n=10)) == 10
     assert len(pop3.survive(fraction=0.5, n=190, luck=True)) == 100
Exemplo n.º 3
0
 def test_survive_p_works(self, simple_chromosomes,
                          simple_evaluation_function):
     pop1 = Population(chromosomes=simple_chromosomes,
                       eval_function=simple_evaluation_function)
     pop2 = Population(chromosomes=simple_chromosomes,
                       eval_function=simple_evaluation_function)
     pop3 = Population(chromosomes=simple_chromosomes,
                       eval_function=simple_evaluation_function)
     assert len(pop1) == len(simple_chromosomes)
     assert len(pop2.survive(fraction=0.5)) == len(simple_chromosomes) * 0.5
     assert len(pop3.survive(fraction=0.1,
                             luck=True)) == len(simple_chromosomes) * 0.1
Exemplo n.º 4
0
 def test_breed_amount_works(self, simple_chromosomes,
                             simple_evaluation_function):
     pop1 = Population(chromosomes=simple_chromosomes,
                       eval_function=simple_evaluation_function)
     pop1.survive(n=50).breed(
         parent_picker=lambda population: choices(population, k=2),
         combiner=lambda mom, dad: (mom + dad) / 2)
     assert len(pop1) == len(simple_chromosomes)
     pop2 = Population(chromosomes=simple_chromosomes,
                       eval_function=simple_evaluation_function)
     pop2.survive(n=50).breed(
         parent_picker=lambda population: choices(population, k=2),
         combiner=lambda mom, dad: (mom + dad) / 2,
         population_size=400)
     assert len(pop2) == 400
     assert pop2.intended_size == 400
Exemplo n.º 5
0
 def test_breed_works_with_kwargs(self, simple_chromosomes,
                                  simple_evaluation_function):
     pop1 = Population(chromosomes=simple_chromosomes,
                       eval_function=simple_evaluation_function)
     pop1.survive(n=50).breed(parent_picker=pick_random,
                              combiner=lambda mom, dad: (mom + dad) / 2,
                              n_parents=2)
     assert len(pop1) == len(simple_chromosomes)
     pop2 = Population(chromosomes=simple_chromosomes,
                       eval_function=simple_evaluation_function)
     pop2.survive(n=50).breed(
         parent_picker=pick_random,
         combiner=lambda *parents: sum(parents) / len(parents),
         population_size=400,
         n_parents=3)
     assert len(pop2) == 400
     assert pop2.intended_size == 400
Exemplo n.º 6
0
np.random.seed(1234)


def f(x):
    return 8 * x - 2 * x**2


def random_guy():
    return np.random.randint(low=-1_000_000, high=1_000_000)


initGenerationSize = 100
firstGen = [random_guy() for _ in range(initGenerationSize)]

pop = Population(chromosomes=firstGen, eval_function=f, maximize=True)
survivors = pop.survive(fraction=0.1)


def pickParents(population):
    mom, dad = np.random.choice(population, size=2)
    return mom, dad


def makeChild(mom, dad):
    return (mom + dad) / 2


def randomNoise(individual, sigma):
    noise = np.random.normal(loc=0, scale=10) * sigma
    return individual + noise
Exemplo n.º 7
0
                  maximize=True)

pop2 = Population.generate(init_function=create_candidate,
                           eval_function=func_to_optimise,
                           size=5,
                           maximize=False)

print("[i for i in pop1]:")
print([i for i in pop1])
print("[i.chromosome for i in pop1]:")
print([i.chromosome for i in pop1])
print("[i.fitness for i in pop1]:")
print([i.fitness for i in pop1])
print("[i.fitness for i in pop1.evaluate()]:")


def produce_clone(parent):
    return parent


def add_noise(x):
    return 0.1 * (random.random() - 0.5) + x


print("[i.fitness for i in pop1.survive(n=3)]:")
print([i.fitness for i in pop1.survive(n=3)])
print("[i.fitness for i in pop1.survive(n=3).mutate(add_noise)]:")
print([i.fitness for i in pop1.survive(n=3).mutate(add_noise)])
print("[i.fitness for i in pop1.survive(n=3).mutate(add_noise).evaluate()]:")
print([i.fitness for i in pop1.survive(n=3).mutate(add_noise).evaluate()])
Exemplo n.º 8
0
def add_noise(chromosome, sigma):
    """
    This is a function that will add some noise to the chromosome.
    """
    new_x = chromosome[0] + (r() - 0.5) * sigma
    new_y = chromosome[1] + (r() - 0.5) * sigma
    return new_x, new_y


# We start by defining a population with candidates.
pop = Population(chromosomes=[random_start() for _ in range(200)],
                 eval_function=func_to_optimise, maximize=True)

# We do a single step here and out comes a new population
pop.survive(fraction=0.5)

# We do two steps here and out comes a new population
(pop
 .survive(fraction=0.5)
 .breed(parent_picker=pick_random_parents, combiner=make_child))

# We do a three steps here and out comes a new population
(pop
 .survive(fraction=0.5)
 .breed(parent_picker=pick_random_parents, combiner=make_child)
 .mutate(mutate_function=add_noise, sigma=1))

# This is inelegant but it works.
for i in range(5):
    pop = (pop