Skip to content Skip to sidebar Skip to footer

Restarting An Optimisation With Pymoo

I'm trying to restart an optimisation in pymoo. I have a problem defined as: class myOptProb(Problem): '''my body goes here''' algorithm = NSGA2(pop_size=24) problem = myOp

Solution 1:

Yes, you can initialize the algorithm object with a population instead of doing it randomly.

I have written a small tutorial for a biased initialization: https://pymoo.org/customization/initialization.html

Because in your case the data already exists, in a CSV or in-memory file, you might want to create a dummy problem (I have called it Constant in my example) to set the attributes in the Population object. (In the population X, F, G, CV and feasible needs to be set). Another way would be setting the attributes directly...

The biased initialization with a dummy problem is shown below. If you already use pymoo to store the csv files, you can also just np.save the Population object directly and load it. Then all intermediate steps are not necessary.

I am planning to improve checkpoint implementation in the future. So if you have some more feedback and use case which are not possible yet please let me know.

import numpy as np

from pymoo.algorithms.nsga2 import NSGA2
from pymoo.algorithms.so_genetic_algorithm import GA
from pymoo.factory import get_problem, G1, Problem
from pymoo.model.evaluator import Evaluator
from pymoo.model.population import Population
from pymoo.optimize import minimize


classYourProblem(Problem):

    def__init__(self, n_var=10):
        super().__init__(n_var=n_var, n_obj=1, n_constr=0, xl=-0, xu=1, type_var=np.double)

    def_evaluate(self, x, out, *args, **kwargs):
        out["F"] = np.sum(np.square(x - 0.5), axis=1)


problem = YourProblem()

# create initial data and set to the population object - for your this is your file
N = 300
X = np.random.random((N, problem.n_var))
F = np.random.random((N, problem.n_obj))
G = np.random.random((N, problem.n_constr))


classConstant(YourProblem):

    def_evaluate(self, x, out, *args, **kwargs):
        out["F"] = F
        out["G"] = G


pop = Population().new("X", X)
Evaluator().eval(Constant(), pop)

algorithm = GA(pop_size=100, sampling=pop)

minimize(problem,
         algorithm,
         ('n_gen', 10),
         seed=1,
         verbose=True)

Post a Comment for "Restarting An Optimisation With Pymoo"