Source code for pymoo.core.termination
from abc import abstractmethod
[docs]
class Termination:
def __init__(self) -> None:
super().__init__()
# the algorithm can be forced to terminate by setting this attribute to true
self.force_termination = False
# the value indicating how much perc has been made
self.perc = 0.0
[docs]
def update(self, algorithm):
"""
Provide the termination criterion a current status of the algorithm to update the perc.
Parameters
----------
algorithm : object
The algorithm object which is used to determine whether a run has terminated.
"""
if self.force_termination:
progress = 1.0
else:
progress = self._update(algorithm)
assert progress >= 0.0, "Invalid progress was set by the TerminationCriterion."
self.perc = progress
return self.perc
def has_terminated(self):
return self.perc >= 1.0
def do_continue(self):
return not self.has_terminated()
def terminate(self):
self.force_termination = True
@abstractmethod
def _update(self, algorithm):
pass
class NoTermination(Termination):
def _update(self, algorithm):
return 0.0
class MultipleCriteria(Termination):
def __init__(self, *args) -> None:
super().__init__()
self.criteria = args
class TerminateIfAny(MultipleCriteria):
def _update(self, algorithm):
return max([termination.update(algorithm) for termination in self.criteria])
class TerminateIfAll(MultipleCriteria):
def _update(self, algorithm):
return min([termination.update(algorithm) for termination in self.criteria])