Class BendableBigDecimalScore
- java.lang.Object
-
- org.optaplanner.core.api.score.AbstractScore<S>
-
- org.optaplanner.core.api.score.AbstractBendableScore<BendableBigDecimalScore>
-
- org.optaplanner.core.api.score.buildin.bendablebigdecimal.BendableBigDecimalScore
-
- All Implemented Interfaces:
Serializable
,Comparable<BendableBigDecimalScore>
,FeasibilityScore<BendableBigDecimalScore>
,Score<BendableBigDecimalScore>
public final class BendableBigDecimalScore extends AbstractBendableScore<BendableBigDecimalScore> implements FeasibilityScore<BendableBigDecimalScore>
ThisScore
is based on n levels ofBigDecimal
constraints. The number of levels is bendable at configuration time.This class is immutable.
The
getHardLevelsSize()
andgetSoftLevelsSize()
must be the same as in theBendableScoreDefinition
used.- See Also:
Score
, Serialized Form
-
-
Field Summary
-
Fields inherited from class org.optaplanner.core.api.score.AbstractBendableScore
HARD_LABEL, LEVEL_SUFFIXES, SOFT_LABEL
-
Fields inherited from class org.optaplanner.core.api.score.AbstractScore
INIT_LABEL, initScore
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
BendableBigDecimalScore(int initScore, BigDecimal[] hardScores, BigDecimal[] softScores)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description BendableBigDecimalScore
add(BendableBigDecimalScore addend)
Returns a Score whose value is (this + addend).int
compareTo(BendableBigDecimalScore other)
BendableBigDecimalScore
divide(double divisor)
Returns a Score whose value is (this / divisor).boolean
equals(Object o)
int
getHardLevelsSize()
The sum of this andAbstractBendableScore.getSoftLevelsSize()
equalsAbstractBendableScore.getLevelsSize()
.BigDecimal
getHardOrSoftScore(int index)
BigDecimal
getHardScore(int index)
BigDecimal[]
getHardScores()
int
getLevelsSize()
int
getSoftLevelsSize()
The sum ofAbstractBendableScore.getHardLevelsSize()
and this equalsAbstractBendableScore.getLevelsSize()
.BigDecimal
getSoftScore(int index)
BigDecimal[]
getSoftScores()
int
hashCode()
boolean
isCompatibleArithmeticArgument(Score otherScore)
boolean
isFeasible()
APlanningSolution
is feasible if it has no broken hard constraints andScore.isSolutionInitialized()
is true.BendableBigDecimalScore
multiply(double multiplicand)
Returns a Score whose value is (this * multiplicand).BendableBigDecimalScore
negate()
Returns a Score whose value is (- this).static BendableBigDecimalScore
of(BigDecimal[] hardScores, BigDecimal[] softScores)
Creates a newBendableBigDecimalScore
.static BendableBigDecimalScore
ofHard(int hardLevelsSize, int softLevelsSize, int hardLevel, BigDecimal hardScore)
Creates a newBendableBigDecimalScore
.static BendableBigDecimalScore
ofSoft(int hardLevelsSize, int softLevelsSize, int softLevel, BigDecimal softScore)
Creates a newBendableBigDecimalScore
.static BendableBigDecimalScore
ofUninitialized(int initScore, BigDecimal[] hardScores, BigDecimal[] softScores)
Creates a newBendableBigDecimalScore
.static BendableBigDecimalScore
parseScore(String scoreString)
BendableBigDecimalScore
power(double exponent)
Returns a Score whose value is (this ^ exponent).BendableBigDecimalScore
subtract(BendableBigDecimalScore subtrahend)
Returns a Score whose value is (this - subtrahend).Number[]
toLevelNumbers()
Returns an array of numbers representing the Score.String
toShortString()
LikeObject.toString()
, but trims score levels which have a zero weight.String
toString()
void
validateCompatible(BendableBigDecimalScore other)
static BendableBigDecimalScore
valueOf(BigDecimal[] hardScores, BigDecimal[] softScores)
Deprecated.in favor ofof(BigDecimal[], BigDecimal[])
static BendableBigDecimalScore
valueOfUninitialized(int initScore, BigDecimal[] hardScores, BigDecimal[] softScores)
Deprecated.in favor ofofUninitialized(int, BigDecimal[], BigDecimal[])
BendableBigDecimalScore
withInitScore(int newInitScore)
For example0hard/-8soft
with-7
returns-7init/0hard/-8soft
.static BendableBigDecimalScore
zero(int hardLevelsSize, int softLevelsSize)
Creates a newBendableBigDecimalScore
.-
Methods inherited from class org.optaplanner.core.api.score.AbstractBendableScore
buildBendableShortString, parseBendableScoreTokens
-
Methods inherited from class org.optaplanner.core.api.score.AbstractScore
assertNoInitScore, buildScorePattern, buildShortString, getInitPrefix, getInitScore, isSolutionInitialized, parseInitScore, parseLevelAsBigDecimal, parseLevelAsDouble, parseLevelAsInt, parseLevelAsLong, parseScoreTokens
-
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
-
Methods inherited from interface org.optaplanner.core.api.score.Score
getInitScore, isSolutionInitialized, toInitializedScore
-
-
-
-
Constructor Detail
-
BendableBigDecimalScore
protected BendableBigDecimalScore(int initScore, BigDecimal[] hardScores, BigDecimal[] softScores)
- Parameters:
initScore
- seeScore.getInitScore()
hardScores
- never nullsoftScores
- never null
-
-
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.getInitScore()
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
-
valueOfUninitialized
@Deprecated public static BendableBigDecimalScore valueOfUninitialized(int initScore, BigDecimal[] hardScores, BigDecimal[] softScores)
Deprecated.in favor ofofUninitialized(int, BigDecimal[], BigDecimal[])
-
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
-
valueOf
@Deprecated public static BendableBigDecimalScore valueOf(BigDecimal[] hardScores, BigDecimal[] softScores)
Deprecated.in favor ofof(BigDecimal[], BigDecimal[])
-
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
-
getHardScores
public BigDecimal[] getHardScores()
- Returns:
- not null, array copy because this class is immutable
-
getSoftScores
public BigDecimal[] getSoftScores()
- Returns:
- not null, array copy because this class is immutable
-
getHardLevelsSize
public int getHardLevelsSize()
Description copied from class:AbstractBendableScore
The sum of this andAbstractBendableScore.getSoftLevelsSize()
equalsAbstractBendableScore.getLevelsSize()
.- Specified by:
getHardLevelsSize
in classAbstractBendableScore<BendableBigDecimalScore>
- Returns:
>= 0
and<
AbstractBendableScore.getLevelsSize()
-
getHardScore
public BigDecimal getHardScore(int index)
- Parameters:
index
-0 <= index <
getHardLevelsSize()
- Returns:
- higher is better
-
getSoftLevelsSize
public int getSoftLevelsSize()
Description copied from class:AbstractBendableScore
The sum ofAbstractBendableScore.getHardLevelsSize()
and this equalsAbstractBendableScore.getLevelsSize()
.- Specified by:
getSoftLevelsSize
in classAbstractBendableScore<BendableBigDecimalScore>
- Returns:
>= 0
and<
AbstractBendableScore.getLevelsSize()
-
getSoftScore
public BigDecimal getSoftScore(int index)
- Parameters:
index
-0 <= index <
getSoftLevelsSize()
- Returns:
- higher is better
-
withInitScore
public BendableBigDecimalScore withInitScore(int newInitScore)
Description copied from interface:Score
For example0hard/-8soft
with-7
returns-7init/0hard/-8soft
.- Specified by:
withInitScore
in interfaceScore<BendableBigDecimalScore>
- Parameters:
newInitScore
- always negative (except in statistical calculations), 0 if all planning variables are initialized- Returns:
- equals score except that
Score.getInitScore()
is set tonewInitScore
-
getLevelsSize
public int getLevelsSize()
- Specified by:
getLevelsSize
in classAbstractBendableScore<BendableBigDecimalScore>
- Returns:
AbstractBendableScore.getHardLevelsSize()
+AbstractBendableScore.getSoftLevelsSize()
-
getHardOrSoftScore
public BigDecimal getHardOrSoftScore(int index)
- Parameters:
index
-0 <= index <
getLevelsSize()
- Returns:
- higher is better
-
isFeasible
public boolean isFeasible()
Description copied from interface:FeasibilityScore
APlanningSolution
is feasible if it has no broken hard constraints andScore.isSolutionInitialized()
is true.- Specified by:
isFeasible
in interfaceFeasibilityScore<BendableBigDecimalScore>
- Specified by:
isFeasible
in interfaceScore<BendableBigDecimalScore>
- Returns:
- true if the hard score is 0 or higher and the
Score.getInitScore()
is 0.
-
add
public BendableBigDecimalScore add(BendableBigDecimalScore addend)
Description copied from interface:Score
Returns a Score whose value is (this + addend).- Specified by:
add
in interfaceScore<BendableBigDecimalScore>
- Parameters:
addend
- value to be added to this Score- Returns:
- this + addend
-
subtract
public BendableBigDecimalScore subtract(BendableBigDecimalScore subtrahend)
Description copied from interface:Score
Returns a Score whose value is (this - subtrahend).- Specified by:
subtract
in 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:Score
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.
- Specified by:
multiply
in interfaceScore<BendableBigDecimalScore>
- Parameters:
multiplicand
- value to be multiplied by this Score.- Returns:
- this * multiplicand
-
divide
public BendableBigDecimalScore divide(double divisor)
Description copied from interface:Score
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.
- Specified by:
divide
in 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:Score
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.
- Specified by:
power
in interfaceScore<BendableBigDecimalScore>
- Parameters:
exponent
- value by which this Score is to be powered- Returns:
- this ^ exponent
-
negate
public BendableBigDecimalScore negate()
Description copied from interface:Score
Returns a Score whose value is (- this).- Specified by:
negate
in interfaceScore<BendableBigDecimalScore>
- Returns:
- - this
-
toLevelNumbers
public Number[] toLevelNumbers()
Description copied from interface:Score
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 specificScore
implementation.For example:
-0hard/-7soft
returnsnew int{-0, -7}
The level numbers do not contain the
Score.getInitScore()
. For example:-3init/-0hard/-7soft
also returnsnew int{-0, -7}
- Specified by:
toLevelNumbers
in interfaceScore<BendableBigDecimalScore>
- Returns:
- never null
- See Also:
ScoreDefinition.fromLevelNumbers(int, Number[])
-
compareTo
public int compareTo(BendableBigDecimalScore other)
- Specified by:
compareTo
in interfaceComparable<BendableBigDecimalScore>
-
toShortString
public String toShortString()
Description copied from interface:Score
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.- Specified by:
toShortString
in interfaceScore<BendableBigDecimalScore>
- Returns:
- never null
-
validateCompatible
public void validateCompatible(BendableBigDecimalScore other)
-
isCompatibleArithmeticArgument
public boolean isCompatibleArithmeticArgument(Score otherScore)
- Specified by:
isCompatibleArithmeticArgument
in interfaceScore<BendableBigDecimalScore>
- Parameters:
otherScore
- never null- Returns:
- true if the otherScore is accepted as a parameter of
Score.add(Score)
,Score.subtract(Score)
andComparable.compareTo(Object)
.
-
-