Beispiel #1
0
def execute_generational_steps():
    x = init_x_vals(-10, 10, 100)
    y = equation_eval(x)
    training_data = ExplicitTrainingData(x, y)

    component_generator = ComponentGenerator(x.shape[1])
    component_generator.add_operator(2)
    component_generator.add_operator(3)
    component_generator.add_operator(4)

    crossover = AGraphCrossover(component_generator)
    mutation = AGraphMutation(component_generator)

    agraph_generator = AGraphGenerator(STACK_SIZE, component_generator)

    fitness = ExplicitRegression(training_data=training_data)
    local_opt_fitness = ContinuousLocalOptimization(fitness, algorithm='lm')
    evaluator = Evaluation(local_opt_fitness)

    ea = AgeFitnessEA(evaluator, agraph_generator, crossover,
                      mutation, 0.4, 0.4, POP_SIZE)

    island = Island(ea, agraph_generator, POP_SIZE)
    archipelago = SerialArchipelago(island)

    opt_result = archipelago.evolve_until_convergence(max_generations=500,
                                                      fitness_threshold=1.0e-4)
    if opt_result.success:
        print(archipelago.get_best_individual().get_latex_string())
    else:
        print("Failed.")
def test_potential_hof_members(mocker, one_island):
    island_a = mocker.Mock(hall_of_fame=['a'])
    island_b = mocker.Mock(hall_of_fame=['b'])
    island_c = mocker.Mock(hall_of_fame=['c'])
    archipelago = SerialArchipelago(one_island, num_islands=3)
    archipelago._islands = [island_a, island_b, island_c]
    assert archipelago._get_potential_hof_members() == ['a', 'b', 'c']
def test_best_individual_returned(one_island):
    archipelago = SerialArchipelago(one_island)
    generator = MultipleValueChromosomeGenerator(generate_zero,
                                                 VALUE_LIST_SIZE)
    best_indv = generator()
    archipelago._islands[0].load_population([best_indv], replace=False)
    assert archipelago.get_best_individual().fitness == 0
def test_archipelago_runs(one_island, two_island, three_island):
    max_generations = 100
    min_generations = 20
    error_tol = 0
    generation_step_report = 10
    archipelago = SerialArchipelago(one_island, num_islands=4)
    archipelago._islands = [one_island, two_island, three_island, three_island]
    result = archipelago.evolve_until_convergence(max_generations, error_tol,
                                                  generation_step_report,
                                                  min_generations)
    assert result.success
def test_island_migration(one_island, island_list):
    archipelago = SerialArchipelago(one_island, num_islands=4)
    archipelago._islands = island_list

    archipelago._coordinate_migration_between_islands()

    migration_count = 0
    for i, island in enumerate(archipelago._islands):
        initial_individual_values = [i] * VALUE_LIST_SIZE
        for individual in island.population:
            if initial_individual_values != individual.values:
                migration_count += 1
                break
    assert len(island_list) == migration_count
def test_best_fitness_eval_count(one_island):
    num_islands = 4
    archipelago = SerialArchipelago(one_island, num_islands=num_islands)
    assert archipelago.get_fitness_evaluation_count() == 0
    archipelago.evolve(1)
    expected_evaluations = num_islands * (POP_SIZE + OFFSPRING_SIZE)
    assert archipelago.get_fitness_evaluation_count() == expected_evaluations
def test_archipelago_generated(island):
    archipelago = SerialArchipelago(island, num_islands=3)
    assert len(archipelago._islands) == 3
    for island_i in archipelago._islands:
        assert island_i != island
        assert island_i._population_size == island._population_size
def test_total_population_not_affected_by_migration(one_island):
    archipelago = SerialArchipelago(one_island, num_islands=4)
    total_pop_before = sum([len(i.population) for i in archipelago._islands])
    archipelago._coordinate_migration_between_islands()
    total_pop_after = sum([len(i.population) for i in archipelago._islands])
    assert total_pop_after == total_pop_before
def test_convergence_of_archipelago_unconverged(one_island):
    archipelago = SerialArchipelago(one_island, num_islands=6)
    assert archipelago.get_best_fitness() > 0
def test_convergence_of_archipelago(one_island, island_list):
    archipelago = SerialArchipelago(one_island, num_islands=4)
    archipelago._islands = island_list

    assert archipelago.get_best_fitness() <= 0