def main(): pop = toolbox.population(n=Np) CXPB, MUTPB, NGEN = 1, 1, Ngen print("Start of evolution") fitnesses = list(map(toolbox.evaluate, pop)) for ind, fit in zip(pop, fitnesses): ind.fitness.values = fit print("Evaluated %i individuals" % len(pop)) analizer = Analyzer() for g in range(NGEN): print("-- Generation %i --" % g) elite = tools.selBest(pop, 1) elite = list(map(toolbox.clone, elite)) offspring = toolbox.select(pop, len(pop)) offspring = list(map(toolbox.clone, offspring)) analizer.add_pop(list(map(toolbox.clone, offspring))) record = stats.compile(offspring) print(" Min %s" % record["min"]) print(" Max %s" % record["max"]) print(" Avg %s" % record["avg"]) print(" Std %s" % record["std"]) for child1, child2 in zip(offspring[::2], offspring[1::2]): if random.random() < CXPB: toolbox.mate(child1, child2) del child1.fitness.values del child2.fitness.values invalid_ind = [ind for ind in offspring if not ind.fitness.valid] fitnesses = map(toolbox.evaluate, invalid_ind) for ind, fit in zip(invalid_ind, fitnesses): ind.fitness.values = fit for mutant in offspring: if random.random() < MUTPB: toolbox.mutate(mutant) del mutant.fitness.values invalid_ind = [ind for ind in offspring if not ind.fitness.valid] fitnesses = map(toolbox.evaluate, invalid_ind) for ind, fit in zip(invalid_ind, fitnesses): ind.fitness.values = fit print("Evaluated %i individuals" % len(invalid_ind)) offspring = tools.selBest(offspring, len(offspring) - 1) + elite pop[:] = offspring print("-- End of (successful) evolution --") best_ind = tools.selBest(pop, 1)[0] print("Best individual is %s, %s" % (best_ind, best_ind.fitness.values)) analizer.plot_entropy_matrix(file_name="SGA_entropy.png") analizer.plot_stats(file_name="SGA_stats.png", optimum_val=1099) print(mutpb) return best_ind
def main(): pop = toolbox.population(n=Np) # MUTPB:各世代で突然変異をさせる確率 MUTPB, NGEN = 1, Ngen print("Start of evolution") fitnesses = list(map(toolbox.evaluate, pop)) # 各個体の適応度を代入 for ind, fit in zip(pop, fitnesses): ind.fitness.values = fit print("Evaluated %i individuals" % len(pop)) analizer = Analyzer() for g in range(NGEN): print("-- Generation %i --" % g) # エリートを選択 elite = tools.selBest(pop, 1) elite = list(map(toolbox.clone, elite)) # 新しい演算子により交叉 offspring = toolbox.crossover(pop) # 突然変異 gen = pop + offspring # 2Np for mutant in gen: if random.random() < MUTPB: toolbox.mutate(mutant) del mutant.fitness.values gen += elite invalid_ind = [ind for ind in gen if not ind.fitness.valid] print("Evaluated %i individuals" % len(invalid_ind)) fitnesses = map(toolbox.evaluate, invalid_ind) for ind, fit in zip(invalid_ind, fitnesses): ind.fitness.values = fit selected = toolbox.select(gen, k=Np) pop[:] = selected record = stats.compile(pop) print(" Min %s" % record["min"]) print(" Max %s" % record["max"]) print(" Avg %s" % record["avg"]) print(" Std %s" % record["std"]) analizer.add_pop(list(map(toolbox.clone, pop))) print("-- End of (successful) evolution --") best_ind = tools.selBest(pop, 1)[0] print("Best individual is %s, %s" % (best_ind, best_ind.fitness.values)) analizer.plot_entropy_matrix(file_name="TDGA_newcross_entropy.png") analizer.plot_stats(file_name="TDGA_newcross_stats.png", optimum_val=1099) return best_ind
def main(): pop = toolbox.population(n=Np) CXPB, MUTPB, NGEN = 1, 1, Ngen print("Start of evolution") fitnesses = list(map(toolbox.evaluate, pop)) for ind, fit in zip(pop, fitnesses): ind.fitness.values = fit print("Evaluated %i individuals" % len(pop)) analizer = Analyzer() for g in range(NGEN): print("-- Generation %i --" % g) elite = tools.selBest(pop, 1) elite = list(map(toolbox.clone, elite)) offspring = list(map(toolbox.clone, pop)) for i in range(len(offspring)): p1_idx, p2_idx= parents_select(offspring, tournament_size) ind1 = offspring[p1_idx] ind2 = offspring[p2_idx] if random.random() < CXPB: toolbox.mate(ind1, ind2) gen = pop + offspring # 2Np for mutant in gen: if random.random() < MUTPB: toolbox.mutate(mutant) del mutant.fitness.values gen += elite invalid_ind = [ind for ind in gen if not ind.fitness.valid] print("Evaluated %i individuals" % len(invalid_ind)) fitnesses = map(toolbox.evaluate, invalid_ind) for ind, fit in zip(invalid_ind, fitnesses): ind.fitness.values = fit selected = toolbox.select(gen, k=Np) pop[:] = selected record = stats.compile(pop) print(" Min %s" % record["min"]) print(" Max %s" % record["max"]) print(" Avg %s" % record["avg"]) print(" Std %s" % record["std"]) analizer.add_pop(list(map(toolbox.clone, pop))) print("-- End of (successful) evolution --") best_ind = tools.selBest(pop, 1)[0] print("Best individual is %s, %s" % (best_ind, best_ind.fitness.values)) analizer.plot_entropy_matrix(file_name="TDGA_entropy.png") analizer.plot_stats(file_name="TDGA_stats.png", optimum_val=1099) return best_ind