Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- def evolutivo(ngen, pop):
- hof = []
- p_cruce = 1
- p_mutacion = 1
- for g in range(ngen):
- offspring = toolbox.select(pop, len(pop)) # Siguiente generaciĆ³n
- offspring = map(toolbox.clone, offspring) # Clonamos
- offspring = list(offspring)
- # Aplicamos los cruces
- for child1, child2 in zip(offspring[::2], offspring[1::2]):
- if random.randint(0, 10) < p_cruce:
- toolbox.mate(child1, child2)
- del child1.fitness.values
- del child2.fitness.values
- # Apply mutation on the offspring
- for mutant in offspring:
- if random.randint(0, 10) < p_mutacion:
- toolbox.mutate(mutant)
- del mutant.fitness.values
- # Evaluate the individuals with an invalid fitness
- invalid_ind = [ind for ind in offspring if not ind.fitness.valid]
- fitnesses = toolbox.map(toolbox.evaluate, invalid_ind)
- for ind, fit in zip(invalid_ind, fitnesses):
- ind.fitness.values = fit
- # The population is entirely replaced by the offspring
- padres_hijos = pop + offspring
- padres_hijos_sort = sorted(padres_hijos, key = lambda x: x.fitness.values, reverse = True)
- rep_set = list()
- for individual_position in range(len(padres_hijos_sort)):
- if set(padres_hijos_sort[individual_position]) in rep_set:
- padres_hijos_sort[individual_position] = 0
- else:
- rep_set.append(set(padres_hijos_sort[individual_position]))
- new_pop = []
- for individual in padres_hijos_sort:
- if individual != 0:
- new_pop.append(individual)
- if len(hof) == 0:
- hof = new_pop[1:100]
- else:
- for i in new_pop:
- if i.fitness.values > hof[-1].fitness.values and i not in hof:
- hof[-1] = i
- hof = sorted(hof, key = lambda x: x.fitness.values, reverse = True)
- pop[:] = offspring
- return pop, hof
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement