Solution_ - the solution type, the class with the PlanningSolution annotationpublic interface ScoreDirector<Solution_> extends AutoCloseable
working solution
and calculates the Score for it.| Modifier and Type | Method and Description |
|---|---|
void |
afterEntityAdded(Object entity) |
void |
afterEntityRemoved(Object entity) |
void |
afterProblemFactAdded(Object problemFact) |
void |
afterProblemFactRemoved(Object problemFact) |
void |
afterProblemPropertyChanged(Object problemFactOrEntity) |
void |
afterVariableChanged(Object entity,
String variableName) |
void |
afterVariableChanged(VariableDescriptor variableDescriptor,
Object entity) |
void |
beforeEntityAdded(Object entity) |
void |
beforeEntityRemoved(Object entity) |
void |
beforeProblemFactAdded(Object problemFact) |
void |
beforeProblemFactRemoved(Object problemFact) |
void |
beforeProblemPropertyChanged(Object problemFactOrEntity) |
void |
beforeVariableChanged(Object entity,
String variableName) |
void |
beforeVariableChanged(VariableDescriptor variableDescriptor,
Object entity) |
Score |
calculateScore()
Calculates the
Score and updates the working solution accordingly. |
void |
changeVariableFacade(VariableDescriptor variableDescriptor,
Object entity,
Object newValue) |
void |
close()
Needs to be called after use because some implementations need to clean up their resources.
|
default void |
dispose()
Deprecated.
in favor of
close() |
String |
explainScore()
Returns a diagnostic text that explains the
Score through the ConstraintMatch API
to identify which constraints or planning entities cause that score quality. |
Map<String,ConstraintMatchTotal> |
getConstraintMatchTotalMap()
|
Collection<ConstraintMatchTotal> |
getConstraintMatchTotals()
|
Map<Object,Indictment> |
getIndictmentMap()
Explains the impact of each planning entity or problem fact on the
Score. |
Solution_ |
getWorkingSolution()
The
PlanningSolution that is used to calculate the Score. |
boolean |
isConstraintMatchEnabled() |
<E> E |
lookUpWorkingObject(E externalObject)
Translates an entity or fact instance (often from another
Thread or JVM)
to this ScoreDirector's internal working instance. |
<E> E |
lookUpWorkingObjectOrReturnNull(E externalObject)
As defined by
lookUpWorkingObject(Object),
but doesn't fail fast if no workingObject was ever added for the externalObject. |
void |
setWorkingSolution(Solution_ workingSolution)
The
working solution must never be the same instance as the
best solution, it should be a (un)changed clone. |
void |
triggerVariableListeners() |
Solution_ getWorkingSolution()
PlanningSolution that is used to calculate the Score.
Because a Score is best calculated incrementally (by deltas),
the ScoreDirector needs to be notified when its working solution changes.
If the working solution has been changed since calculateScore() was called,
its Score won't be correct.
void setWorkingSolution(Solution_ workingSolution)
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.
workingSolution - never nullScore calculateScore()
Score and updates the working solution accordingly.Score of the working solutionboolean isConstraintMatchEnabled()
getConstraintMatchTotals(), getConstraintMatchTotalMap()
and getIndictmentMap() can be calledCollection<ConstraintMatchTotal> getConstraintMatchTotals()
Score of calculateScore() by splitting it up per Constraint.
The sum of ConstraintMatchTotal.getScore() equals calculateScore().
Call calculateScore() before calling this method,
unless that method has already been called since the last PlanningVariable changes.
IllegalStateException - if isConstraintMatchEnabled() returns falsegetConstraintMatchTotalMap(),
getIndictmentMap()Map<String,ConstraintMatchTotal> getConstraintMatchTotalMap()
Score of calculateScore() by splitting it up per Constraint.
The sum of ConstraintMatchTotal.getScore() equals calculateScore().
Call 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)).IllegalStateException - if isConstraintMatchEnabled() returns falsegetIndictmentMap()Map<Object,Indictment> getIndictmentMap()
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 calculateScore()
because each ConstraintMatch.getScore() is counted
for each justification in ConstraintMatch.getJustificationList().
Call calculateScore() before calling this method,
unless that method has already been called since the last PlanningVariable changes.
problem fact or a planning
entityIllegalStateException - if isConstraintMatchEnabled() returns falsegetConstraintMatchTotalMap()String explainScore()
Score through the ConstraintMatch API
to identify which constraints or planning entities cause that score quality.
In case of an infeasible solution,
this can help diagnose the cause of that.
Do not parse this string.
Instead, to provide this information in a UI or a service,
use getConstraintMatchTotalMap() and getIndictmentMap()
and convert those into a domain specific API.
This automatically calls calculateScore() first.
IllegalStateException - if isConstraintMatchEnabled() returns falsevoid beforeEntityAdded(Object entity)
void afterEntityAdded(Object entity)
void triggerVariableListeners()
void beforeEntityRemoved(Object entity)
void afterEntityRemoved(Object entity)
void beforeProblemFactAdded(Object problemFact)
void afterProblemFactAdded(Object problemFact)
void beforeProblemPropertyChanged(Object problemFactOrEntity)
void afterProblemPropertyChanged(Object problemFactOrEntity)
void beforeProblemFactRemoved(Object problemFact)
void afterProblemFactRemoved(Object problemFact)
<E> E lookUpWorkingObject(E externalObject)
Thread or JVM)
to this ScoreDirector's internal working instance.
Useful for Move.rebase(ScoreDirector) and in a ProblemFactChange.
Matching is determined by the LookUpStrategyType on PlanningSolution.
Matching uses a PlanningId by default.
E - the object typeexternalObject - sometimes nullIllegalArgumentException - if there is no workingObject for externalObject, if it cannot be looked up
or if the externalObject's class is not supportedIllegalStateException - if it cannot be looked up<E> E lookUpWorkingObjectOrReturnNull(E externalObject)
lookUpWorkingObject(Object),
but doesn't fail fast if no workingObject was ever added for the externalObject.
It's recommended to use lookUpWorkingObject(Object) instead,
especially in a Move.rebase(ScoreDirector) code.E - the object typeexternalObject - sometimes nullIllegalArgumentException - if it cannot be looked up or if the externalObject's class is not supportedIllegalStateException - if it cannot be looked upvoid close()
close in interface AutoCloseable@Deprecated default void dispose()
close()void beforeVariableChanged(VariableDescriptor variableDescriptor, Object entity)
void afterVariableChanged(VariableDescriptor variableDescriptor, Object entity)
void changeVariableFacade(VariableDescriptor variableDescriptor, Object entity, Object newValue)
Copyright © 2006–2021 JBoss by Red Hat. All rights reserved.