Ejemplo n.º 1
0
 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)
Ejemplo n.º 2
0
    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
Ejemplo n.º 4
0
    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
Ejemplo n.º 5
0
            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)