def initialize(self, max_population): self.tot_fitness = 0 self.max_fitness = 0 self.max_ind = None while self.tot_fitness == 0: self.individuals = [] for i in range(max_population): ind = Individual(self.test) ind.initialize(self.alphabet) ind.calc_fitness() self.tot_fitness += ind.fitness if ind.fitness > self.max_fitness: self.max_fitness = ind.fitness self.max_ind = ind self.individuals.append(ind)
def synthesize_population(self): population = Population() populace = [] for i in range(0, config.populationSize): gene = Individual() gene.individual = gene.create_individual() gene.fitness = gene.calc_fitness(gene.individual) populace.append(gene) population.populace = populace return population
def mutate(self,child_1): chromosome = Individual() individual = child_1.individual start_index = 1 end_index = len(individual) - 2 mutate_index = random.randrange(start_index, end_index) individual[mutate_index] = np.random.uniform() individual = chromosome.normalize_fracs(individual) # update id and params individual[0] = str(chromosome.generate_id()) chromosome.update_params(individual) child = Individual() child.individual = individual child.fitness = chromosome.calc_fitness(individual) return child
def crossover(self, individual1, individual2): # crossover fractions parent_1 = individual1.individual parent_2 = individual2.individual chromosome = Individual() start_index = 1 end_index = len(parent_1) - 2 crossover_index = random.randrange(start_index, end_index + 1) child_1a = parent_1[crossover_index:] child_1b = parent_2[:crossover_index] child_1 = child_1b + child_1a child_2a = parent_2[crossover_index:] child_2b = parent_1[:crossover_index] child_2 = child_2b + child_2a # crossover lake's veg type if np.random.uniform() > 0.5: tmp = child_1[len(child_1) - 1] child_1[len(child_1) - 1] = child_2[len(child_2) - 1] child_2[len(child_2) - 1] = tmp # normalize fractions child_1 = chromosome.normalize_fracs(child_1) child_2 = chromosome.normalize_fracs(child_2) # update id and params child_1[0] = chromosome.generate_id() child_2[0] = chromosome.generate_id() update = Update() update.update_params(child_1) update.update_params(child_2) # chromosome.update_params(child_1) # chromosome.update_params(child_2) child1 = Individual() child2 = Individual() child1.individual = child_1 child2.individual = child_2 child1.fitness = chromosome.calc_fitness(child_1) child2.fitness = chromosome.calc_fitness(child_2) return child1, child2
self.test, self.alphabet, self.mutation_rate, new_individuals ) # print("\nNew Populaition:") # [print(r.dna) for r in new_Population.individuals] return new_Population if __name__ == "__main__": alphabet = string.digits + string.ascii_letters + string.punctuation + " " in1 = Individual("This is a string", "abcdefghijklmnop") in2 = Individual("This is a string", "1234567890123456") in3 = Individual("This is a string", "IIIIIIIIIIIIIIII") in4 = Individual("This is a string", "OOOOOOOOOOOOOOOO") in1.calc_fitness() in2.calc_fitness() in3.calc_fitness() in4.calc_fitness() inds = [in1, in2, in3, in4] pop = Population("This is a string", alphabet, 0.01, inds) # pop.calc_values() pop.initialize(20) pop.reproduce() # print(pop.max_population, pop.test, pop.alphabet, pop.dna_length) # print(len(pop.individuals)) # in3, in4 = pop.crossover(pop.individuals[0], pop.individuals[1]) # print(in3.dna) # print(in4.dna)