Interface Termination<Solution_>

All Superinterfaces:
EventListener, PhaseLifecycleListener<Solution_>, SolverLifecycleListener<Solution_>
All Known Implementing Classes:
AbstractCompositeTermination, AbstractTermination, AndCompositeTermination, BasicPlumbingTermination, BestScoreFeasibleTermination, BestScoreTermination, ChildThreadPlumbingTermination, OrCompositeTermination, PhaseToSolverTerminationBridge, ScoreCalculationCountTermination, StepCountTermination, TimeMillisSpentTermination, UnimprovedStepCountTermination, UnimprovedTimeMillisSpentScoreDifferenceThresholdTermination, UnimprovedTimeMillisSpentTermination

public interface Termination<Solution_> extends PhaseLifecycleListener<Solution_>
A Termination determines when a Solver or a Phase should stop.

An implementation must extend AbstractTermination to ensure backwards compatibility in future versions.

See Also:
  • Method Details

    • isSolverTerminated

      boolean isSolverTerminated(SolverScope<Solution_> solverScope)
      Called by the Solver after every phase to determine if the search should stop.
      Parameters:
      solverScope - never null
      Returns:
      true if the search should terminate.
    • isPhaseTerminated

      boolean isPhaseTerminated(AbstractPhaseScope<Solution_> phaseScope)
      Called by the Phase after every step and every move to determine if the search should stop.
      Parameters:
      phaseScope - never null
      Returns:
      true if the search should terminate.
    • calculateSolverTimeGradient

      double calculateSolverTimeGradient(SolverScope<Solution_> solverScope)
      A timeGradient is a relative estimate of how long the search will continue.

      Clients that use a timeGradient should cache it at the start of a single step because some implementations are not time-stable.

      If a timeGradient cannot be calculated, it should return -1.0. Several implementations (such a SimulatedAnnealingAcceptor) require a correctly implemented timeGradient.

      A Termination's timeGradient can be requested after they are terminated, so implementations should be careful not to return a timeGradient above 1.0.

      Parameters:
      solverScope - never null
      Returns:
      timeGradient t for which 0.0 <= t <= 1.0 or -1.0 when it is not supported. At the start of a solver t is 0.0 and at the end t would be 1.0.
    • calculatePhaseTimeGradient

      double calculatePhaseTimeGradient(AbstractPhaseScope<Solution_> phaseScope)
      Parameters:
      phaseScope - never null
      Returns:
      timeGradient t for which 0.0 <= t <= 1.0 or -1.0 when it is not supported. At the start of a phase t is 0.0 and at the end t would be 1.0.
    • createChildThreadTermination

      Termination<Solution_> createChildThreadTermination(SolverScope<Solution_> solverScope, ChildThreadType childThreadType)
      Create a Termination for a child Thread of the Solver.
      Parameters:
      solverScope - never null
      childThreadType - never null
      Returns:
      not null
      Throws:
      UnsupportedOperationException - if not supported by this termination