raise ValueError(“halloffame parameter must not be empty!”)
#更新名人堂成员
halloffame.update(population)
hof_size = len(halloffame.items) if halloffame.items else 0
record = stats.compile(population) if stats else {}
logbook.record(gen=0,nevals=len(invalid_ind),**record)
if verbose:
print(logbook.stream)
#开始遗传流程
for gen in range(1,ngen + 1):
#选择个体数目=种群个体数-名人堂成员数
offspring = toolbox.select(population,len(population) - hof_size)
#种群更新到下一代
offspring = algorithms.varAnd(offspring,toolbox,cxpb,mutpb)
#计算个体适应度
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
#将名人堂成员添加到当前代
offspring.extend(halloffame.items)
#更新名人堂
halloffame.update(offspring)
#使用当前代替换种群
population[:] = offspring
#将当前统计信息附加到日志
record = stats.compile(population) if stats else {}
logbook.record(gen=gen,nevals=len(invalid_ind),**record)
if verbose:
print(logbook.stream)
return population,logbook
遗传流程
def main():
创建初始种群
population = toolbox.populationCreator(n=POPULATION_SIZE)
定义监听统计数据
stats = tools.Statistics(lambda ind: ind.fitness.values)
stats.register(“min”,np.min)
stats.register(“avg”,np.mean)