Solution_
- the solution type, the class with the PlanningSolution
annotationpublic class ConstraintStreamScoreDirector<Solution_> extends AbstractScoreDirector<Solution_,ConstraintStreamScoreDirectorFactory<Solution_>>
ScoreDirector
, which only recalculates the Score
of the part of the working solution
that changed,
instead of the going through the entire PlanningSolution
. This is incremental calculation, which is fast.ScoreDirector
Modifier and Type | Field and Description |
---|---|
protected ConstraintSession<Solution_> |
session |
allChangesWillBeUndoneBeforeStepEnds, calculationCount, constraintMatchEnabledPreference, logger, lookUpEnabled, lookUpManager, scoreDirectorFactory, variableListenerSupport, workingEntityListRevision, workingInitScore, workingSolution
Constructor and Description |
---|
ConstraintStreamScoreDirector(ConstraintStreamScoreDirectorFactory<Solution_> scoreDirectorFactory,
boolean lookUpEnabled,
boolean constraintMatchEnabledPreference) |
Modifier and Type | Method and Description |
---|---|
void |
afterEntityAdded(EntityDescriptor<Solution_> entityDescriptor,
Object entity) |
void |
afterEntityRemoved(EntityDescriptor<Solution_> entityDescriptor,
Object entity) |
void |
afterProblemFactAdded(Object problemFact) |
void |
afterProblemFactRemoved(Object problemFact) |
void |
afterProblemPropertyChanged(Object problemFactOrEntity) |
void |
afterVariableChanged(VariableDescriptor variableDescriptor,
Object entity) |
Score |
calculateScore()
Calculates the
Score and updates the working solution accordingly. |
void |
close()
Needs to be called after use because some implementations need to clean up their resources.
|
Map<String,ConstraintMatchTotal> |
getConstraintMatchTotalMap()
|
Collection<ConstraintMatchTotal> |
getConstraintMatchTotals()
|
Map<Object,Indictment> |
getIndictmentMap()
Explains the impact of each planning entity or problem fact on the
Score . |
boolean |
isConstraintMatchEnabled() |
void |
setWorkingSolution(Solution_ workingSolution)
The
working solution must never be the same instance as the
best solution , it should be a (un)changed clone. |
afterEntityAdded, afterEntityRemoved, afterVariableChanged, assertExpectedUndoMoveScore, assertExpectedWorkingScore, assertPredictedScoreFromScratch, assertShadowVariablesAreNotStale, assertWorkingScoreFromScratch, beforeEntityAdded, beforeEntityAdded, beforeEntityRemoved, beforeEntityRemoved, beforeProblemFactAdded, beforeProblemFactRemoved, beforeProblemPropertyChanged, beforeVariableChanged, beforeVariableChanged, buildScoreCorruptionAnalysis, buildShadowVariableAnalysis, changeVariableFacade, clone, cloneSolution, cloneWorkingSolution, createChildThreadScoreDirector, createShadowVariablesViolationMessage, doAndProcessMove, doAndProcessMove, explainScore, getCalculationCount, getScoreDefinition, getScoreDirectorFactory, getSolutionDescriptor, getSupplyManager, getWorkingEntityCount, getWorkingEntityList, getWorkingEntityListRevision, getWorkingSolution, getWorkingValueCount, isAllChangesWillBeUndoneBeforeStepEnds, isConstraintMatchEnabledPreference, isLookUpEnabled, isWorkingEntityListDirty, lookUpWorkingObject, lookUpWorkingObjectOrReturnNull, overwriteConstraintMatchEnabledPreference, resetCalculationCount, setAllChangesWillBeUndoneBeforeStepEnds, setCalculatedScore, setWorkingEntityListDirty, toString, triggerVariableListeners
equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
dispose
protected ConstraintSession<Solution_> session
public ConstraintStreamScoreDirector(ConstraintStreamScoreDirectorFactory<Solution_> scoreDirectorFactory, boolean lookUpEnabled, boolean constraintMatchEnabledPreference)
public void setWorkingSolution(Solution_ workingSolution)
ScoreDirector
working solution
must never be the same instance as the
best solution
, it should be a (un)changed clone.
Only call this method on a separate ScoreDirector
instance,
built by SolverFactory.getScoreDirectorFactory()
,
not on the one used inside the Solver
itself.
setWorkingSolution
in interface ScoreDirector<Solution_>
setWorkingSolution
in class AbstractScoreDirector<Solution_,ConstraintStreamScoreDirectorFactory<Solution_>>
workingSolution
- never nullpublic Score calculateScore()
ScoreDirector
Score
and updates the working solution
accordingly.Score
of the working solution
public boolean isConstraintMatchEnabled()
ScoreDirector.getConstraintMatchTotals()
, ScoreDirector.getConstraintMatchTotalMap()
and ScoreDirector.getIndictmentMap()
can be calledpublic Collection<ConstraintMatchTotal> getConstraintMatchTotals()
ScoreDirector
Score
of ScoreDirector.calculateScore()
by splitting it up per Constraint
.
The sum of ConstraintMatchTotal.getScore()
equals ScoreDirector.calculateScore()
.
Call ScoreDirector.calculateScore()
before calling this method,
unless that method has already been called since the last PlanningVariable
changes.
ScoreDirector.getConstraintMatchTotalMap()
,
ScoreDirector.getIndictmentMap()
public Map<String,ConstraintMatchTotal> getConstraintMatchTotalMap()
ScoreDirector
Score
of ScoreDirector.calculateScore()
by splitting it up per Constraint
.
The sum of ConstraintMatchTotal.getScore()
equals ScoreDirector.calculateScore()
.
Call ScoreDirector.calculateScore()
before calling this method,
unless that method has already been called since the last PlanningVariable
changes.
constraintId
(to create one, use ConstraintMatchTotal.composeConstraintId(String, String)
).ScoreDirector.getIndictmentMap()
public Map<Object,Indictment> getIndictmentMap()
ScoreDirector
Score
.
An Indictment
is basically the inverse of a ConstraintMatchTotal
:
it is a Score
total for each justification Object
in ConstraintMatch.getJustificationList()
.
The sum of ConstraintMatchTotal.getScore()
differs from ScoreDirector.calculateScore()
because each ConstraintMatch.getScore()
is counted
for each justification in ConstraintMatch.getJustificationList()
.
Call ScoreDirector.calculateScore()
before calling this method,
unless that method has already been called since the last PlanningVariable
changes.
problem fact
or a planning
entity
ScoreDirector.getConstraintMatchTotalMap()
public void close()
ScoreDirector
close
in interface AutoCloseable
close
in interface ScoreDirector<Solution_>
close
in class AbstractScoreDirector<Solution_,ConstraintStreamScoreDirectorFactory<Solution_>>
public void afterEntityAdded(EntityDescriptor<Solution_> entityDescriptor, Object entity)
afterEntityAdded
in class AbstractScoreDirector<Solution_,ConstraintStreamScoreDirectorFactory<Solution_>>
public void afterVariableChanged(VariableDescriptor variableDescriptor, Object entity)
afterVariableChanged
in interface ScoreDirector<Solution_>
afterVariableChanged
in class AbstractScoreDirector<Solution_,ConstraintStreamScoreDirectorFactory<Solution_>>
public void afterEntityRemoved(EntityDescriptor<Solution_> entityDescriptor, Object entity)
afterEntityRemoved
in class AbstractScoreDirector<Solution_,ConstraintStreamScoreDirectorFactory<Solution_>>
public void afterProblemFactAdded(Object problemFact)
afterProblemFactAdded
in interface ScoreDirector<Solution_>
afterProblemFactAdded
in class AbstractScoreDirector<Solution_,ConstraintStreamScoreDirectorFactory<Solution_>>
public void afterProblemPropertyChanged(Object problemFactOrEntity)
afterProblemPropertyChanged
in interface ScoreDirector<Solution_>
afterProblemPropertyChanged
in class AbstractScoreDirector<Solution_,ConstraintStreamScoreDirectorFactory<Solution_>>
public void afterProblemFactRemoved(Object problemFact)
afterProblemFactRemoved
in interface ScoreDirector<Solution_>
afterProblemFactRemoved
in class AbstractScoreDirector<Solution_,ConstraintStreamScoreDirectorFactory<Solution_>>
Copyright © 2006–2021 JBoss by Red Hat. All rights reserved.