Class BasicPlumbingTermination<Solution_>
- java.lang.Object
- 
- org.optaplanner.core.impl.solver.event.SolverLifecycleListenerAdapter<Solution_>
- 
- org.optaplanner.core.impl.phase.event.PhaseLifecycleListenerAdapter<Solution_>
- 
- org.optaplanner.core.impl.solver.termination.AbstractTermination<Solution_>
- 
- org.optaplanner.core.impl.solver.termination.BasicPlumbingTermination<Solution_>
 
 
 
 
- 
- All Implemented Interfaces:
- EventListener,- PhaseLifecycleListener<Solution_>,- SolverLifecycleListener<Solution_>,- Termination<Solution_>
 
 public class BasicPlumbingTermination<Solution_> extends AbstractTermination<Solution_> Concurrency notes: Condition predicate on (problemFactChangeQueueis not empty orterminatedEarlyis true).
- 
- 
Field SummaryFields Modifier and Type Field Description protected booleandaemonprotected BlockingQueue<ProblemFactChange<Solution_>>problemFactChangeQueueprotected booleanproblemFactChangesBeingProcessedprotected booleanterminatedEarly- 
Fields inherited from class org.optaplanner.core.impl.solver.termination.AbstractTerminationlogger
 
- 
 - 
Constructor SummaryConstructors Constructor Description BasicPlumbingTermination(boolean daemon)
 - 
Method SummaryAll Methods Instance Methods Concrete Methods Modifier and Type Method Description booleanaddProblemFactChange(ProblemFactChange<Solution_> problemFactChange)Concurrency note: unblockswaitForRestartSolverDecision().booleanaddProblemFactChanges(List<ProblemFactChange<Solution_>> problemFactChangeList)Concurrency note: unblockswaitForRestartSolverDecision().doublecalculatePhaseTimeGradient(AbstractPhaseScope<Solution_> phaseScope)doublecalculateSolverTimeGradient(SolverScope<Solution_> solverScope)A timeGradient is a relative estimate of how long the search will continue.Termination<Solution_>createChildThreadTermination(SolverScope<Solution_> solverScope, ChildThreadType childThreadType)voidendProblemFactChangesProcessing()booleanisEveryProblemFactChangeProcessed()booleanisPhaseTerminated(AbstractPhaseScope<Solution_> phaseScope)Called by thePhaseafter every step and every move to determine if the search should stop.booleanisSolverTerminated(SolverScope<Solution_> solverScope)Called by theSolverafter every phase to determine if the search should stop.booleanisTerminateEarly()This method is thread-safe.voidresetTerminateEarly()This method is thread-safe.BlockingQueue<ProblemFactChange<Solution_>>startProblemFactChangesProcessing()booleanterminateEarly()This method is thread-safe.StringtoString()booleanwaitForRestartSolverDecision()If this returns true, then the problemFactChangeQueue is definitely not empty.- 
Methods inherited from class org.optaplanner.core.impl.phase.event.PhaseLifecycleListenerAdapterphaseEnded, phaseStarted, stepEnded, stepStarted
 - 
Methods inherited from class org.optaplanner.core.impl.solver.event.SolverLifecycleListenerAdaptersolvingEnded, solvingStarted
 - 
Methods inherited from class java.lang.Objectclone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 - 
Methods inherited from interface org.optaplanner.core.impl.phase.event.PhaseLifecycleListenerphaseEnded, phaseStarted, stepEnded, stepStarted
 - 
Methods inherited from interface org.optaplanner.core.impl.solver.event.SolverLifecycleListenersolvingEnded, solvingStarted
 
- 
 
- 
- 
- 
Field Detail- 
daemonprotected final boolean daemon 
 - 
terminatedEarlyprotected boolean terminatedEarly 
 - 
problemFactChangeQueueprotected BlockingQueue<ProblemFactChange<Solution_>> problemFactChangeQueue 
 - 
problemFactChangesBeingProcessedprotected boolean problemFactChangesBeingProcessed 
 
- 
 - 
Method Detail- 
resetTerminateEarlypublic void resetTerminateEarly() This method is thread-safe.
 - 
terminateEarlypublic boolean terminateEarly() This method is thread-safe.Concurrency note: unblocks waitForRestartSolverDecision().- Returns:
- true if successful
 
 - 
isTerminateEarlypublic boolean isTerminateEarly() This method is thread-safe.
 - 
waitForRestartSolverDecisionpublic boolean waitForRestartSolverDecision() If this returns true, then the problemFactChangeQueue is definitely not empty.Concurrency note: Blocks until problemFactChangeQueueis not empty orterminatedEarlyis true.- Returns:
- true if the solver needs to be restarted
 
 - 
addProblemFactChangepublic boolean addProblemFactChange(ProblemFactChange<Solution_> problemFactChange) Concurrency note: unblockswaitForRestartSolverDecision().- Parameters:
- problemFactChange- never null
- Returns:
- as specified by Collection.add(E)
 
 - 
addProblemFactChangespublic boolean addProblemFactChanges(List<ProblemFactChange<Solution_>> problemFactChangeList) Concurrency note: unblockswaitForRestartSolverDecision().- Parameters:
- problemFactChangeList- never null
- Returns:
- as specified by Collection.add(E)
 
 - 
startProblemFactChangesProcessingpublic BlockingQueue<ProblemFactChange<Solution_>> startProblemFactChangesProcessing() 
 - 
endProblemFactChangesProcessingpublic void endProblemFactChangesProcessing() 
 - 
isEveryProblemFactChangeProcessedpublic boolean isEveryProblemFactChangeProcessed() 
 - 
isSolverTerminatedpublic boolean isSolverTerminated(SolverScope<Solution_> solverScope) Description copied from interface:TerminationCalled by theSolverafter every phase to determine if the search should stop.- Parameters:
- solverScope- never null
- Returns:
- true if the search should terminate.
 
 - 
isPhaseTerminatedpublic boolean isPhaseTerminated(AbstractPhaseScope<Solution_> phaseScope) Description copied from interface:TerminationCalled by thePhaseafter every step and every move to determine if the search should stop.- Parameters:
- phaseScope- never null
- Returns:
- true if the search should terminate.
 
 - 
calculateSolverTimeGradientpublic double calculateSolverTimeGradient(SolverScope<Solution_> solverScope) Description copied from interface:TerminationA 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.0when it is not supported. At the start of a solver t is 0.0 and at the end t would be 1.0.
 
 - 
calculatePhaseTimeGradientpublic double calculatePhaseTimeGradient(AbstractPhaseScope<Solution_> phaseScope) Description copied from interface:Termination- Parameters:
- phaseScope- never null
- Returns:
- timeGradient t for which 0.0 <= t <= 1.0 or -1.0when it is not supported. At the start of a phase t is 0.0 and at the end t would be 1.0.
 
 - 
createChildThreadTerminationpublic Termination<Solution_> createChildThreadTermination(SolverScope<Solution_> solverScope, ChildThreadType childThreadType) Description copied from interface:Termination- Specified by:
- createChildThreadTerminationin interface- Termination<Solution_>
- Overrides:
- createChildThreadTerminationin class- AbstractTermination<Solution_>
- Parameters:
- solverScope- never null
- childThreadType- never null
- Returns:
- not null
 
 
- 
 
-