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