Class BendableScore
- All Implemented Interfaces:
IBendableScore<BendableScore>,Score<BendableScore>,Serializable,Comparable<BendableScore>
Score is based on n levels of int constraints.
The number of levels is bendable at configuration time.
This class is immutable.
The hardLevelsSize() and softLevelsSize() must be the same as in the
BendableScoreDefinition used.
- See Also:
-
Method Summary
Modifier and TypeMethodDescription@NonNull BendableScoreabs()Returns a Score whose value is the absolute value of the score, i.e.@NonNull BendableScoreadd(@NonNull BendableScore addend) Returns a Score whose value is (this + addend).intcompareTo(@NonNull BendableScore other) @NonNull BendableScoredivide(double divisor) Returns a Score whose value is (this / divisor).booleanintgetHardOrSoftScore(int level) Deprecated, for removal: This API element is subject to removal in a future version.intgetHardScore(int hardLevel) Deprecated, for removal: This API element is subject to removal in a future version.UsehardScore(int)instead.int @NonNull []Deprecated, for removal: This API element is subject to removal in a future version.UsehardScores()instead.intgetSoftScore(int hardLevel) Deprecated, for removal: This API element is subject to removal in a future version.UsesoftScore(int)instead.int @NonNull []Deprecated, for removal: This API element is subject to removal in a future version.UsesoftScores()instead.intThe sum of this andIBendableScore.softLevelsSize()equalsIBendableScore.levelsSize().inthardOrSoftScore(int level) inthardScore(int hardLevel) int @NonNull []inthashCode()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 andScore.isSolutionInitialized()is true.@NonNull BendableScoremultiply(double multiplicand) Returns a Score whose value is (this * multiplicand).@NonNull BendableScorenegate()Returns a Score whose value is (- this).static @NonNull BendableScoreof(int @NonNull [] hardScores, int @NonNull [] softScores) Creates a newBendableScore.static @NonNull BendableScoreofHard(int hardLevelsSize, int softLevelsSize, int hardLevel, int hardScore) Creates a newBendableScore.static @NonNull BendableScoreofSoft(int hardLevelsSize, int softLevelsSize, int softLevel, int softScore) Creates a newBendableScore.static @NonNull BendableScoreofUninitialized(int initScore, int @NonNull [] hardScores, int @NonNull [] softScores) Creates a newBendableScore.static @NonNull BendableScoreparseScore(@NonNull String scoreString) @NonNull BendableScorepower(double exponent) Returns a Score whose value is (this ^ exponent).intThe sum ofIBendableScore.hardLevelsSize()and this equalsIBendableScore.levelsSize().intsoftScore(int softLevel) int @NonNull []@NonNull BendableScoresubtract(@NonNull BendableScore subtrahend) Returns a Score whose value is (this - subtrahend).Number @NonNull []Returns an array of numbers representing the Score.@NonNull StringLikeObject.toString(), but trims score levels which have a zero weight.toString()voidvalidateCompatible(BendableScore other) @NonNull BendableScorewithInitScore(int newInitScore) For example0hard/-8softwith-7returns-7init/0hard/-8soft.@NonNull BendableScorezero()Returns a Score, all levels of which are zero.static @NonNull BendableScorezero(int hardLevelsSize, int softLevelsSize) Creates a newBendableScore.Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, waitMethods inherited from interface ai.timefold.solver.core.api.score.IBendableScore
getHardLevelsSize, getLevelsSize, getSoftLevelsSize, levelsSizeMethods inherited from interface ai.timefold.solver.core.api.score.Score
getInitScore, isSolutionInitialized, isZero, toLevelDoubles
-
Method Details
-
parseScore
-
ofUninitialized
public static @NonNull BendableScore ofUninitialized(int initScore, int @NonNull [] hardScores, int @NonNull [] softScores) Creates a newBendableScore.- Parameters:
initScore- seeScore.initScore()hardScores- never change that array afterwards: it must be immutablesoftScores- never change that array afterwards: it must be immutable
-
of
Creates a newBendableScore.- Parameters:
hardScores- never change that array afterwards: it must be immutablesoftScores- never change that array afterwards: it must be immutable
-
zero
Creates a newBendableScore.- Parameters:
hardLevelsSize- at least 0softLevelsSize- at least 0
-
ofHard
public static @NonNull BendableScore ofHard(int hardLevelsSize, int softLevelsSize, int hardLevel, int hardScore) Creates a newBendableScore.- Parameters:
hardLevelsSize- at least 0softLevelsSize- at least 0hardLevel- at least 0, less than hardLevelsSizehardScore- any
-
ofSoft
public static @NonNull BendableScore ofSoft(int hardLevelsSize, int softLevelsSize, int softLevel, int softScore) Creates a newBendableScore.- Parameters:
hardLevelsSize- at least 0softLevelsSize- at least 0softLevel- at least 0, less than softLevelsSizesoftScore- any
-
initScore
public int initScore()Description copied from interface:ScoreThe 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.- Specified by:
initScorein interfaceScore<BendableScore>- Returns:
- higher is better, always negative (except in statistical calculations); 0 if all planning variables are non-null, or if nulls are allowed.
-
hardScores
public int @NonNull [] hardScores()- Returns:
- array copy because this class is immutable
-
getHardScores
Deprecated, for removal: This API element is subject to removal in a future version.UsehardScores()instead.As defined byhardScores(). -
softScores
public int @NonNull [] softScores()- Returns:
- array copy because this class is immutable
-
getSoftScores
Deprecated, for removal: This API element is subject to removal in a future version.UsesoftScores()instead.As defined bysoftScores(). -
hardLevelsSize
public int hardLevelsSize()Description copied from interface:IBendableScoreThe sum of this andIBendableScore.softLevelsSize()equalsIBendableScore.levelsSize().- Specified by:
hardLevelsSizein interfaceIBendableScore<BendableScore>- Returns:
>= 0and<IBendableScore.levelsSize()
-
hardScore
public int hardScore(int hardLevel) - Parameters:
hardLevel-0 <= hardLevel <hardLevelsSize(). ThescoreLevelishardLevelfor hard levels andsoftLevel + hardLevelSizefor soft levels.- Returns:
- higher is better
-
getHardScore
Deprecated, for removal: This API element is subject to removal in a future version.UsehardScore(int)instead.As defined byhardScore(int). -
softLevelsSize
public int softLevelsSize()Description copied from interface:IBendableScoreThe sum ofIBendableScore.hardLevelsSize()and this equalsIBendableScore.levelsSize().- Specified by:
softLevelsSizein interfaceIBendableScore<BendableScore>- Returns:
>= 0and<IBendableScore.levelsSize()
-
softScore
public int softScore(int softLevel) - Parameters:
softLevel-0 <= softLevel <softLevelsSize(). ThescoreLevelishardLevelfor hard levels andsoftLevel + hardLevelSizefor soft levels.- Returns:
- higher is better
-
getSoftScore
Deprecated, for removal: This API element is subject to removal in a future version.UsesoftScore(int)instead.As defined bysoftScore(int). -
withInitScore
Description copied from interface:ScoreFor example0hard/-8softwith-7returns-7init/0hard/-8soft.- Specified by:
withInitScorein interfaceScore<BendableScore>- Parameters:
newInitScore- always negative (except in statistical calculations), 0 if all planning variables are initialized- Returns:
- equals score except that
Score.initScore()is set tonewInitScore
-
hardOrSoftScore
public int hardOrSoftScore(int level) - Parameters:
level-0 <= level <IBendableScore.levelsSize()- Returns:
- higher is better
-
getHardOrSoftScore
Deprecated, for removal: This API element is subject to removal in a future version.UsehardOrSoftScore(int)instead.As defined byhardOrSoftScore(int). -
isFeasible
public boolean isFeasible()Description copied from interface:ScoreAPlanningSolutionis feasible if it has no broken hard constraints andScore.isSolutionInitialized()is true. Simple scores (SimpleScore,SimpleLongScore,SimpleBigDecimalScore) are always feasible, if theirScore.initScore()is 0.- Specified by:
isFeasiblein interfaceScore<BendableScore>- Returns:
- true if the hard score is 0 or higher and the
Score.initScore()is 0.
-
add
Description copied from interface:ScoreReturns a Score whose value is (this + addend).- Specified by:
addin interfaceScore<BendableScore>- Parameters:
addend- value to be added to this Score- Returns:
- this + addend
-
subtract
Description copied from interface:ScoreReturns a Score whose value is (this - subtrahend).- Specified by:
subtractin interfaceScore<BendableScore>- Parameters:
subtrahend- value to be subtracted from this Score- Returns:
- this - subtrahend, rounded as necessary
-
multiply
Description copied from interface:ScoreReturns 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.
- Specified by:
multiplyin interfaceScore<BendableScore>- Parameters:
multiplicand- value to be multiplied by this Score.- Returns:
- this * multiplicand
-
divide
Description copied from interface:ScoreReturns 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.
- Specified by:
dividein interfaceScore<BendableScore>- Parameters:
divisor- value by which this Score is to be divided- Returns:
- this / divisor
-
power
Description copied from interface:ScoreReturns 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.
- Specified by:
powerin interfaceScore<BendableScore>- Parameters:
exponent- value by which this Score is to be powered- Returns:
- this ^ exponent
-
negate
Description copied from interface:ScoreReturns a Score whose value is (- this).- Specified by:
negatein interfaceScore<BendableScore>- Returns:
- - this
-
abs
Description copied from interface:ScoreReturns a Score whose value is the absolute value of the score, i.e. |this|.- Specified by:
absin interfaceScore<BendableScore>
-
zero
Description copied from interface:ScoreReturns a Score, all levels of which are zero.- Specified by:
zeroin interfaceScore<BendableScore>
-
toLevelNumbers
Description copied from interface:ScoreReturns 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
Score.initScore(). For example:-3init/-0hard/-7softalso returnsnew int{-0, -7}- Specified by:
toLevelNumbersin interfaceScore<BendableScore>
-
equals
-
hashCode
public int hashCode() -
compareTo
- Specified by:
compareToin interfaceComparable<BendableScore>
-
toShortString
Description copied from interface:ScoreLikeObject.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.- Specified by:
toShortStringin interfaceScore<BendableScore>
-
toString
-
validateCompatible
-
hardOrSoftScore(int)instead.