Привет после просмотра документации Pyevolve, похоже, нет никакого способа возобновить базу эволюции на том, что вы сохранили в базе данных (странное поведение).
Если вы хотите реализовать этот типМеханизм, вы могли бы взглянуть на то, чтобы время от времени собирать население и реализовывать все это в Pyevolve.
Или вы можете попробовать DEAP очень открытую среду, которая позволяет вам видеть и манипулировать каждымаспект эволюционного алгоритма, прозрачно.И уже реализован некоторый механизм checkpointing .
Вот как ваш код будет выглядеть в DEAP.
import random
from deap import algorithms, base, creator, tools
# Create the needed types
creator.create("FitnessMax", base.Fitness, weights=(1.0,))
creator.create("Individual", list, fitness=creator.FitnessMax)
# Container for the evolutionary tools
toolbox = base.Toolbox()
toolbox.register("attr", random.random, 1, 15)
toolbox.register("individual", tools.initRepeat, creator.Individual, toolbox.attr, 6)
toolbox.register("population", tools.initRepeat, list, toolbox.individual)
# Operator registering
toolbox.register("evaluate", eval_func)
toolbox.register("mate", tools.cxTwoPoints)
toolbox.register("mutate", tools.mutGaussian, mu=0, sigma=1, indpb=0.05)
toolbox.register("select", tools.selTournament, tournsize=3)
population = toolbox.population(n=10)
stats = tools.Statistics(key=lambda ind: ind.fitness.values)
stats.register("Max", max)
checkpoint = tools.Checkpoint(population=population)
GEN, CXPB, MUTPB = 0, 0.5, 0.1
while stats.Max() < CONDITION:
# Apply standard variation (crossover followed by mutation)
offspring = algorithms.varSimple(toolbox, population, cxpb=CXPB, mutpb=MUTPB)
# Evaluate the individuals
fits = toolbox.map(toolbox.evaluate, offspring)
for fit, ind in zip(fits, offspring):
ind.fitness.values = fit
# Select the fittest individuals
offspring = [toolbox.clone(ind) for ind in toolbox.select(offspring, len(offspring)]
# The "[:]" is important to not replace the label but what it contains
population[:] = offspring
stats.update(population)
if GEN % 20 == 0:
checkpoint.dump("my_checkpoint")
GEN += 1
Обратите внимание, что приведенный выше код не был проверен,Но он делает все, что вы просите.Теперь о том, как загрузить контрольную точку и перезапустить эволюцию.
checkpoint = tools.Checkpoint()
checkpoint.load("my_checkpoint.ems")
population = checkpoint["population"]
# Continue the evolution has in before
Более того, DEAP очень хорошо документирован и содержит более 25 разнообразных примеров, которые помогают новому пользователю очень быстро набрать скорость, я также слышал, что разработчики отвечают навопрос очень быстро.