Source code for glompo.convergence.nkillsafterconv

from .basechecker import BaseChecker

__all__ = ("KillsAfterConvergence",)


[docs]class KillsAfterConvergence(BaseChecker): """ Evaluation based on the number of single optimizers converged and the number of optimizers killed thereafter. Returns :obj:`True` after `n_killed` optimizers have been stopped by GloMPO after `n_converged` optimizers have reached normal convergence. """ def __init__(self, n_killed: int = 0, n_converged: int = 1): super().__init__() self.enough_conv = False self.kill_count = 0 self.n_converged = n_converged self.n_killed = n_killed def __call__(self, manager: 'GloMPOManager') -> bool: if manager.conv_counter >= self.n_converged and not self.enough_conv: self.enough_conv = True self.kill_count = len(manager.hunt_victims) self.last_result = self.enough_conv and len(manager.hunt_victims) - self.kill_count >= self.n_killed return self.last_result