Dear all,
I am currently working on a multi-objective problem with NSGA-II, with computationally expensive evaluations. For several reasons, sometimes I need to stop and restart the evolutionary process: I was thus thinking about the best way to save and restore the current state of the population.
As far as I understand, just saving/loading the current random state and population is not enough, as several Pareto-optimal individuals might lie inside the "archive". I would thus need to save the "archive" and population at each generation. So, here are my questions:
a) is it possible to access NSGA-II's archive from an observer? I tried to pass the archive as a variable, like this:
final_pop = ea.evolve(
generator = nsga2generate,
pop_size = pop_size,
maximize = True,
max_generations = max_generations,
evaluator=inspyred.ec.evaluators.parallel_evaluation_mp,
mp_evaluator=nsga2evaluate,
mp_num_cpus=4,
# extra arguments, will be passed to the functions in the "args" dictionary
archive = ea.archive
)
but it's not working, every time the archive is seen as "None"
b) what would be the best way to "recover" the evolution, starting from the content of the archive and the population at the last generation, plus the random state and all other relevant values?
I was thinking about overriding the "generator" by making it place the individuals from the last generation directly inside the "population zero", and do something similar for the archive.
Do you think it's feasible, or do you have other suggestions?
Thank you for your time, and best regards,