Class BendableScore
- All Implemented Interfaces:
Serializable
,Comparable<BendableScore>
,IBendableScore<BendableScore>
,Score<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).int
compareTo
(BendableScore other) divide
(double divisor) Returns a Score whose value is (this / divisor).boolean
int
getHardOrSoftScore
(int level) Deprecated, for removal: This API element is subject to removal in a future version.int
getHardScore
(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.int
getSoftScore
(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.int
The sum of this andIBendableScore.softLevelsSize()
equalsIBendableScore.levelsSize()
.int
hardOrSoftScore
(int level) int
hardScore
(int hardLevel) int[]
int
hashCode()
int
The init score is the negative of the number of uninitialized genuine planning variables.boolean
APlanningSolution
is feasible if it has no broken hard constraints andScore.isSolutionInitialized()
is true.multiply
(double multiplicand) Returns a Score whose value is (this * multiplicand).negate()
Returns a Score whose value is (- this).static BendableScore
of
(int[] hardScores, int[] softScores) Creates a newBendableScore
.static BendableScore
ofHard
(int hardLevelsSize, int softLevelsSize, int hardLevel, int hardScore) Creates a newBendableScore
.static BendableScore
ofSoft
(int hardLevelsSize, int softLevelsSize, int softLevel, int softScore) Creates a newBendableScore
.static BendableScore
ofUninitialized
(int initScore, int[] hardScores, int[] softScores) Creates a newBendableScore
.static BendableScore
parseScore
(String scoreString) power
(double exponent) Returns a Score whose value is (this ^ exponent).int
The sum ofIBendableScore.hardLevelsSize()
and this equalsIBendableScore.levelsSize()
.int
softScore
(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()
void
validateCompatible
(BendableScore other) withInitScore
(int newInitScore) For example0hard/-8soft
with-7
returns-7init/0hard/-8soft
.zero()
Returns a Score, all levels of which are zero.static BendableScore
zero
(int hardLevelsSize, int softLevelsSize) Creates a newBendableScore
.Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.optaplanner.core.api.score.IBendableScore
getHardLevelsSize, getLevelsSize, getSoftLevelsSize, levelsSize
Methods inherited from interface org.optaplanner.core.api.score.Score
getInitScore, isSolutionInitialized, isZero, toLevelDoubles
-
Method Details
-
parseScore
- Parameters:
scoreString
- never null- Returns:
- never null
-
ofUninitialized
Creates a newBendableScore
.- 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
Creates a newBendableScore
.- 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
Creates a newBendableScore
.- Parameters:
hardLevelsSize
- at least 0softLevelsSize
- at least 0- Returns:
- never null
-
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- Returns:
- never null
-
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- Returns:
- never null
-
initScore
public int initScore()Description copied from interface:Score
The init score is the negative of the number of uninitialized genuine planning variables. If it's 0 (which it usually is), thePlanningSolution
is 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:
initScore
in interfaceScore<BendableScore>
- Returns:
- higher is better, always negative (except in statistical calculations), 0 if all planning variables are initialized
-
hardScores
public int[] hardScores()- Returns:
- not null, 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:
- not null, 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:IBendableScore
The sum of this andIBendableScore.softLevelsSize()
equalsIBendableScore.levelsSize()
.- Specified by:
hardLevelsSize
in interfaceIBendableScore<BendableScore>
- Returns:
>= 0
and<
IBendableScore.levelsSize()
-
hardScore
public int hardScore(int hardLevel) - Parameters:
hardLevel
-0 <= hardLevel <
hardLevelsSize()
. ThescoreLevel
ishardLevel
for hard levels andsoftLevel + hardLevelSize
for 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:IBendableScore
The sum ofIBendableScore.hardLevelsSize()
and this equalsIBendableScore.levelsSize()
.- Specified by:
softLevelsSize
in interfaceIBendableScore<BendableScore>
- Returns:
>= 0
and<
IBendableScore.levelsSize()
-
softScore
public int softScore(int softLevel) - Parameters:
softLevel
-0 <= softLevel <
softLevelsSize()
. ThescoreLevel
ishardLevel
for hard levels andsoftLevel + hardLevelSize
for 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:Score
For example0hard/-8soft
with-7
returns-7init/0hard/-8soft
.- Specified by:
withInitScore
in 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:Score
APlanningSolution
is 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:
isFeasible
in interfaceScore<BendableScore>
- Returns:
- true if the hard score is 0 or higher and the
Score.initScore()
is 0.
-
add
Description copied from interface:Score
Returns a Score whose value is (this + addend).- Specified by:
add
in interfaceScore<BendableScore>
- Parameters:
addend
- value to be added to this Score- Returns:
- this + addend
-
subtract
Description copied from interface:Score
Returns a Score whose value is (this - subtrahend).- Specified by:
subtract
in interfaceScore<BendableScore>
- Parameters:
subtrahend
- value to be subtracted from this Score- Returns:
- this - subtrahend, rounded as necessary
-
multiply
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<BendableScore>
- Parameters:
multiplicand
- value to be multiplied by this Score.- Returns:
- this * multiplicand
-
divide
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<BendableScore>
- Parameters:
divisor
- value by which this Score is to be divided- Returns:
- this / divisor
-
power
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<BendableScore>
- Parameters:
exponent
- value by which this Score is to be powered- Returns:
- this ^ exponent
-
negate
Description copied from interface:Score
Returns a Score whose value is (- this).- Specified by:
negate
in interfaceScore<BendableScore>
- Returns:
- - this
-
abs
Description copied from interface:Score
Returns a Score whose value is the absolute value of the score, i.e. |this|.- Specified by:
abs
in interfaceScore<BendableScore>
- Returns:
- never null
-
zero
Description copied from interface:Score
Returns a Score, all levels of which are zero.- Specified by:
zero
in interfaceScore<BendableScore>
- Returns:
- never null
-
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.initScore()
. For example:-3init/-0hard/-7soft
also returnsnew int{-0, -7}
- Specified by:
toLevelNumbers
in interfaceScore<BendableScore>
- Returns:
- never null
-
equals
-
hashCode
public int hashCode() -
compareTo
- Specified by:
compareTo
in interfaceComparable<BendableScore>
-
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<BendableScore>
- Returns:
- never null
-
toString
-
validateCompatible
-
hardOrSoftScore(int)
instead.