DEAP は、進化アルゴリズムをサポートする素晴らしい Python パッケージです。
今、私は簡単な例からそれを学びますOneMax 問題
HallofFameをオンに すると、「進化で出現する最適な個体を追跡します (消滅した場合でも保持します)」
しかし、私がそれを使用すると、進化の過程で人口の最大適応度が少し低下することがあります。
最高の両親が残っているとき、フィットネス.Max は決して減少するべきではなく、同じままか増加するべきだと思います.
これは、DEAP Web サイトで直接コピーしたコードです。
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 での最大フィットネスの減少: