Class BendableBigDecimalScore
- java.lang.Object
-
- ai.timefold.solver.core.api.score.buildin.bendablebigdecimal.BendableBigDecimalScore
-
- All Implemented Interfaces:
IBendableScore<BendableBigDecimalScore>,Score<BendableBigDecimalScore>,Serializable,Comparable<BendableBigDecimalScore>
public final class BendableBigDecimalScore extends Object implements IBendableScore<BendableBigDecimalScore>
ThisScoreis based on n levels ofBigDecimalconstraints. The number of levels is bendable at configuration time.This class is immutable.
The
hardLevelsSize()andsoftLevelsSize()must be the same as in theBendableScoreDefinitionused.- See Also:
Score, Serialized Form
-
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description BendableBigDecimalScoreabs()Returns a Score whose value is the absolute value of the score, i.e.BendableBigDecimalScoreadd(BendableBigDecimalScore addend)Returns a Score whose value is (this + addend).intcompareTo(BendableBigDecimalScore other)BendableBigDecimalScoredivide(double divisor)Returns a Score whose value is (this / divisor).booleanequals(Object o)BigDecimalgetHardOrSoftScore(int index)Deprecated, for removal: This API element is subject to removal in a future version.UsehardOrSoftScore(int)instead.BigDecimalgetHardScore(int index)Deprecated, for removal: This API element is subject to removal in a future version.UsehardScore(int)instead.BigDecimal[]getHardScores()Deprecated, for removal: This API element is subject to removal in a future version.UsehardScores()instead.BigDecimalgetSoftScore(int index)Deprecated, for removal: This API element is subject to removal in a future version.UsesoftScore(int)instead.BigDecimal[]getSoftScores()Deprecated, for removal: This API element is subject to removal in a future version.UsesoftScores()instead.inthardLevelsSize()The sum of this andIBendableScore.softLevelsSize()equalsIBendableScore.levelsSize().BigDecimalhardOrSoftScore(int index)BigDecimalhardScore(int index)BigDecimal[]hardScores()inthashCode()intinitScore()The init score is the negative of the number of uninitialized genuine planning variables.booleanisFeasible()APlanningSolutionis feasible if it has no broken hard constraints andScore.isSolutionInitialized()is true.BendableBigDecimalScoremultiply(double multiplicand)Returns a Score whose value is (this * multiplicand).BendableBigDecimalScorenegate()Returns a Score whose value is (- this).static BendableBigDecimalScoreof(BigDecimal[] hardScores, BigDecimal[] softScores)Creates a newBendableBigDecimalScore.static BendableBigDecimalScoreofHard(int hardLevelsSize, int softLevelsSize, int hardLevel, BigDecimal hardScore)Creates a newBendableBigDecimalScore.static BendableBigDecimalScoreofSoft(int hardLevelsSize, int softLevelsSize, int softLevel, BigDecimal softScore)Creates a newBendableBigDecimalScore.static BendableBigDecimalScoreofUninitialized(int initScore, BigDecimal[] hardScores, BigDecimal[] softScores)Creates a newBendableBigDecimalScore.static BendableBigDecimalScoreparseScore(String scoreString)BendableBigDecimalScorepower(double exponent)Returns a Score whose value is (this ^ exponent).intsoftLevelsSize()The sum ofIBendableScore.hardLevelsSize()and this equalsIBendableScore.levelsSize().BigDecimalsoftScore(int index)BigDecimal[]softScores()BendableBigDecimalScoresubtract(BendableBigDecimalScore subtrahend)Returns a Score whose value is (this - subtrahend).Number[]toLevelNumbers()Returns an array of numbers representing the Score.StringtoShortString()LikeObject.toString(), but trims score levels which have a zero weight.StringtoString()voidvalidateCompatible(BendableBigDecimalScore other)BendableBigDecimalScorewithInitScore(int newInitScore)For example0hard/-8softwith-7returns-7init/0hard/-8soft.BendableBigDecimalScorezero()Returns a Score, all levels of which are zero.static BendableBigDecimalScorezero(int hardLevelsSize, int softLevelsSize)Creates a newBendableBigDecimalScore.-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface ai.timefold.solver.core.api.score.IBendableScore
getHardLevelsSize, getLevelsSize, getSoftLevelsSize, levelsSize
-
Methods inherited from interface ai.timefold.solver.core.api.score.Score
getInitScore, isSolutionInitialized, isZero, toLevelDoubles
-
-
-
-
Method Detail
-
parseScore
public static BendableBigDecimalScore parseScore(String scoreString)
- Parameters:
scoreString- never null- Returns:
- never null
-
ofUninitialized
public static BendableBigDecimalScore ofUninitialized(int initScore, BigDecimal[] hardScores, BigDecimal[] softScores)
Creates a newBendableBigDecimalScore.- Parameters:
initScore- seeScore.initScore()hardScores- never null, never change that array afterwards: it must be immutablesoftScores- never null, never change that array afterwards: it must be immutable- Returns:
- never null
-
of
public static BendableBigDecimalScore of(BigDecimal[] hardScores, BigDecimal[] softScores)
Creates a newBendableBigDecimalScore.- Parameters:
hardScores- never null, never change that array afterwards: it must be immutablesoftScores- never null, never change that array afterwards: it must be immutable- Returns:
- never null
-
zero
public static BendableBigDecimalScore zero(int hardLevelsSize, int softLevelsSize)
Creates a newBendableBigDecimalScore.- Parameters:
hardLevelsSize- at least 0softLevelsSize- at least 0- Returns:
- never null
-
ofHard
public static BendableBigDecimalScore ofHard(int hardLevelsSize, int softLevelsSize, int hardLevel, BigDecimal hardScore)
Creates a newBendableBigDecimalScore.- Parameters:
hardLevelsSize- at least 0softLevelsSize- at least 0hardLevel- at least 0, less than hardLevelsSizehardScore- never null- Returns:
- never null
-
ofSoft
public static BendableBigDecimalScore ofSoft(int hardLevelsSize, int softLevelsSize, int softLevel, BigDecimal softScore)
Creates a newBendableBigDecimalScore.- Parameters:
hardLevelsSize- at least 0softLevelsSize- at least 0softLevel- at least 0, less than softLevelsSizesoftScore- never null- Returns:
- never null
-
initScore
public int initScore()
Description copied from interface:ScoreThe init score is the negative of the number of uninitialized genuine planning variables. If it's 0 (which it usually is), thePlanningSolutionis fully initialized and the score'sObject.toString()does not mention it.During
Comparable.compareTo(Object), it's even more important than the hard score: if you don't want this behaviour, read about overconstrained planning in the reference manual.- Specified by:
initScorein interfaceScore<BendableBigDecimalScore>- Returns:
- higher is better, always negative (except in statistical calculations), 0 if all planning variables are initialized
-
hardScores
public BigDecimal[] hardScores()
- Returns:
- not null, array copy because this class is immutable
-
getHardScores
@Deprecated(forRemoval=true) public BigDecimal[] getHardScores()
Deprecated, for removal: This API element is subject to removal in a future version.UsehardScores()instead.As defined byhardScores().
-
softScores
public BigDecimal[] softScores()
- Returns:
- not null, array copy because this class is immutable
-
getSoftScores
@Deprecated(forRemoval=true) public BigDecimal[] 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<BendableBigDecimalScore>- Returns:
>= 0and<IBendableScore.levelsSize()
-
hardScore
public BigDecimal hardScore(int index)
- Parameters:
index-0 <= index <hardLevelsSize()- Returns:
- higher is better
-
getHardScore
@Deprecated(forRemoval=true) public BigDecimal getHardScore(int index)
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<BendableBigDecimalScore>- Returns:
>= 0and<IBendableScore.levelsSize()
-
softScore
public BigDecimal softScore(int index)
- Parameters:
index-0 <= index <softLevelsSize()- Returns:
- higher is better
-
getSoftScore
@Deprecated(forRemoval=true) public BigDecimal getSoftScore(int index)
Deprecated, for removal: This API element is subject to removal in a future version.UsesoftScore(int)instead.As defined bysoftScore(int).
-
withInitScore
public BendableBigDecimalScore withInitScore(int newInitScore)
Description copied from interface:ScoreFor example0hard/-8softwith-7returns-7init/0hard/-8soft.- Specified by:
withInitScorein interfaceScore<BendableBigDecimalScore>- 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 BigDecimal hardOrSoftScore(int index)
- Parameters:
index-0 <= index <IBendableScore.levelsSize()- Returns:
- higher is better
-
getHardOrSoftScore
@Deprecated(forRemoval=true) public BigDecimal getHardOrSoftScore(int index)
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<BendableBigDecimalScore>- Returns:
- true if the hard score is 0 or higher and the
Score.initScore()is 0.
-
add
public BendableBigDecimalScore add(BendableBigDecimalScore addend)
Description copied from interface:ScoreReturns a Score whose value is (this + addend).- Specified by:
addin interfaceScore<BendableBigDecimalScore>- Parameters:
addend- value to be added to this Score- Returns:
- this + addend
-
subtract
public BendableBigDecimalScore subtract(BendableBigDecimalScore subtrahend)
Description copied from interface:ScoreReturns a Score whose value is (this - subtrahend).- Specified by:
subtractin interfaceScore<BendableBigDecimalScore>- Parameters:
subtrahend- value to be subtracted from this Score- Returns:
- this - subtrahend, rounded as necessary
-
multiply
public BendableBigDecimalScore multiply(double multiplicand)
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<BendableBigDecimalScore>- Parameters:
multiplicand- value to be multiplied by this Score.- Returns:
- this * multiplicand
-
divide
public BendableBigDecimalScore divide(double divisor)
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<BendableBigDecimalScore>- Parameters:
divisor- value by which this Score is to be divided- Returns:
- this / divisor
-
power
public BendableBigDecimalScore power(double exponent)
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<BendableBigDecimalScore>- Parameters:
exponent- value by which this Score is to be powered- Returns:
- this ^ exponent
-
negate
public BendableBigDecimalScore negate()
Description copied from interface:ScoreReturns a Score whose value is (- this).- Specified by:
negatein interfaceScore<BendableBigDecimalScore>- Returns:
- - this
-
abs
public BendableBigDecimalScore abs()
Description copied from interface:ScoreReturns a Score whose value is the absolute value of the score, i.e. |this|.- Specified by:
absin interfaceScore<BendableBigDecimalScore>- Returns:
- never null
-
zero
public BendableBigDecimalScore zero()
Description copied from interface:ScoreReturns a Score, all levels of which are zero.- Specified by:
zeroin interfaceScore<BendableBigDecimalScore>- Returns:
- never null
-
toLevelNumbers
public Number[] 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<BendableBigDecimalScore>- Returns:
- never null
-
compareTo
public int compareTo(BendableBigDecimalScore other)
- Specified by:
compareToin interfaceComparable<BendableBigDecimalScore>
-
toShortString
public String 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<BendableBigDecimalScore>- Returns:
- never null
-
validateCompatible
public void validateCompatible(BendableBigDecimalScore other)
-
-