最大值问题:简短版本¶
短版的 One Max 遗传算法示例与完整版 -ga-onemax 非常相似。唯一的区别是它使用了 algorithms
模块,该模块实现了一些基本的进化算法。初始化几乎相同。我们只需要导入一些额外的包和模块。
import array
import numpy
from deap import algorithms
为了使用 algorithms
中实现的进化功能,我们必须从 tools
模块中注册一些函数:evaluate()
、mate()
、mutate()
和 select()
。
toolbox.register("evaluate", evalOneMax)
toolbox.register("mate", tools.cxTwoPoint)
toolbox.register("mutate", tools.mutFlipBit, indpb=0.05)
toolbox.register("select", tools.selTournament, tournsize=3)
然后,工具箱被传递给算法,并通过 stats
它使用已注册的函数。
def main():
pop = toolbox.population(n=300)
hof = tools.HallOfFame(1)
stats = tools.Statistics(lambda ind: ind.fitness.values)
stats.register("avg", numpy.mean)
stats.register("std", numpy.std)
stats.register("min", numpy.min)
stats.register("max", numpy.max)
pop, log = algorithms.eaSimple(pop, toolbox, cxpb=0.5, mutpb=0.2, ngen=40,
stats=stats, halloffame=hof, verbose=True)
简短的 GA One max 示例使用了 HallOfFame
来跟踪进化过程中出现的最佳个体(即使在灭绝的情况下也会保留),以及一个 Statistics
对象来在进化过程中编译种群统计数据。
在 algorithms
模块中的每个算法都可以处理这些对象。最后,verbose 关键字指示我们是否希望算法在每一代之后输出结果。
完整的源代码:examples/ga/onemax_short。