Interface Score<Score_ extends Score<Score_>>
- Type Parameters:
Score_- the actual score type to allow addition, subtraction and other arithmetic
- All Superinterfaces:
Comparable<Score_>,Serializable
- All Known Subinterfaces:
IBendableScore<Score_>
- All Known Implementing Classes:
AbstractBendableScore,AbstractScore,BendableBigDecimalScore,BendableLongScore,BendableScore,HardMediumSoftBigDecimalScore,HardMediumSoftLongScore,HardMediumSoftScore,HardSoftBigDecimalScore,HardSoftLongScore,HardSoftScore,SimpleBigDecimalScore,SimpleLongScore,SimpleScore
- Implementations must be immutable, preferably a Java record or even a primitive record, if the target JDK permits that.
- Implementations must override
initScore(), or else an endless loop occurs. - Implementations are allowed to optionally implement Pareto comparison
and therefore slightly violate the transitive requirement of
Comparable.compareTo(Object).
- See Also:
-
Method Summary
Modifier and TypeMethodDescription@NonNull Score_abs()Returns a Score whose value is the absolute value of the score, i.e.@NonNull Score_Returns a Score whose value is (this + addend).@NonNull Score_divide(double divisor) Returns a Score whose value is (this / divisor).default intDeprecated, for removal: This API element is subject to removal in a future version.default intThe init score is the negative of the number of genuine planning variables set to null, unless null values are specifically allowed byPlanningVariable.allowsUnassigned()orPlanningListVariable.allowsUnassignedValues()Nulls are typically only allowed in over-constrained planning.booleanAPlanningSolutionis feasible if it has no broken hard constraints andisSolutionInitialized()is true.default booleanChecks if thePlanningSolutionof this score was fully initialized when it was calculated.default booleanisZero()@NonNull Score_multiply(double multiplicand) Returns a Score whose value is (this * multiplicand).default @NonNull Score_negate()Returns a Score whose value is (- this).@NonNull Score_power(double exponent) Returns a Score whose value is (this ^ exponent).@NonNull Score_Returns a Score whose value is (this - subtrahend).default double @NonNull []As defined bytoLevelNumbers(), only returns double[] instead of Number[].@NonNull Number @NonNull []Returns an array of numbers representing the Score.@NonNull StringLikeObject.toString(), but trims score levels which have a zero weight.@NonNull Score_withInitScore(int newInitScore) For example0hard/-8softwith-7returns-7init/0hard/-8soft.@NonNull Score_zero()Returns a Score, all levels of which are zero.Methods inherited from interface java.lang.Comparable
compareTo
-
Method Details
-
initScore
default int initScore()The init score is the negative of the number of genuine planning variables set to null, unless null values are specifically allowed byPlanningVariable.allowsUnassigned()orPlanningListVariable.allowsUnassignedValues()Nulls are typically only allowed in over-constrained planning. In that case, there is no way how to tell a fully initialized solution with some values left unassigned, from a partially initialized solution where the initialization of some values wasn't yet attempted.During
Comparable.compareTo(Object), init score is considered more important than the hard score. If the init score is 0 (which it usually is), the score'sObject.toString()does not mention it.- Returns:
- higher is better, always negative (except in statistical calculations); 0 if all planning variables are non-null, or if nulls are allowed.
-
getInitScore
Deprecated, for removal: This API element is subject to removal in a future version.UseinitScore()instead.As defined byinitScore(). -
withInitScore
For example0hard/-8softwith-7returns-7init/0hard/-8soft.- Parameters:
newInitScore- always negative (except in statistical calculations), 0 if all planning variables are initialized- Returns:
- equals score except that
initScore()is set tonewInitScore
-
add
Returns a Score whose value is (this + addend).- Parameters:
addend- value to be added to this Score- Returns:
- this + addend
-
subtract
Returns a Score whose value is (this - subtrahend).- Parameters:
subtrahend- value to be subtracted from this Score- Returns:
- this - subtrahend, rounded as necessary
-
multiply
Returns a Score whose value is (this * multiplicand). When rounding is needed, it should be floored (as defined byMath.floor(double)).If the implementation has a scale/precision, then the unspecified scale/precision of the double multiplicand should have no impact on the returned scale/precision.
- Parameters:
multiplicand- value to be multiplied by this Score.- Returns:
- this * multiplicand
-
divide
Returns a Score whose value is (this / divisor). When rounding is needed, it should be floored (as defined byMath.floor(double)).If the implementation has a scale/precision, then the unspecified scale/precision of the double divisor should have no impact on the returned scale/precision.
- Parameters:
divisor- value by which this Score is to be divided- Returns:
- this / divisor
-
power
Returns a Score whose value is (this ^ exponent). When rounding is needed, it should be floored (as defined byMath.floor(double)).If the implementation has a scale/precision, then the unspecified scale/precision of the double exponent should have no impact on the returned scale/precision.
- Parameters:
exponent- value by which this Score is to be powered- Returns:
- this ^ exponent
-
negate
Returns a Score whose value is (- this).- Returns:
- - this
-
abs
@NonNull Score_ abs()Returns a Score whose value is the absolute value of the score, i.e. |this|. -
zero
@NonNull Score_ zero()Returns a Score, all levels of which are zero. -
isZero
default boolean isZero()- Returns:
- true when this
is equal tozero().
-
toLevelNumbers
@NonNull Number @NonNull [] toLevelNumbers()Returns an array of numbers representing the Score. Each number represents 1 score level. A greater score level uses a lower array index than a lesser score level.When rounding is needed, each rounding should be floored (as defined by
Math.floor(double)). The length of the returned array must be stable for a specificScoreimplementation.For example:
-0hard/-7softreturnsnew int{-0, -7}The level numbers do not contain the
initScore(). For example:-3init/-0hard/-7softalso returnsnew int{-0, -7} -
toLevelDoubles
default double @NonNull [] toLevelDoubles()As defined bytoLevelNumbers(), only returns double[] instead of Number[]. -
isSolutionInitialized
default boolean isSolutionInitialized()Checks if thePlanningSolutionof this score was fully initialized when it was calculated. This only works for solutions where:basic variablesare used, andunassigningis not allowed.list variablesare used, andunassigned valuesare not allowed.
initScore()is always zero and therefore this method always returns true.- Returns:
- true if
initScore()is 0
-
isFeasible
boolean isFeasible()APlanningSolutionis feasible if it has no broken hard constraints andisSolutionInitialized()is true. Simple scores (SimpleScore,SimpleLongScore,SimpleBigDecimalScore) are always feasible, if theirinitScore()is 0.- Returns:
- true if the hard score is 0 or higher and the
initScore()is 0.
-
toShortString
@NonNull String toShortString()LikeObject.toString(), but trims score levels which have a zero weight. For example 0hard/-258soft returns -258soft.Do not use this format to persist information as text, use
Object.toString()instead, so it can be parsed reliably.
-
initScore()instead.