Esempio n. 1
0
def test_equal_population():
    np.random.seed(42)
    size = 1000
    ind_size = 20
    pop1 = pg.make_integer_population(size, ind_size)
    pop2 = pop1.clone()
    pop3 = pg.make_integer_population(size, ind_size)
    assert pop1.equal(pop2) is True
    assert pop1.equal(pop3) is False
Esempio n. 2
0
def test_generational():
    np.random.seed(42)
    size = 1000
    ind_size = 20
    pop1 = pg.make_integer_population(size, ind_size)
    pop1_clone = pop1.clone()
    pop2 = pg.make_integer_population(size, ind_size)
    pop1 = pg.generational_replacement(pop1, pop2)
    assert pop1.equal(pop2) is True
    assert pop1.equal(pop1_clone) is False
Esempio n. 3
0
def test_worst_individual():
    np.random.seed(42)
    pop = pg.make_integer_population(10, 5)
    pop = pg.evaluate_population(pop, lambda x: 1. / (1. + pg.onemax(x)))
    worst = pg.worst_individual(pop)
    assert np.array_equal(worst.genotype, np.array([0, 1, 0, 0, 0]))
    assert worst.fitness.value == 0.5
Esempio n. 4
0
def test_best_individual():
    np.random.seed(42)
    pop = pg.make_integer_population(10, 5)
    pop = pg.evaluate_population(pop, lambda x: 1. / (1. + pg.onemax(x)))
    best = pg.best_individual(pop)
    assert np.array_equal(best.genotype, np.array([1, 1, 1, 1, 1]))
    assert best.fitness.value == 0.16666666666666666
Esempio n. 5
0
def genetic_algorithm_binary(fitness_fn,
                             chr_size,
                             pop_size=100,
                             total_generations=20,
                             cx_rate=0.7,
                             ind_mt_rate=1.0,
                             op_mt_rate=0.01,
                             elitism=False):
    # initial population
    pop = pg.make_integer_population(pop_size, chr_size)
    pop = pg.evaluate_population(pop, fitness_fn)
    pg.evolution_progress(0, pop)

    # evolutionary loop
    for i in range(1, total_generations):
        pop = pg.select_population(pop, pg.tournament_selection)
        offsprings = pg.apply_crossover(pop, cx_rate, pg.uniform_crossover)
        offsprings = pg.apply_mutation(offsprings,
                                       ind_mt_rate,
                                       pg.flip_mutation,
                                       gene_rate=op_mt_rate)
        if elitism:
            pop = pg.elite_strategy(
                pg.generational_replacement(pop, offsprings),
                pg.best_individual(pop))
        else:
            pop = pg.generational_replacement(pop, offsprings)
        pop = pg.evaluate_population(pop, fitness_fn)
        pg.evolution_progress(i, pop)

    return pop
Esempio n. 6
0
def test_elite_strategy():
    np.random.seed(42)
    size = 10
    ind_size = 20
    pop = pg.make_integer_population(size, ind_size)
    fitness_function = lambda x: 1. / pg.onemax(x)
    pop = pg.make_integer_population(size, ind_size)
    pop = pg.evaluate_population(pop, fitness_function)
    best = pg.best_individual(pop)
    pop = pg.elite_strategy(pop, best)
    found = False
    for ind in pop.individuals:
        if ind.equal(best) is True:
            found = True
            break

    assert found is True
Esempio n. 7
0
def test_steady_state():
    np.random.seed(42)
    size1 = 10
    ind_size = 20
    pop1 = pg.make_integer_population(size1, ind_size)
    pop1_clone = pop1.clone()
    size2 = 2
    pop2 = pg.make_integer_population(size2, ind_size)
    pop1 = pg.steady_state_replacement(pop1, pop2)
    found1 = False
    found2 = False
    for ind in pop1.individuals:
        if ind.equal(pop2.individuals[0]) is True:
            found1 = True
        if ind.equal(pop2.individuals[1]) is True:
            found2 = True
        if found1 and found2:
            break

    assert found1 and found2 is True
Esempio n. 8
0
def test_make_binary_population():
    size = 1000
    ind_size = 20
    pop = pg.make_integer_population(size, ind_size)
    assert type(pop) is pg.Population
    assert pop.size == size
    assert pop.individuals.size == size
    for i in range(size):
        assert type(pop.individuals[i]) is pg.Individual
        assert pop.individuals[i].genotype.size == ind_size
        for g in range(ind_size):
            assert pop.individuals[i].genotype[g] >= 0 and pop.individuals[
                i].genotype[g] <= 1
Esempio n. 9
0
def test_apply_crossover1():
    np.random.seed(42)
    size = 1000
    ind_size = 100
    rate = 1.0
    operator = pg.uniform_crossover
    pop = pg.make_integer_population(size, ind_size)
    original_pop = pop.clone()
    pop = pg.apply_crossover(pop, rate, operator)
    for i in range(pop.size):
        assert pop.individuals[i].run_eval is True
        assert np.array_equal(pop.individuals[i].genotype,
                              original_pop.individuals[i].genotype) is not True
Esempio n. 10
0
def test_apply_mutation2():
    np.random.seed(42)
    size = 1000
    ind_size = 100
    rate = 0.0
    operator = pg.flip_mutation
    pop = pg.make_integer_population(size, ind_size)
    original_pop = pop.clone()
    pop = pg.apply_mutation(pop, rate, operator, gene_rate=rate)
    for i in range(pop.size):
        assert pop.individuals[i].run_eval is True
        assert np.array_equal(pop.individuals[i].genotype,
                              original_pop.individuals[i].genotype)
Esempio n. 11
0
def test_make_permutation_population():
    size = 1000
    ind_size = 20
    pop = pg.make_integer_population(size, ind_size, low=None, high=None)
    assert type(pop) is pg.Population
    assert pop.size == size
    assert pop.individuals.size == size
    for i in range(size):
        assert type(pop.individuals[i]) is pg.Individual
        assert pop.individuals[i].genotype.size == ind_size
        for g in range(ind_size):
            assert pop.individuals[i].genotype[g] >= 0 and pop.individuals[
                i].genotype[g] < ind_size
        assert np.array_equal(np.sort(pop.individuals[i].genotype),
                              np.array([g for g in range(ind_size)]))
Esempio n. 12
0
def test_make_integer_population():
    size = 1000
    ind_size = 20
    low = 0
    high = 19
    pop = pg.make_integer_population(size, ind_size, low=low, high=high)
    assert type(pop) is pg.Population
    assert pop.size == size
    assert pop.individuals.size == size
    for i in range(size):
        assert type(pop.individuals[i]) is pg.Individual
        assert pop.individuals[i].genotype.size == ind_size
        for g in range(ind_size):
            assert pop.individuals[i].genotype[g] >= low and pop.individuals[
                i].genotype[g] <= high
Esempio n. 13
0
def test_select_population():
    np.random.seed(42)
    pop = pg.make_integer_population(10, 5)
    pop = pg.evaluate_population(pop, lambda x: 1. / (1. + pg.onemax(x)))
    diff = 0
    for i in range(pop.size):
        if not np.array_equal(pop.individuals[i].genotype,
                              pop.individuals[i].genotype):
            diff += 1
    assert diff == 0

    original_pop = pop.clone()
    pop = pg.select_population(pop, pg.tournament_selection)
    for i in range(pop.size):
        if not np.array_equal(pop.individuals[i].genotype,
                              original_pop.individuals[i].genotype):
            diff += 1
    assert diff != 0