OptaPlanner core 6.2.0.Beta1

org.optaplanner.core.impl.solver
Class BasicPlumbingTermination

java.lang.Object
  extended by org.optaplanner.core.impl.solver.event.SolverLifecycleListenerAdapter
      extended by org.optaplanner.core.impl.phase.event.PhaseLifecycleListenerAdapter
          extended by org.optaplanner.core.impl.solver.termination.AbstractTermination
              extended by org.optaplanner.core.impl.solver.BasicPlumbingTermination
All Implemented Interfaces:
EventListener, PhaseLifecycleListener, SolverLifecycleListener, Termination

public class BasicPlumbingTermination
extends AbstractTermination

Concurrency notes: Condition predicate on (problemFactChangeQueue is not empty or terminatedEarly is true)


Field Summary
protected  boolean daemon
           
protected  BlockingQueue<ProblemFactChange> problemFactChangeQueue
           
protected  boolean problemFactChangesBeingProcessed
           
protected  boolean terminatedEarly
           
 
Fields inherited from class org.optaplanner.core.impl.solver.termination.AbstractTermination
logger
 
Constructor Summary
BasicPlumbingTermination(boolean daemon)
           
 
Method Summary
 boolean addProblemFactChange(ProblemFactChange problemFactChange)
          Concurrency note: unblocks waitForRestartSolverDecision()
 double calculatePhaseTimeGradient(AbstractPhaseScope phaseScope)
          See Termination.calculateSolverTimeGradient(DefaultSolverScope).
 double calculateSolverTimeGradient(DefaultSolverScope solverScope)
          A timeGradient is a relative estimate of how long the search will continue.
 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()
           
 void resetTerminateEarly()
           
 BlockingQueue<ProblemFactChange> startProblemFactChangesProcessing()
           
 boolean terminateEarly()
          Concurrency note: unblocks waitForRestartSolverDecision()
 boolean waitForRestartSolverDecision()
          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, toString, 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
Constructor Detail

BasicPlumbingTermination

public BasicPlumbingTermination(boolean daemon)
Method Detail

resetTerminateEarly

public void resetTerminateEarly()

terminateEarly

public boolean terminateEarly()
Concurrency note: unblocks waitForRestartSolverDecision()

Returns:
true if successful

isTerminateEarly

public boolean isTerminateEarly()

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.

Returns:
true if the solver needs to be restarted

addProblemFactChange

public boolean addProblemFactChange(ProblemFactChange problemFactChange)
Concurrency note: unblocks waitForRestartSolverDecision()

Parameters:
problemFactChange - 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: Termination
Called by the Solver after 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: Termination
Called by the Phase after 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: 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 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.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.

calculatePhaseTimeGradient

public double calculatePhaseTimeGradient(AbstractPhaseScope phaseScope)
Description copied from interface: Termination
See Termination.calculateSolverTimeGradient(DefaultSolverScope).

Parameters:
phaseScope - never null
Returns:
timeGradient t for which 0.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.

OptaPlanner core 6.2.0.Beta1

Copyright © 2006-2014 JBoss by Red Hat. All Rights Reserved.