Class BasicPlumbingTermination<Solution_>

    • Field Detail

      • daemon

        protected final boolean daemon
      • terminatedEarly

        protected boolean terminatedEarly
      • problemFactChangesBeingProcessed

        protected boolean problemFactChangesBeingProcessed
    • Constructor Detail

      • BasicPlumbingTermination

        public BasicPlumbingTermination​(boolean daemon)
    • Method Detail

      • resetTerminateEarly

        public void resetTerminateEarly()
        This method is thread-safe.
      • terminateEarly

        public boolean terminateEarly()
        This method is thread-safe.

        Concurrency note: unblocks waitForRestartSolverDecision().

        true if successful
      • isTerminateEarly

        public boolean isTerminateEarly()
        This method is thread-safe.
      • waitForRestartSolverDecision

        public boolean waitForRestartSolverDecision()
        If this returns true, then the problemFactChangeQueue is definitely not empty.

        Concurrency note: Blocks until problemFactChangeQueue is not empty or terminatedEarly is true.

        true if the solver needs to be restarted
      • endProblemFactChangesProcessing

        public void endProblemFactChangesProcessing()
      • isEveryProblemFactChangeProcessed

        public boolean isEveryProblemFactChangeProcessed()
      • isSolverTerminated

        public boolean isSolverTerminated​(SolverScope<Solution_> solverScope)
        Description copied from interface: Termination
        Called by the Solver after every phase to determine if the search should stop.
        solverScope - never null
        true if the search should terminate.
      • isPhaseTerminated

        public boolean isPhaseTerminated​(AbstractPhaseScope<Solution_> phaseScope)
        Description copied from interface: Termination
        Called by the Phase after every step and every move to determine if the search should stop.
        phaseScope - never null
        true if the search should terminate.
      • calculateSolverTimeGradient

        public double calculateSolverTimeGradient​(SolverScope<Solution_> solverScope)
        Description copied from interface: Termination
        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.

        solverScope - never null
        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.