public interface ConstraintStream
one
, two
or more objects.
Constraint streams are similar to a declaration of a JDK Stream
or an SQL query,
but they support incremental score calculation
and ScoreDirector.getConstraintMatchTotalMap()
score justification}.
An object that passes through constraint streams is called a fact.
It's either a problem fact
or a planning entity
.
A constraint stream is typically created with ConstraintFactory.from(Class)
or UniConstraintStream.join(UniConstraintStream, BiJoiner)
by joining another constraint stream}.
Constraint streams form a directed, non-cyclic graph, with multiple start nodes (which listen to fact changes)
and one end node per Constraint
(which affect the Score
).
Throughout this documentation, we will be using the following terminology:
ConstraintFactory.from(Class)
(or similar
methods) and terminated by a penalization or reward operation.ConstraintStream
) are parts of a constraint stream which mutate
it.
They may remove tuples from further evaluation, expand or contract streams. Every constraint stream has
a terminal operation, which is either a penalization or a reward.PlanningEntity
) or problem facts (see
ProblemFactProperty
or ProblemFactCollectionProperty
).UniConstraintStream
operates on single-fact tuples {A} and BiConstraintStream
operates on two-fact tuples {A, B}.
Putting facts into a tuple implies a relationship exists between these facts.Modifier and Type | Method and Description |
---|---|
ConstraintFactory |
getConstraintFactory()
The
ConstraintFactory that build this. |
default Constraint |
impact(String constraintName,
Score<?> constraintWeight)
Positively or negatively impact the
Score by the constraintWeight for each match. |
Constraint |
impact(String constraintPackage,
String constraintName,
Score<?> constraintWeight)
As defined by
impact(String, Score) . |
default Constraint |
penalize(String constraintName,
Score<?> constraintWeight)
Negatively impact the
Score : subtract the constraintWeight for each match. |
Constraint |
penalize(String constraintPackage,
String constraintName,
Score<?> constraintWeight)
As defined by
penalize(String, Score) . |
default Constraint |
penalizeConfigurable(String constraintName)
Negatively impact the
Score : subtract the ConstraintWeight for each match. |
Constraint |
penalizeConfigurable(String constraintPackage,
String constraintName)
As defined by
penalizeConfigurable(String) . |
default Constraint |
reward(String constraintName,
Score<?> constraintWeight)
Positively impact the
Score : add the constraintWeight for each match. |
Constraint |
reward(String constraintPackage,
String constraintName,
Score<?> constraintWeight)
As defined by
reward(String, Score) . |
default Constraint |
rewardConfigurable(String constraintName)
Positively impact the
Score : add the ConstraintWeight for each match. |
Constraint |
rewardConfigurable(String constraintPackage,
String constraintName)
As defined by
rewardConfigurable(String) . |
ConstraintFactory getConstraintFactory()
ConstraintFactory
that build this.default Constraint penalize(String constraintName, Score<?> constraintWeight)
Score
: subtract the constraintWeight for each match.
To avoid hard-coding the constraintWeight, to allow end-users to tweak it,
use penalizeConfigurable(String)
and a ConstraintConfiguration
instead.
The Constraint.getConstraintPackage()
defaults to the package of the PlanningSolution
class.
constraintName
- never null, shows up in ConstraintMatchTotal
during score justificationconstraintWeight
- never nullConstraint penalize(String constraintPackage, String constraintName, Score<?> constraintWeight)
penalize(String, Score)
.constraintPackage
- never nullconstraintName
- never nullconstraintWeight
- never nulldefault Constraint penalizeConfigurable(String constraintName)
Score
: subtract the ConstraintWeight
for each match.
The constraintWeight comes from an ConstraintWeight
annotated member on the ConstraintConfiguration
,
so end users can change the constraint weights dynamically.
This constraint may be deactivated if the ConstraintWeight
is zero.
If there is no ConstraintConfiguration
, use penalize(String, Score)
instead.
The Constraint.getConstraintPackage()
defaults to ConstraintConfiguration.constraintPackage()
.
constraintName
- never null, shows up in ConstraintMatchTotal
during score justificationConstraint penalizeConfigurable(String constraintPackage, String constraintName)
penalizeConfigurable(String)
.constraintPackage
- never nullconstraintName
- never nulldefault Constraint reward(String constraintName, Score<?> constraintWeight)
Score
: add the constraintWeight for each match.
To avoid hard-coding the constraintWeight, to allow end-users to tweak it,
use penalizeConfigurable(String)
and a ConstraintConfiguration
instead.
The Constraint.getConstraintPackage()
defaults to the package of the PlanningSolution
class.
constraintName
- never null, shows up in ConstraintMatchTotal
during score justificationconstraintWeight
- never nullConstraint reward(String constraintPackage, String constraintName, Score<?> constraintWeight)
reward(String, Score)
.constraintPackage
- never nullconstraintName
- never nullconstraintWeight
- never nulldefault Constraint rewardConfigurable(String constraintName)
Score
: add the ConstraintWeight
for each match.
The constraintWeight comes from an ConstraintWeight
annotated member on the ConstraintConfiguration
,
so end users can change the constraint weights dynamically.
This constraint may be deactivated if the ConstraintWeight
is zero.
If there is no ConstraintConfiguration
, use reward(String, Score)
instead.
The Constraint.getConstraintPackage()
defaults to ConstraintConfiguration.constraintPackage()
.
constraintName
- never null, shows up in ConstraintMatchTotal
during score justificationConstraint rewardConfigurable(String constraintPackage, String constraintName)
rewardConfigurable(String)
.constraintPackage
- never nullconstraintName
- never nulldefault Constraint impact(String constraintName, Score<?> constraintWeight)
Score
by the constraintWeight for each match.
Use penalize(...)
or reward(...)
instead, unless this constraint can both have positive and
negative weights.
The Constraint.getConstraintPackage()
defaults to the package of the PlanningSolution
class.
constraintName
- never null, shows up in ConstraintMatchTotal
during score justificationconstraintWeight
- never nullConstraint impact(String constraintPackage, String constraintName, Score<?> constraintWeight)
impact(String, Score)
.constraintPackage
- never nullconstraintName
- never nullconstraintWeight
- never nullCopyright © 2006–2021 JBoss by Red Hat. All rights reserved.