public class BasicPlumbingTermination extends AbstractTermination
problemFactChangeQueue
is not empty or terminatedEarly
is true).Modifier and Type | Field and Description |
---|---|
protected boolean |
daemon |
protected BlockingQueue<ProblemFactChange> |
problemFactChangeQueue |
protected boolean |
problemFactChangesBeingProcessed |
protected boolean |
terminatedEarly |
logger
Constructor and Description |
---|
BasicPlumbingTermination(boolean daemon) |
Modifier and Type | Method and Description |
---|---|
<Solution_> |
addProblemFactChange(ProblemFactChange<Solution_> problemFactChange)
Concurrency note: unblocks
waitForRestartSolverDecision() . |
<Solution_> |
addProblemFactChanges(List<ProblemFactChange<Solution_>> problemFactChangeList)
Concurrency note: unblocks
waitForRestartSolverDecision() . |
double |
calculatePhaseTimeGradient(AbstractPhaseScope phaseScope)
|
double |
calculateSolverTimeGradient(DefaultSolverScope solverScope)
A timeGradient is a relative estimate of how long the search will continue.
|
Termination |
createChildThreadTermination(DefaultSolverScope solverScope,
ChildThreadType childThreadType)
|
void |
endProblemFactChangesProcessing() |
boolean |
isEveryProblemFactChangeProcessed() |
boolean |
isPhaseTerminated(AbstractPhaseScope phaseScope)
Called by the
Phase after every step and every move to determine if the search should stop. |
boolean |
isSolverTerminated(DefaultSolverScope solverScope)
Called by the
Solver after every phase to determine if the search should stop. |
boolean |
isTerminateEarly()
This method is thread-safe.
|
void |
resetTerminateEarly()
This method is thread-safe.
|
BlockingQueue<ProblemFactChange> |
startProblemFactChangesProcessing() |
boolean |
terminateEarly()
This method is thread-safe.
|
String |
toString() |
boolean |
waitForRestartSolverDecision()
If this returns true, then the problemFactChangeQueue is definitely not empty.
|
phaseEnded, phaseStarted, stepEnded, stepStarted
solvingEnded, solvingStarted
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
phaseEnded, phaseStarted, stepEnded, stepStarted
solvingEnded, solvingStarted
protected final boolean daemon
protected boolean terminatedEarly
protected BlockingQueue<ProblemFactChange> problemFactChangeQueue
protected boolean problemFactChangesBeingProcessed
public void resetTerminateEarly()
public boolean terminateEarly()
Concurrency note: unblocks waitForRestartSolverDecision()
.
public boolean isTerminateEarly()
public boolean waitForRestartSolverDecision()
Concurrency note: Blocks until problemFactChangeQueue
is not empty or terminatedEarly
is true.
public <Solution_> boolean addProblemFactChange(ProblemFactChange<Solution_> problemFactChange)
waitForRestartSolverDecision()
.problemFactChange
- never nullCollection.add(E)
public <Solution_> boolean addProblemFactChanges(List<ProblemFactChange<Solution_>> problemFactChangeList)
waitForRestartSolverDecision()
.problemFactChangeList
- never nullCollection.add(E)
public BlockingQueue<ProblemFactChange> startProblemFactChangesProcessing()
public void endProblemFactChangesProcessing()
public boolean isEveryProblemFactChangeProcessed()
public boolean isSolverTerminated(DefaultSolverScope solverScope)
Termination
Solver
after every phase to determine if the search should stop.solverScope
- never nullpublic boolean isPhaseTerminated(AbstractPhaseScope phaseScope)
Termination
Phase
after every step and every move to determine if the search should stop.phaseScope
- never nullpublic double calculateSolverTimeGradient(DefaultSolverScope solverScope)
Termination
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.
solverScope
- never null0.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.public double calculatePhaseTimeGradient(AbstractPhaseScope phaseScope)
Termination
phaseScope
- never null0.0 <= t <= 1.0 or -1.0
when it is not supported.
At the start of a phase t is 0.0 and at the end t would be 1.0.public Termination createChildThreadTermination(DefaultSolverScope solverScope, ChildThreadType childThreadType)
Termination
createChildThreadTermination
in interface Termination
createChildThreadTermination
in class AbstractTermination
solverScope
- never nullchildThreadType
- never nullCopyright © 2006–2019 JBoss by Red Hat. All rights reserved.