Interface ConstraintStream
- All Known Subinterfaces:
BiConstraintStream<A,,B> InnerBiConstraintStream<A,,B> InnerQuadConstraintStream<A,,B, C, D> InnerTriConstraintStream<A,,B, C> InnerUniConstraintStream<A>,QuadConstraintStream<A,,B, C, D> TriConstraintStream<A,,B, C> UniConstraintStream<A>
- All Known Implementing Classes:
AbstractConstraintStream,BavetAbstractBiConstraintStream,BavetAbstractConstraintStream,BavetAbstractQuadConstraintStream,BavetAbstractTriConstraintStream,BavetAbstractUniConstraintStream,BavetAftBridgeBiConstraintStream,BavetAftBridgeQuadConstraintStream,BavetAftBridgeTriConstraintStream,BavetAftBridgeUniConstraintStream,BavetBiConcatBiConstraintStream,BavetBiConcatQuadConstraintStream,BavetBiConcatTriConstraintStream,BavetForEachUniConstraintStream,BavetForeBridgeBiConstraintStream,BavetForeBridgeQuadConstraintStream,BavetForeBridgeTriConstraintStream,BavetForeBridgeUniConstraintStream,BavetJoinBiConstraintStream,BavetJoinQuadConstraintStream,BavetJoinTriConstraintStream,BavetQuadConcatQuadConstraintStream,BavetTriConcatQuadConstraintStream,BavetTriConcatTriConstraintStream,BavetUniConcatBiConstraintStream,BavetUniConcatQuadConstraintStream,BavetUniConcatTriConstraintStream,BavetUniConcatUniConstraintStream
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 score analysis.
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.forEach(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:
- Constraint Stream
- A chain of different operations, originated by
ConstraintFactory.forEach(Class)(or similar methods) and terminated by a penalization or reward operation. - Operation
- Operations (implementations of
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. - Fact
- Object instance entering the constraint stream.
- Genuine Fact
- Fact that enters the constraint stream either through a from(...) call or through a join(...) call.
Genuine facts are either planning entities (see
PlanningEntity) or problem facts (seeProblemFactPropertyorProblemFactCollectionProperty). - Inferred Fact
- Fact that enters the constraint stream through a computation. This would typically happen through an operation such as groupBy(...).
- Tuple
- A collection of facts that the constraint stream operates on, propagating them from operation to
operation.
For example,
UniConstraintStreamoperates on single-fact tuples {A} andBiConstraintStreamoperates on two-fact tuples {A, B}. Putting facts into a tuple implies a relationship exists between these facts. - Match
- Match is a tuple that reached the terminal operation of a constraint stream and is therefore either penalized or rewarded.
- Cardinality
- The number of facts in a tuple. Uni constraint streams have a cardinality of 1, bi constraint streams have a cardinality of 2, etc.
- Conversion
- An operation that changes the cardinality of a constraint stream. This typically happens through join(...) or a groupBy(...) operations.
-
Method Summary
Modifier and TypeMethodDescription@NonNull ConstraintFactoryTheConstraintFactorythat build this.@NonNull ConstraintDeprecated, for removal: This API element is subject to removal in a future version.@NonNull Constraintimpact(@NonNull String constraintPackage, @NonNull String constraintName, @NonNull Score<?> constraintWeight) Deprecated, for removal: This API element is subject to removal in a future version.PreferUniConstraintStream.impact(Score)and equivalent bi/tri/... overloads.@NonNull ConstraintDeprecated, for removal: This API element is subject to removal in a future version.PreferUniConstraintStream.penalize(Score)and equivalent bi/tri/... overloads.@NonNull Constraintpenalize(@NonNull String constraintPackage, @NonNull String constraintName, @NonNull Score<?> constraintWeight) Deprecated, for removal: This API element is subject to removal in a future version.PreferUniConstraintStream.penalize(Score)and equivalent bi/tri/... overloads.@NonNull ConstraintpenalizeConfigurable(@NonNull String constraintName) Deprecated, for removal: This API element is subject to removal in a future version.Preferpenalize()andConstraintWeightOverrides.@NonNull ConstraintpenalizeConfigurable(@NonNull String constraintPackage, @NonNull String constraintName) Deprecated, for removal: This API element is subject to removal in a future version.Preferpenalize()andConstraintWeightOverrides.@NonNull ConstraintDeprecated, for removal: This API element is subject to removal in a future version.PreferUniConstraintStream.reward(Score)and equivalent bi/tri/... overloads.@NonNull Constraintreward(@NonNull String constraintPackage, @NonNull String constraintName, @NonNull Score<?> constraintWeight) Deprecated, for removal: This API element is subject to removal in a future version.PreferUniConstraintStream.reward(Score)and equivalent bi/tri/... overloads.@NonNull ConstraintrewardConfigurable(@NonNull String constraintName) Deprecated, for removal: This API element is subject to removal in a future version.Preferreward()andConstraintWeightOverrides.@NonNull ConstraintrewardConfigurable(@NonNull String constraintPackage, @NonNull String constraintName) Deprecated, for removal: This API element is subject to removal in a future version.Preferreward()andConstraintWeightOverrides.
-
Method Details
-
getConstraintFactory
@NonNull ConstraintFactory getConstraintFactory()TheConstraintFactorythat build this. -
penalize
@Deprecated(forRemoval=true) @NonNull Constraint penalize(@NonNull String constraintName, @NonNull Score<?> constraintWeight) Deprecated, for removal: This API element is subject to removal in a future version.PreferUniConstraintStream.penalize(Score)and equivalent bi/tri/... overloads.Negatively impact theScore: subtract the constraintWeight for each match.To avoid hard-coding the constraintWeight, to allow end-users to tweak it, use
penalizeConfigurable(String)and aConstraintConfigurationinstead.The
constraint packagedefaults to the package of thePlanningSolutionclass.- Parameters:
constraintName- shows up inConstraintMatchTotalduring score justification
-
penalize
@Deprecated(forRemoval=true) @NonNull Constraint penalize(@NonNull String constraintPackage, @NonNull String constraintName, @NonNull Score<?> constraintWeight) Deprecated, for removal: This API element is subject to removal in a future version.PreferUniConstraintStream.penalize(Score)and equivalent bi/tri/... overloads.As defined bypenalize(String, Score). -
penalizeConfigurable
@Deprecated(forRemoval=true) @NonNull Constraint penalizeConfigurable(@NonNull String constraintName) Deprecated, for removal: This API element is subject to removal in a future version.Preferpenalize()andConstraintWeightOverrides.Negatively impact theScore: subtract theConstraintWeightfor each match.The constraintWeight comes from an
ConstraintWeightannotated member on theConstraintConfiguration, so end users can change the constraint weights dynamically. This constraint may be deactivated if theConstraintWeightis zero.The
constraint packagedefaults toConstraintConfiguration.constraintPackage().- Parameters:
constraintName- shows up inConstraintMatchTotalduring score justification
-
penalizeConfigurable
@Deprecated(forRemoval=true) @NonNull Constraint penalizeConfigurable(@NonNull String constraintPackage, @NonNull String constraintName) Deprecated, for removal: This API element is subject to removal in a future version.Preferpenalize()andConstraintWeightOverrides.As defined bypenalizeConfigurable(String). -
reward
@Deprecated(forRemoval=true) @NonNull Constraint reward(@NonNull String constraintName, @NonNull Score<?> constraintWeight) Deprecated, for removal: This API element is subject to removal in a future version.PreferUniConstraintStream.reward(Score)and equivalent bi/tri/... overloads.Positively impact theScore: add the constraintWeight for each match.To avoid hard-coding the constraintWeight, to allow end-users to tweak it, use
penalizeConfigurable(String)and aConstraintConfigurationinstead.The
constraint packagedefaults to the package of thePlanningSolutionclass.- Parameters:
constraintName- shows up inConstraintMatchTotalduring score justification
-
reward
@Deprecated(forRemoval=true) @NonNull Constraint reward(@NonNull String constraintPackage, @NonNull String constraintName, @NonNull Score<?> constraintWeight) Deprecated, for removal: This API element is subject to removal in a future version.PreferUniConstraintStream.reward(Score)and equivalent bi/tri/... overloads.As defined byreward(String, Score). -
rewardConfigurable
Deprecated, for removal: This API element is subject to removal in a future version.Preferreward()andConstraintWeightOverrides.Positively impact theScore: add theConstraintWeightfor each match.The constraintWeight comes from an
ConstraintWeightannotated member on theConstraintConfiguration, so end users can change the constraint weights dynamically. This constraint may be deactivated if theConstraintWeightis zero.The
constraint packagedefaults toConstraintConfiguration.constraintPackage().- Parameters:
constraintName- shows up inConstraintMatchTotalduring score justification
-
rewardConfigurable
@Deprecated(forRemoval=true) @NonNull Constraint rewardConfigurable(@NonNull String constraintPackage, @NonNull String constraintName) Deprecated, for removal: This API element is subject to removal in a future version.Preferreward()andConstraintWeightOverrides.As defined byrewardConfigurable(String). -
impact
@Deprecated(forRemoval=true) @NonNull Constraint impact(@NonNull String constraintName, @NonNull Score<?> constraintWeight) Deprecated, for removal: This API element is subject to removal in a future version.PreferUniConstraintStream.impact(Score)and equivalent bi/tri/... overloads.Positively or negatively impact theScoreby the constraintWeight for each match.Use
penalize(...)orreward(...)instead, unless this constraint can both have positive and negative weights.The
constraint packagedefaults to the package of thePlanningSolutionclass.- Parameters:
constraintName- shows up inConstraintMatchTotalduring score justification
-
impact
@Deprecated(forRemoval=true) @NonNull Constraint impact(@NonNull String constraintPackage, @NonNull String constraintName, @NonNull Score<?> constraintWeight) Deprecated, for removal: This API element is subject to removal in a future version.PreferUniConstraintStream.impact(Score)and equivalent bi/tri/... overloads.As defined byimpact(String, Score).
-
UniConstraintStream.impact(Score)and equivalent bi/tri/... overloads.