最大值问题:简短版本

短版的 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