def create_offspring(self, ind):
     delta = 0.001 * np.random.normal(0, 2, self.gen_size)
     new_genome = ind.genome + delta
     new_genome = np.abs(new_genome) / sum(new_genome)
     new_ind = Individual(genome=new_genome, fitness=np.nan)
     new_ind.fitness = self.f.calculate(new_ind.genome)
     self.f.count += 1
     return new_ind
Пример #2
0
def eval_genomes(genomes, config):
    for genome_id, genome in genomes:
        net = neat.nn.FeedForwardNetwork.create(genome, config)

        individual = Individual()
        individual.neat_network = net

        genome.fitness = individual.fitness()
Пример #3
0
    def select_individuals(self, count):
        selected = list()
        while len(selected) < count:
            round_participants = sample(self.individuals, PARTICIPATION_CNT)

            winner = Individual()
            winner.fitness = 0

            for participant in round_participants:
                if participant.fitness + participant.bonus > winner.fitness + winner.bonus and participant not in selected:
                    winner = deepcopy(participant)
            selected.append(winner)
        return selected
Пример #4
0
def mutate_LHC(self, network):
    '''
	Local Hill-Climbing, 2-opt
	'''

    # Chance to change the means of travel for some gene
    if Individual.budget != None and randint(0, 100) < 10:  #10% chance
        i = randint(0, len(self.genes) - 1)

        if self.genes[i] == SolutionGenerator.FLY:
            self.genes[i] = (self.genes[i][0], SolutionGenerator.DRIVE)
        else:
            self.genes[i] = (self.genes[i][0], SolutionGenerator.FLY)
        self.used_budget = self.all_used_budget(network)
        self.reduce(network)
        self.__fitness = self.fitness(network)

    # Chance to mutate via local hill climbing
    if randint(0, 100) < 5:  # 5% chance
        maxiters = 100  # Max iterations, iterations rarely go above 10
        iters = 0
        improved = True
        best = self  # initial best sequence
        size = len(best.genes)

        while improved and iters < maxiters:
            improved = False
            for i in range(0, size - 3):
                for j in range(i + 1, size):

                    # New individual created, genes swapped
                    newGuy = Individual(best.genes[:], network)
                    newGuy.genes[i], newGuy.genes[j] = newGuy.genes[
                        j], newGuy.genes[i]

                    # Calculate the gain
                    gain = newGuy.fitness(network) - best.fitness(network)

                    if gain > 0:
                        best = newGuy
                        improved = True
                        break  # return to while
                else:
                    break
            iters += 1

        # Genes are set to new local optima
        self.genes = best.genes

        self.__fitness = self.fitness(network)