Interface PhaseTermination<Solution_>

All Superinterfaces:
Termination<Solution_>
All Known Subinterfaces:
UniversalTermination<Solution_>
All Known Implementing Classes:
BasicPlumbingTermination, ChildThreadPlumbingTermination

@NullMarked public sealed interface PhaseTermination<Solution_> extends Termination<Solution_> permits UniversalTermination<Solution_> (not exhaustive)
Determines when a Phase should stop.
  • Method Details

    • isApplicableTo

      default boolean isApplicableTo(Class<? extends AbstractPhaseScope> phaseScopeClass)
      Returns:
      false if the termination should be skipped on the given phase, when used as part of AbstractCompositeTermination.
    • isPhaseTerminated

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

      double calculatePhaseTimeGradient(AbstractPhaseScope<Solution_> phaseScope)
      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.

      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.
    • phaseStarted

      void phaseStarted(AbstractPhaseScope<Solution_> phaseScope)
    • stepStarted

      void stepStarted(AbstractStepScope<Solution_> stepScope)
    • stepEnded

      void stepEnded(AbstractStepScope<Solution_> stepScope)
    • phaseEnded

      void phaseEnded(AbstractPhaseScope<Solution_> phaseScope)
    • bridge

      static <Solution_> PhaseTermination<Solution_> bridge(SolverTermination<Solution_> termination)