Class BendableScore

    • Method Detail

      • parseScore

        public static BendableScore parseScore​(String scoreString)
        Parameters:
        scoreString - never null
        Returns:
        never null
      • ofUninitialized

        public static BendableScore ofUninitialized​(int initScore,
                                                    int[] hardScores,
                                                    int[] softScores)
        Creates a new BendableScore.
        Parameters:
        initScore - see Score.initScore()
        hardScores - never null, never change that array afterwards: it must be immutable
        softScores - never null, never change that array afterwards: it must be immutable
        Returns:
        never null
      • of

        public static BendableScore of​(int[] hardScores,
                                       int[] softScores)
        Creates a new BendableScore.
        Parameters:
        hardScores - never null, never change that array afterwards: it must be immutable
        softScores - never null, never change that array afterwards: it must be immutable
        Returns:
        never null
      • zero

        public static BendableScore zero​(int hardLevelsSize,
                                         int softLevelsSize)
        Creates a new BendableScore.
        Parameters:
        hardLevelsSize - at least 0
        softLevelsSize - at least 0
        Returns:
        never null
      • ofHard

        public static BendableScore ofHard​(int hardLevelsSize,
                                           int softLevelsSize,
                                           int hardLevel,
                                           int hardScore)
        Creates a new BendableScore.
        Parameters:
        hardLevelsSize - at least 0
        softLevelsSize - at least 0
        hardLevel - at least 0, less than hardLevelsSize
        hardScore - any
        Returns:
        never null
      • ofSoft

        public static BendableScore ofSoft​(int hardLevelsSize,
                                           int softLevelsSize,
                                           int softLevel,
                                           int softScore)
        Creates a new BendableScore.
        Parameters:
        hardLevelsSize - at least 0
        softLevelsSize - at least 0
        softLevel - at least 0, less than softLevelsSize
        softScore - 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), the PlanningSolution is fully initialized and the score's Object.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 interface Score<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
      • softScores

        public int[] softScores()
        Returns:
        not null, array copy because this class is immutable
      • hardScore

        public int hardScore​(int hardLevel)
        Parameters:
        hardLevel - 0 <= hardLevel < hardLevelsSize(). The scoreLevel is hardLevel for hard levels and softLevel + hardLevelSize for soft levels.
        Returns:
        higher is better
      • softScore

        public int softScore​(int softLevel)
        Parameters:
        softLevel - 0 <= softLevel < softLevelsSize(). The scoreLevel is hardLevel for hard levels and softLevel + hardLevelSize for soft levels.
        Returns:
        higher is better
      • withInitScore

        public BendableScore withInitScore​(int newInitScore)
        Description copied from interface: Score
        For example 0hard/-8soft with -7 returns -7init/0hard/-8soft.
        Specified by:
        withInitScore in interface Score<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 to newInitScore
      • hardOrSoftScore

        public int hardOrSoftScore​(int level)
        Parameters:
        level - 0 <= level < IBendableScore.levelsSize()
        Returns:
        higher is better
      • add

        public BendableScore add​(BendableScore addend)
        Description copied from interface: Score
        Returns a Score whose value is (this + addend).
        Specified by:
        add in interface Score<BendableScore>
        Parameters:
        addend - value to be added to this Score
        Returns:
        this + addend
      • subtract

        public BendableScore subtract​(BendableScore subtrahend)
        Description copied from interface: Score
        Returns a Score whose value is (this - subtrahend).
        Specified by:
        subtract in interface Score<BendableScore>
        Parameters:
        subtrahend - value to be subtracted from this Score
        Returns:
        this - subtrahend, rounded as necessary
      • multiply

        public BendableScore 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 by Math.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 interface Score<BendableScore>
        Parameters:
        multiplicand - value to be multiplied by this Score.
        Returns:
        this * multiplicand
      • divide

        public BendableScore 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 by Math.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 interface Score<BendableScore>
        Parameters:
        divisor - value by which this Score is to be divided
        Returns:
        this / divisor
      • power

        public BendableScore 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 by Math.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 interface Score<BendableScore>
        Parameters:
        exponent - value by which this Score is to be powered
        Returns:
        this ^ exponent
      • abs

        public BendableScore 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 interface Score<BendableScore>
        Returns:
        never null
      • zero

        public BendableScore zero()
        Description copied from interface: Score
        Returns a Score, all levels of which are zero.
        Specified by:
        zero in interface Score<BendableScore>
        Returns:
        never null
      • 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 specific Score implementation.

        For example: -0hard/-7soft returns new int{-0, -7}

        The level numbers do not contain the Score.initScore(). For example: -3init/-0hard/-7soft also returns new int{-0, -7}

        Specified by:
        toLevelNumbers in interface Score<BendableScore>
        Returns:
        never null
      • hashCode

        public int hashCode()
        Overrides:
        hashCode in class Object
      • toShortString

        public String toShortString()
        Description copied from interface: Score
        Like Object.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 interface Score<BendableScore>
        Returns:
        never null
      • validateCompatible

        public void validateCompatible​(BendableScore other)