def gen_conf1(): param_values = deepcopy(default_param_values) brkga_params = param_values["params"] brkga_params.population_size = 100 brkga_params.elite_percentage = 0.3 brkga_params.mutants_percentage = 0.1 brkga_params.num_elite_parents = 1 brkga_params.total_parents = 2 brkga_params.bias_type = BiasFunctionType.LOGINVERSE brkga_params.num_independent_populations = 1 brkga_params.pr_number_pairs = 0 brkga_params.pr_minimum_distance = 0.0 brkga_params.pr_type = PathRelinkingType.DIRECT brkga_params.pr_selection = PathRelinkingSelection.BESTSOLUTION brkga_params.alpha_block_size = 1.0 brkga_params.pr_percentage = 1.0 param_values["decoder"] = sum_decoder param_values["sense"] = Sense.MAXIMIZE param_values["seed"] = 4013750229 param_values["chromosome_size"] = chromosome_size param_values["evolutionary_mechanism_on"] = True print("\n> Building configuration 1") brkga = BrkgaMpIpr(**param_values) brkga.initialize() print("> Writing configuration 1") with open(os.path.join(STATE_DIR, "state1.pickle"), "wb") as hd: pickle.dump(brkga, hd) print("> Evolving population 0") brkga.evolve_population(0) fitness1 = brkga.get_best_fitness() chromosome1 = brkga.get_best_chromosome() brkga.evolve_population(0) fitness2 = brkga.get_best_fitness() chromosome2 = brkga.get_best_chromosome() for _ in range(100): brkga.evolve_population(0) fitness102 = brkga.get_best_fitness() chromosome102 = brkga.get_best_chromosome() with open(os.path.join(SOLUTION_DIR, "best_solution1.pickle"), "wb") as hd: pickle.dump( { "fitness1": fitness1, "chromosome1": chromosome1, "fitness2": fitness2, "chromosome2": chromosome2, "fitness102": fitness102, "chromosome102": chromosome102, }, hd )
def gen_conf4(): param_values = deepcopy(default_param_values) brkga_params = param_values["params"] chromosome_size = 500 instance = Instance(chromosome_size) brkga_params.population_size = 100 brkga_params.elite_percentage = 0.35 brkga_params.mutants_percentage = 0.15 brkga_params.num_elite_parents = 1 brkga_params.total_parents = 2 brkga_params.bias_type = BiasFunctionType.EXPONENTIAL brkga_params.num_independent_populations = 3 brkga_params.pr_number_pairs = 0 brkga_params.pr_minimum_distance = 0.0 brkga_params.pr_type = PathRelinkingType.DIRECT brkga_params.pr_selection = PathRelinkingSelection.BESTSOLUTION brkga_params.alpha_block_size = 1.0 brkga_params.pr_percentage = 1.0 param_values["decoder"] = SumDecode(instance) param_values["sense"] = Sense.MINIMIZE param_values["seed"] = 2947804214761 param_values["chromosome_size"] = chromosome_size param_values["evolutionary_mechanism_on"] = True print("\n> Building configuration 4") brkga = BrkgaMpIpr(**param_values) brkga.initialize() rho = 0.75 brkga.set_bias_custom_function(lambda x: rho if x == 1 else 1.0 - rho) print("> Writing configuration 4") with open(os.path.join(STATE_DIR, "state4.pickle"), "wb") as hd: pickle.dump(brkga, hd) print("> Evolving population 0...") brkga.evolve_population(0) fitness1 = brkga.get_best_fitness() chromosome1 = brkga.get_best_chromosome() print("> Evolving population 1...") brkga.evolve_population(1) fitness2 = brkga.get_best_fitness() chromosome2 = brkga.get_best_chromosome() print("> Evolving population 2...") brkga.evolve_population(2) fitness3 = brkga.get_best_fitness() chromosome3 = brkga.get_best_chromosome() print("> Evolving both populations for 100 generations...") for _ in range(100): start_time = time() brkga.evolve_population(0) brkga.evolve_population(1) brkga.evolve_population(2) print(f"Elapsed time: {time() - start_time :.2f}") fitness103 = brkga.get_best_fitness() chromosome103 = brkga.get_best_chromosome() with open(os.path.join(SOLUTION_DIR, "best_solution4.pickle"), "wb") as hd: pickle.dump( { "fitness1": fitness1, "chromosome1": chromosome1, "fitness2": fitness2, "chromosome2": chromosome2, "fitness3": fitness2, "chromosome3": chromosome2, "fitness103": fitness103, "chromosome103": chromosome103, }, hd )
def gen_conf2(): param_values = deepcopy(default_param_values) brkga_params = param_values["params"] chromosome_size = 1000 instance = Instance(chromosome_size) brkga_params.population_size = 500 brkga_params.elite_percentage = 0.25 brkga_params.mutants_percentage = 0.25 brkga_params.num_elite_parents = 5 brkga_params.total_parents = 50 brkga_params.bias_type = BiasFunctionType.QUADRATIC brkga_params.num_independent_populations = 2 brkga_params.pr_number_pairs = 0 brkga_params.pr_minimum_distance = 0.0 brkga_params.pr_type = PathRelinkingType.DIRECT brkga_params.pr_selection = PathRelinkingSelection.BESTSOLUTION brkga_params.alpha_block_size = 1.0 brkga_params.pr_percentage = 1.0 param_values["decoder"] = RankDecode(instance) param_values["sense"] = Sense.MINIMIZE param_values["seed"] = 1297832326904308 param_values["chromosome_size"] = chromosome_size param_values["evolutionary_mechanism_on"] = True print("\n> Building configuration 2") brkga = BrkgaMpIpr(**param_values) brkga.initialize() print("> Writing configuration 2") with open(os.path.join(STATE_DIR, "state2.pickle"), "wb") as hd: pickle.dump(brkga, hd) print("> Evolving population 0...") brkga.evolve_population(0) fitness1 = brkga.get_best_fitness() chromosome1 = brkga.get_best_chromosome() print("> Evolving population 1...") brkga.evolve_population(1) fitness2 = brkga.get_best_fitness() chromosome2 = brkga.get_best_chromosome() print("> Evolving both populations for 100 generations...") for _ in range(100): start_time = time() brkga.evolve_population(0) brkga.evolve_population(1) print(f"Elapsed time: {time() - start_time :.2f}") fitness102 = brkga.get_best_fitness() chromosome102 = brkga.get_best_chromosome() with open(os.path.join(SOLUTION_DIR, "best_solution2.pickle"), "wb") as hd: pickle.dump( { "fitness1": fitness1, "chromosome1": chromosome1, "fitness2": fitness2, "chromosome2": chromosome2, "fitness102": fitness102, "chromosome102": chromosome102, }, hd )
def gen_conf3(): param_values = deepcopy(default_param_values) brkga_params = param_values["params"] chromosome_size = 500 instance = Instance(chromosome_size) brkga_params.population_size = 100 brkga_params.elite_percentage = 0.35 brkga_params.mutants_percentage = 0.17 brkga_params.num_elite_parents = 3 brkga_params.total_parents = 5 brkga_params.bias_type = BiasFunctionType.EXPONENTIAL brkga_params.num_independent_populations = 5 brkga_params.pr_number_pairs = 0 brkga_params.pr_minimum_distance = 0.0 brkga_params.pr_type = PathRelinkingType.DIRECT brkga_params.pr_selection = PathRelinkingSelection.BESTSOLUTION brkga_params.alpha_block_size = 1.0 brkga_params.pr_percentage = 1.0 param_values["decoder"] = SumDecode(instance) param_values["sense"] = Sense.MINIMIZE param_values["seed"] = 253624607406 param_values["chromosome_size"] = chromosome_size param_values["evolutionary_mechanism_on"] = True print("\n> Building configuration 3") brkga = BrkgaMpIpr(**param_values) brkga.initialize() print("> Writing configuration 3") with open(os.path.join(STATE_DIR, "state3.pickle"), "wb") as hd: pickle.dump(brkga, hd) print("> Evolving both populations for one generation...") for i in range(brkga_params.num_independent_populations): brkga.evolve_population(i) fitness1 = brkga.get_best_fitness() chromosome1 = brkga.get_best_chromosome() print("> Evolving both populations for another generation...") for i in range(brkga_params.num_independent_populations): brkga.evolve_population(i) brkga.evolve_population(1) fitness2 = brkga.get_best_fitness() chromosome2 = brkga.get_best_chromosome() print("> Evolving both populations for 100 generations...") for _ in range(100): start_time = time() for i in range(brkga_params.num_independent_populations): brkga.evolve_population(i) print(f"Elapsed time: {time() - start_time :.2f}") fitness102 = brkga.get_best_fitness() chromosome102 = brkga.get_best_chromosome() with open(os.path.join(SOLUTION_DIR, "best_solution3.pickle"), "wb") as hd: pickle.dump( { "fitness1": fitness1, "chromosome1": chromosome1, "fitness2": fitness2, "chromosome2": chromosome2, "fitness102": fitness102, "chromosome102": chromosome102, }, hd ) print("fitness", fitness1) # print("chromosome", chromosome1) print("fitness", fitness2) # print("chromosome", chromosome2) print("fitness", fitness102)
def test_evolve_population0(self): """ Tests evolve_population() method. """ param_values = deepcopy(self.default_param_values) brkga_params = param_values["params"] brkga_params.num_independent_populations = 3 brkga_params.num_elite_parents = 1 brkga_params.total_parents = 2 brkga = BrkgaMpIpr(**param_values) # Not initialized with self.assertRaises(RuntimeError) as context: brkga.evolve_population(0) self.assertEqual( str(context.exception).strip(), "The algorithm hasn't been initialized. " "Call 'initialize()' before 'evolve_population()'") brkga.initialize() # Test invalid population indices. population_index = -1 with self.assertRaises(ValueError) as context: brkga.evolve_population(population_index) self.assertEqual( str(context.exception).strip(), "Population must be in [0, 2]: -1") population_index = brkga.params.num_independent_populations with self.assertRaises(ValueError) as context: brkga.evolve_population(population_index) self.assertEqual( str(context.exception).strip(), "Population must be in [0, 2]: 3") # Save previous and current populations locally current = deepcopy(brkga._current_populations) previous = deepcopy(brkga._previous_populations) ######################## # Test if algorithm swaps the populations correctly ######################## for i in range(brkga_params.num_independent_populations): brkga.evolve_population(i) # Internal current and previous generation must be different. self.assertNotEqual(brkga._current_populations[i].chromosomes, brkga._previous_populations[i].chromosomes) # The current the from this generation is equal to the previous # of the next generation. self.assertEqual(current[i].chromosomes, brkga._previous_populations[i].chromosomes) self.assertEqual(current[i].fitness, brkga._previous_populations[i].fitness) # The previous of this generation is lost. Just make sure that # the internal swap gets the new generation, not the current one. self.assertNotEqual(previous[i].chromosomes, brkga._current_populations[i].chromosomes) self.assertNotEqual(previous[i].fitness, brkga._current_populations[i].fitness) # end for print(f"Elapsed time: {time() - self.start_time :.2f}")