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_>
Concurrency notes:
 Condition predicate on (
problemFactChangeQueue is not empty or terminatedEarly is true).- 
Field Summary
FieldsModifier and TypeFieldDescriptionprotected final booleanprotected BlockingQueue<ProblemChangeAdapter<Solution_>>protected booleanprotected booleanFields inherited from class org.optaplanner.core.impl.solver.termination.AbstractTermination
logger - 
Constructor Summary
Constructors - 
Method Summary
Modifier and TypeMethodDescriptionbooleanaddProblemChange(ProblemChangeAdapter<Solution_> problemChange) Concurrency note: unblockswaitForRestartSolverDecision().booleanaddProblemChanges(List<ProblemChangeAdapter<Solution_>> problemChangeList) Concurrency note: unblockswaitForRestartSolverDecision().doublecalculatePhaseTimeGradient(AbstractPhaseScope<Solution_> phaseScope) doublecalculateSolverTimeGradient(SolverScope<Solution_> solverScope) A timeGradient is a relative estimate of how long the search will continue.createChildThreadTermination(SolverScope<Solution_> solverScope, ChildThreadType childThreadType) voidbooleanbooleanisPhaseTerminated(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.booleanThis method is thread-safe.voidThis method is thread-safe.booleanThis method is thread-safe.toString()booleanIf this returns true, then the problemFactChangeQueue is definitely not empty.Methods inherited from class org.optaplanner.core.impl.phase.event.PhaseLifecycleListenerAdapter
phaseEnded, phaseStarted, stepEnded, stepStartedMethods inherited from class org.optaplanner.core.impl.solver.event.SolverLifecycleListenerAdapter
solvingEnded, solvingStartedMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, waitMethods inherited from interface org.optaplanner.core.impl.phase.event.PhaseLifecycleListener
phaseEnded, phaseStarted, stepEnded, stepStartedMethods inherited from interface org.optaplanner.core.impl.solver.event.SolverLifecycleListener
solvingEnded, solvingError, solvingStarted 
- 
Field Details
- 
daemon
protected final boolean daemon - 
terminatedEarly
protected boolean terminatedEarly - 
problemFactChangeQueue
 - 
problemFactChangesBeingProcessed
protected boolean problemFactChangesBeingProcessed 
 - 
 - 
Constructor Details
- 
BasicPlumbingTermination
public BasicPlumbingTermination(boolean daemon)  
 - 
 - 
Method Details
- 
resetTerminateEarly
public void resetTerminateEarly()This method is thread-safe. - 
terminateEarly
public boolean terminateEarly()This method is thread-safe.Concurrency note: unblocks
waitForRestartSolverDecision().- Returns:
 - 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
problemFactChangeQueueis not empty orterminatedEarlyis true.- Returns:
 - true if the solver needs to be restarted
 
 - 
addProblemChange
Concurrency note: unblockswaitForRestartSolverDecision().- Parameters:
 problemChange- never null- Returns:
 - as specified by 
Collection.add(E) 
 - 
addProblemChanges
Concurrency note: unblockswaitForRestartSolverDecision().- Parameters:
 problemChangeList- never null- Returns:
 - as specified by 
Collection.add(E) 
 - 
startProblemFactChangesProcessing
 - 
endProblemFactChangesProcessing
public void endProblemFactChangesProcessing() - 
isEveryProblemFactChangeProcessed
public boolean isEveryProblemFactChangeProcessed() - 
isSolverTerminated
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.
 
 - 
isPhaseTerminated
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.
 
 - 
calculateSolverTimeGradient
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. 
 - 
calculatePhaseTimeGradient
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. 
 - 
createChildThreadTermination
public Termination<Solution_> createChildThreadTermination(SolverScope<Solution_> solverScope, ChildThreadType childThreadType) Description copied from interface:Termination- Specified by:
 createChildThreadTerminationin interfaceTermination<Solution_>- Overrides:
 createChildThreadTerminationin classAbstractTermination<Solution_>- Parameters:
 solverScope- never nullchildThreadType- never null- Returns:
 - not null
 
 - 
toString
 
 -