1

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 での最大フィットネスの減少:

ここに画像の説明を入力

4

1 に答える 1