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 TypeMethodDescriptionabs()Returns a Score whose value is the absolute value of the score, i.e.add(BendableScore addend) Returns a Score whose value is (this + addend).intcompareTo(BendableScore other) divide(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[]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[]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[]inthashCode()booleanAPlanningSolutionis feasible if it has no broken hard constraints.multiply(double multiplicand) Returns a Score whose value is (this * multiplicand).negate()Returns a Score whose value is (- this).static BendableScoreof(int[] hardScores, int[] softScores) Creates a newBendableScore.static BendableScoreofHard(int hardLevelsSize, int softLevelsSize, int hardLevel, int hardScore) Creates a newBendableScore.static BendableScoreofSoft(int hardLevelsSize, int softLevelsSize, int softLevel, int softScore) Creates a newBendableScore.static BendableScoreofUninitialized(int initScore, int[] hardScores, int[] softScores) Deprecated, for removal: This API element is subject to removal in a future version.Useof(int[], int[])instead.static BendableScoreparseScore(String scoreString) power(double exponent) Returns a Score whose value is (this ^ exponent).intThe sum ofIBendableScore.hardLevelsSize()and this equalsIBendableScore.levelsSize().intsoftScore(int softLevel) int[]subtract(BendableScore subtrahend) Returns a Score whose value is (this - subtrahend).Number[]Returns an array of numbers representing the Score.LikeObject.toString(), but trims score levels which have a zero weight.toString()voidvalidateCompatible(BendableScore other) zero()Returns a Score, all levels of which are zero.static 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, initScore, isSolutionInitialized, isZero, toLevelDoubles, withInitScore
-
Method Details
-
parseScore
-
ofUninitialized
@Deprecated(forRemoval=true, since="1.22.0") public static BendableScore ofUninitialized(int initScore, int[] hardScores, int[] softScores) Deprecated, for removal: This API element is subject to removal in a future version.Useof(int[], int[])instead.- Returns:
- init score is always zero
-
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 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 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
-
hardScores
public int[] 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[] 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). -
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. Simple scores (SimpleScore,SimpleLongScore,SimpleBigDecimalScore) are always feasible.- Specified by:
isFeasiblein interfaceScore<BendableScore>- Returns:
- true if the hard score is 0 or higher.
-
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}- 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.