DEAP 是一个很棒的 Python 包,用于支持进化算法。
现在,我从简单的示例OneMax Problem中学习它
启用 HallofFame 后, “它将跟踪出现在进化中的最佳个体(即使在它消失的情况下也会保留它)”
但是当我使用它时,种群在进化过程中的最大适应度有时会降低一点。
我认为当最好的父母离开时,fitness.Max 不应该减少,而是保持不变或增加。
这是我在 DEAP 网站上直接复制的代码。
import array
import random
import numpy
from deap import algorithms
from deap import base
from deap import creator
from deap import tools
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", array.array, typecode='b', fitness=creator.FitnessMax)
toolbox = base.Toolbox()
# Attribute generator
toolbox.register("attr_bool", random.randint, 0, 1)
# Structure initializers
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr_bool, 100)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
def evalOneMax(individual):
return sum(individual),
toolbox.register("evaluate", evalOneMax)
toolbox.register("mate", tools.cxTwoPoint)
toolbox.register("mutate", tools.mutFlipBit, indpb=0.05)
toolbox.register("select", tools.selTournament, tournsize=3)
def main():
random.seed(64)
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)
return pop, log, hof
if __name__ == "__main__":
main()
如果需要,我可以尝试详细说明。干杯。
第 3 代的最大适应度下降: