def test_be_born(self): num_features = 10 max_individual_size = 5 values_handler = Values_Handler(Probability_Handler(num_features)) factory = Individual(num_features=num_features, max_individual_size=max_individual_size, values_handler=values_handler) dna_dict = factory.be_born() size_individual = dna_dict[constants.DNA_SIZE_STR] self.assertTrue(1 <= size_individual <= max_individual_size) size_indices = len(dna_dict[constants.DNA_FEATURES_STR]) self.assertTrue(1 <= size_indices <= max_individual_size) self.assertTrue(np.all(0 <= np.array(size_indices) <= num_features)) size_tree_values = len(dna_dict[constants.DNA_WEIGHTS_STR]) self.assertTrue(1 <= size_tree_values <= max_individual_size) self.assertTrue(0 <= np.min(dna_dict[constants.DNA_WEIGHTS_STR])) self.assertTrue(np.max(dna_dict[constants.DNA_WEIGHTS_STR]) <= 1) size_parentheses_binary_vec = len( dna_dict[constants.DNA_PARENTHESES_STR]) self.assertTrue( 1 <= size_parentheses_binary_vec <= max_individual_size) self.assertTrue( np.all(0 <= np.array(dna_dict[constants.DNA_PARENTHESES_STR]))) self.assertTrue( np.all(np.array(dna_dict[constants.DNA_PARENTHESES_STR]) <= 1)) size_action_vector = len(dna_dict[constants.DNA_ACTIONS_STR]) self.assertTrue(1 <= size_action_vector <= max_individual_size) self.assertTrue( np.all(0 <= np.array(dna_dict[constants.DNA_ACTIONS_STR]))) self.assertTrue( np.all( np.array(dna_dict[constants.DNA_ACTIONS_STR]) < constants.MAX_SIZE_INDIVIDUAL))
class Population_Handler(): def __init__(self, probability_handler, max_individual_size = 10): self.probability_handler = probability_handler self.max_individual_size = max_individual_size self.population = [] self.values_handler = Values_Handler(probability_handler) self.individual = Individual(self.probability_handler.max_feature_number, self.max_individual_size, self.values_handler) self.mh = Mutation_Handler(self.probability_handler, self.values_handler) def create_individual(self): return self.individual.be_born() def create_population(self, population_size = 10): self.population = np.empty([population_size]).astype(object) for i in range(population_size): self.population[i] = self.create_individual() def mutate_population(self): for individual in self.population[1:]: ## dont mutate the top best self.mh.mutate(individual) def mutate_population_paralal(self): p = Pool(constants.NUM_POOL) paralal_input = list(self.population) paralal_result = p.map(self.mh.mutate_paralal, paralal_input) p.close() p.join() self.population = np.array(paralal_result) def cross_over_population(self): pass def get_population(self): return self.population def set_population(self, new_generation): self.population = new_generation