我使用 DEAP 学习遗传算法,我想动画显示每一代中最好的个体如何变化。
为此,我使用统计和多重统计类:
stats = tools.Statistics(lambda ind: ind.fitness.values)
stats.register('min', np.min)
stats.register('mean', np.mean)
history = tools.Statistics(lambda ind: ind)
### Here i get the best individual
history.register('hof', lambda population: list(filter(lambda ind: tspDistance(ind) == np.min(list(map(lambda x: x.fitness.values, population))), population))[0])
mstats = tools.MultiStatistics(fitness=stats, history=history)
hof = tools.HallOfFame(consts.HALL_OF_FAME_SIZE)
population, logbook = algorithms.eaSimple(population, toolbox,
cxpb=consts.P_CROSSOVER, mutpb=consts.P_MUTATION,
ngen=consts.MAX_GENERATIONS, stats=mstats,
halloffame=hof, verbose=True)
但这需要很长时间。 这是获得每一代最佳个体的简单方法吗?
好吧,这太简单了...
hof = tools.HallOfFame(consts.HALL_OF_FAME_SIZE)
stats = tools.Statistics(lambda ind: ind.fitness.values)
stats.register('min', np.min)
stats.register('mean', np.mean)
history = tools.Statistics(lambda ind: ind)
history.register('hof', lambda pop: hof[0])
mstats = tools.MultiStatistics(fitness=stats, history=history)