Source code for pymoo.termination.default

from pymoo.core.termination import Termination
from pymoo.termination.cv import ConstraintViolationTermination
from pymoo.termination.ftol import SingleObjectiveSpaceTermination, MultiObjectiveSpaceTermination
from pymoo.termination.max_eval import MaximumFunctionCallTermination
from pymoo.termination.max_gen import MaximumGenerationTermination
from pymoo.termination.robust import RobustTermination
from pymoo.termination.xtol import DesignSpaceTermination


class DefaultTermination(Termination):

    def __init__(self, x, cv, f, n_max_gen=1000, n_max_evals=100000) -> None:
        super().__init__()
        self.x = x
        self.cv = cv
        self.f = f

        self.max_gen = MaximumGenerationTermination(n_max_gen)
        self.max_evals = MaximumFunctionCallTermination(n_max_evals)

        self.criteria = [self.x, self.cv, self.f, self.max_gen, self.max_evals]

    def _update(self, algorithm):
        p = [criterion.update(algorithm) for criterion in self.criteria]
        return max(p)


[docs] class DefaultSingleObjectiveTermination(DefaultTermination): def __init__(self, xtol=1e-8, cvtol=1e-8, ftol=1e-6, period=30, **kwargs) -> None: x = RobustTermination(DesignSpaceTermination(xtol), period=period) cv = RobustTermination(ConstraintViolationTermination(cvtol, terminate_when_feasible=False), period=period) f = RobustTermination(SingleObjectiveSpaceTermination(ftol, only_feas=True), period=period) super().__init__(x, cv, f, **kwargs)
class DefaultMultiObjectiveTermination(DefaultTermination): def __init__(self, xtol=0.0005, cvtol=1e-8, ftol=0.005, n_skip=5, period=50, **kwargs) -> None: x = RobustTermination(DesignSpaceTermination(tol=xtol, n_skip=n_skip), period) cv = RobustTermination(ConstraintViolationTermination(cvtol, terminate_when_feasible=False, n_skip=n_skip), period) f = RobustTermination(MultiObjectiveSpaceTermination(ftol, only_feas=True, n_skip=n_skip), period) super().__init__(x, cv, f, **kwargs)