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
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()
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
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)