Class BasicPlumbingTermination
- java.lang.Object
-
- org.optaplanner.core.impl.solver.event.SolverLifecycleListenerAdapter<Solution_>
-
- org.optaplanner.core.impl.phase.event.PhaseLifecycleListenerAdapter
-
- org.optaplanner.core.impl.solver.termination.AbstractTermination
-
- org.optaplanner.core.impl.solver.termination.BasicPlumbingTermination
-
- All Implemented Interfaces:
EventListener,PhaseLifecycleListener,SolverLifecycleListener,Termination
public class BasicPlumbingTermination extends AbstractTermination
Concurrency notes: Condition predicate on (problemFactChangeQueueis not empty orterminatedEarlyis true).
-
-
Field Summary
Fields Modifier and Type Field Description protected booleandaemonprotected BlockingQueue<ProblemFactChange>problemFactChangeQueueprotected booleanproblemFactChangesBeingProcessedprotected booleanterminatedEarly-
Fields inherited from class org.optaplanner.core.impl.solver.termination.AbstractTermination
logger
-
-
Constructor Summary
Constructors Constructor Description BasicPlumbingTermination(boolean daemon)
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description <Solution_>
booleanaddProblemFactChange(ProblemFactChange<Solution_> problemFactChange)Concurrency note: unblockswaitForRestartSolverDecision().<Solution_>
booleanaddProblemFactChanges(List<ProblemFactChange<Solution_>> problemFactChangeList)Concurrency note: unblockswaitForRestartSolverDecision().doublecalculatePhaseTimeGradient(AbstractPhaseScope phaseScope)doublecalculateSolverTimeGradient(DefaultSolverScope solverScope)A timeGradient is a relative estimate of how long the search will continue.TerminationcreateChildThreadTermination(DefaultSolverScope solverScope, ChildThreadType childThreadType)voidendProblemFactChangesProcessing()booleanisEveryProblemFactChangeProcessed()booleanisPhaseTerminated(AbstractPhaseScope phaseScope)Called by thePhaseafter every step and every move to determine if the search should stop.booleanisSolverTerminated(DefaultSolverScope 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>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.PhaseLifecycleListenerAdapter
phaseEnded, phaseStarted, stepEnded, stepStarted
-
Methods inherited from class org.optaplanner.core.impl.solver.event.SolverLifecycleListenerAdapter
solvingEnded, solvingStarted
-
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.optaplanner.core.impl.phase.event.PhaseLifecycleListener
phaseEnded, phaseStarted, stepEnded, stepStarted
-
Methods inherited from interface org.optaplanner.core.impl.solver.event.SolverLifecycleListener
solvingEnded, solvingStarted
-
-
-
-
Field Detail
-
daemon
protected final boolean daemon
-
terminatedEarly
protected boolean terminatedEarly
-
problemFactChangeQueue
protected BlockingQueue<ProblemFactChange> problemFactChangeQueue
-
problemFactChangesBeingProcessed
protected boolean problemFactChangesBeingProcessed
-
-
Method Detail
-
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
-
addProblemFactChange
public <Solution_> boolean addProblemFactChange(ProblemFactChange<Solution_> problemFactChange)
Concurrency note: unblockswaitForRestartSolverDecision().- Parameters:
problemFactChange- never null- Returns:
- as specified by
Collection.add(E)
-
addProblemFactChanges
public <Solution_> boolean addProblemFactChanges(List<ProblemFactChange<Solution_>> problemFactChangeList)
Concurrency note: unblockswaitForRestartSolverDecision().- Parameters:
problemFactChangeList- never null- Returns:
- as specified by
Collection.add(E)
-
startProblemFactChangesProcessing
public BlockingQueue<ProblemFactChange> startProblemFactChangesProcessing()
-
endProblemFactChangesProcessing
public void endProblemFactChangesProcessing()
-
isEveryProblemFactChangeProcessed
public boolean isEveryProblemFactChangeProcessed()
-
isSolverTerminated
public boolean isSolverTerminated(DefaultSolverScope 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.
-
isPhaseTerminated
public boolean isPhaseTerminated(AbstractPhaseScope 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.
-
calculateSolverTimeGradient
public double calculateSolverTimeGradient(DefaultSolverScope 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 can not 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
public double calculatePhaseTimeGradient(AbstractPhaseScope 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.
-
createChildThreadTermination
public Termination createChildThreadTermination(DefaultSolverScope solverScope, ChildThreadType childThreadType)
Description copied from interface:Termination- Specified by:
createChildThreadTerminationin interfaceTermination- Overrides:
createChildThreadTerminationin classAbstractTermination- Parameters:
solverScope- never nullchildThreadType- never null- Returns:
- not null
-
-