Package org.optaplanner.core.impl.score.buildin.bendablebigdecimal

## Class BendableBigDecimalScoreHolderImpl

- java.lang.Object
- - org.optaplanner.core.impl.score.holder.AbstractScoreHolder<BendableBigDecimalScore>
  - - org.optaplanner.core.impl.score.buildin.bendablebigdecimal.BendableBigDecimalScoreHolderImpl

- All Implemented Interfaces:
    `BendableBigDecimalScoreHolder`, `ScoreHolder<BendableBigDecimalScore>`

      public final class BendableBigDecimalScoreHolderImpl
      extends AbstractScoreHolder<BendableBigDecimalScore>
      implements BendableBigDecimalScoreHolder

  See Also:
    `BendableBigDecimalScore`

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.optaplanner.core.impl.score.holder.AbstractScoreHolder

      `AbstractScoreHolder.BigDecimalMatchExecutor, AbstractScoreHolder.ConstraintActivationUnMatchListener, AbstractScoreHolder.IntMatchExecutor, AbstractScoreHolder.LongMatchExecutor, AbstractScoreHolder.ScoreMatchExecutor<Score_ extends AbstractScore<Score_>>`

  - ### Field Summary

    Fields
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected Map<org.kie.api.definition.rule.Rule,​AbstractScoreHolder.BigDecimalMatchExecutor>` | `matchExecutorByNumberMap` |
    `protected Map<org.kie.api.definition.rule.Rule,​AbstractScoreHolder.ScoreMatchExecutor<BendableBigDecimalScore>>` | `matchExecutorByScoreMap` | Slower than `matchExecutorByNumberMap`

    - ### Fields inherited from class org.optaplanner.core.impl.score.holder.AbstractScoreHolder

      `constraintMatchEnabled, constraintMatchTotalMap, indictmentMap, zeroScore`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `BendableBigDecimalScoreHolderImpl​(boolean constraintMatchEnabled, int hardLevelsSize, int softLevelsSize)` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `void` | `addHardConstraintMatch​(org.kie.api.runtime.rule.RuleContext kcontext, int hardLevel, BigDecimal weight)` |
    `void` | `addMultiConstraintMatch​(org.kie.api.runtime.rule.RuleContext kcontext, BigDecimal[] hardWeights, BigDecimal[] softWeights)` |
    `void` | `addSoftConstraintMatch​(org.kie.api.runtime.rule.RuleContext kcontext, int softLevel, BigDecimal weight)` |
    `void` | `configureConstraintWeight​(org.kie.api.definition.rule.Rule rule, BendableBigDecimalScore constraintWeight)` |
    `BendableBigDecimalScore` | `extractScore​(int initScore)` |
    `int` | `getHardLevelsSize()` |
    `BigDecimal` | `getHardScore​(int hardLevel)` |
    `int` | `getSoftLevelsSize()` |
    `BigDecimal` | `getSoftScore​(int softLevel)` |
    `void` | `impactScore​(org.kie.api.runtime.rule.RuleContext kcontext)` | For internal use only, use penalize() or reward() instead.
    `void` | `impactScore​(org.kie.api.runtime.rule.RuleContext kcontext, int weightMultiplier)` | For internal use only, use penalize() or reward() instead.
    `void` | `impactScore​(org.kie.api.runtime.rule.RuleContext kcontext, long weightMultiplier)` | For internal use only, use penalize() or reward() instead.
    `void` | `impactScore​(org.kie.api.runtime.rule.RuleContext kcontext, BigDecimal weightMultiplier)` | For internal use only, use penalize() or reward() instead.
    `void` | `penalize​(org.kie.api.runtime.rule.RuleContext kcontext)` | Penalize a match by the `ConstraintWeight` negated.
    `void` | `penalize​(org.kie.api.runtime.rule.RuleContext kcontext, BigDecimal weightMultiplier)` | Penalize a match by the `ConstraintWeight` negated and multiplied with the weightMultiplier for all score levels.
    `void` | `penalize​(org.kie.api.runtime.rule.RuleContext kcontext, BigDecimal[] hardWeightsMultiplier, BigDecimal[] softWeightsMultiplier)` | Penalize a match by the `ConstraintWeight` negated and multiplied with the specific weightMultiplier per score level.
    `void` | `reward​(org.kie.api.runtime.rule.RuleContext kcontext)` | Reward a match by the `ConstraintWeight`.
    `void` | `reward​(org.kie.api.runtime.rule.RuleContext kcontext, BigDecimal weightMultiplier)` | Reward a match by the `ConstraintWeight` multiplied with the weightMultiplier for all score levels.
    `void` | `reward​(org.kie.api.runtime.rule.RuleContext kcontext, BigDecimal[] hardWeightsMultiplier, BigDecimal[] softWeightsMultiplier)` | Reward a match by the `ConstraintWeight` multiplied with the specific weightMultiplier per score level.

    - ### Methods inherited from class org.optaplanner.core.impl.score.holder.AbstractScoreHolder

      `extractJustificationList, getConstraintMatchTotalMap, getIndictmentMap, isConstraintMatchEnabled, registerConstraintMatch`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### matchExecutorByNumberMap

          protected final Map<org.kie.api.definition.rule.Rule,​AbstractScoreHolder.BigDecimalMatchExecutor> matchExecutorByNumberMap

    - #### matchExecutorByScoreMap

          protected final Map<org.kie.api.definition.rule.Rule,​AbstractScoreHolder.ScoreMatchExecutor<BendableBigDecimalScore>> matchExecutorByScoreMap

      Slower than `matchExecutorByNumberMap`

  - ### Constructor Detail

    - #### BendableBigDecimalScoreHolderImpl

          public BendableBigDecimalScoreHolderImpl​(boolean constraintMatchEnabled,
                                                   int hardLevelsSize,
                                                   int softLevelsSize)

  - ### Method Detail

    - #### getHardLevelsSize

          public int getHardLevelsSize()

      Specified by:
        `getHardLevelsSize` in interface `BendableBigDecimalScoreHolder`

    - #### getHardScore

          public BigDecimal getHardScore​(int hardLevel)

    - #### getSoftLevelsSize

          public int getSoftLevelsSize()

      Specified by:
        `getSoftLevelsSize` in interface `BendableBigDecimalScoreHolder`

    - #### getSoftScore

          public BigDecimal getSoftScore​(int softLevel)

    - #### configureConstraintWeight

          public void configureConstraintWeight​(org.kie.api.definition.rule.Rule rule,
                                                BendableBigDecimalScore constraintWeight)

      Overrides:
        `configureConstraintWeight` in class `AbstractScoreHolder<BendableBigDecimalScore>`

    - #### penalize

          public void penalize​(org.kie.api.runtime.rule.RuleContext kcontext)

      Description copied from interface: `ScoreHolder`
      Penalize a match by the `ConstraintWeight` negated.
      Specified by:
        `penalize` in interface `ScoreHolder<BendableBigDecimalScore>`
      Parameters:
        `kcontext` - never null, the magic variable in DRL

    - #### penalize

          public void penalize​(org.kie.api.runtime.rule.RuleContext kcontext,
                               BigDecimal weightMultiplier)

      Description copied from interface: `BendableBigDecimalScoreHolder`
      Penalize a match by the `ConstraintWeight` negated and multiplied with the weightMultiplier for all score levels.
      Specified by:
        `penalize` in interface `BendableBigDecimalScoreHolder`
      Parameters:
        `kcontext` - never null, the magic variable in DRL
        `weightMultiplier` - at least 0

    - #### penalize

          public void penalize​(org.kie.api.runtime.rule.RuleContext kcontext,
                               BigDecimal[] hardWeightsMultiplier,
                               BigDecimal[] softWeightsMultiplier)

      Description copied from interface: `BendableBigDecimalScoreHolder`
      Penalize a match by the `ConstraintWeight` negated and multiplied with the specific weightMultiplier per score level. Slower than `BendableBigDecimalScoreHolder.penalize(RuleContext, BigDecimal)`.
      Specified by:
        `penalize` in interface `BendableBigDecimalScoreHolder`
      Parameters:
        `kcontext` - never null, the magic variable in DRL
        `hardWeightsMultiplier` - elements at least 0
        `softWeightsMultiplier` - elements at least 0

    - #### reward

          public void reward​(org.kie.api.runtime.rule.RuleContext kcontext)

      Description copied from interface: `ScoreHolder`
      Reward a match by the `ConstraintWeight`.
      Specified by:
        `reward` in interface `ScoreHolder<BendableBigDecimalScore>`
      Parameters:
        `kcontext` - never null, the magic variable in DRL

    - #### reward

          public void reward​(org.kie.api.runtime.rule.RuleContext kcontext,
                             BigDecimal weightMultiplier)

      Description copied from interface: `BendableBigDecimalScoreHolder`
      Reward a match by the `ConstraintWeight` multiplied with the weightMultiplier for all score levels.
      Specified by:
        `reward` in interface `BendableBigDecimalScoreHolder`
      Parameters:
        `kcontext` - never null, the magic variable in DRL
        `weightMultiplier` - at least 0

    - #### reward

          public void reward​(org.kie.api.runtime.rule.RuleContext kcontext,
                             BigDecimal[] hardWeightsMultiplier,
                             BigDecimal[] softWeightsMultiplier)

      Description copied from interface: `BendableBigDecimalScoreHolder`
      Reward a match by the `ConstraintWeight` multiplied with the specific weightMultiplier per score level. Slower than `BendableBigDecimalScoreHolder.reward(RuleContext, BigDecimal)`.
      Specified by:
        `reward` in interface `BendableBigDecimalScoreHolder`
      Parameters:
        `kcontext` - never null, the magic variable in DRL
        `hardWeightsMultiplier` - elements at least 0
        `softWeightsMultiplier` - elements at least 0

    - #### impactScore

          public void impactScore​(org.kie.api.runtime.rule.RuleContext kcontext)

      Description copied from class: `AbstractScoreHolder`
      For internal use only, use penalize() or reward() instead.
      Overrides:
        `impactScore` in class `AbstractScoreHolder<BendableBigDecimalScore>`
      Parameters:
        `kcontext` - never null

    - #### impactScore

          public void impactScore​(org.kie.api.runtime.rule.RuleContext kcontext,
                                  int weightMultiplier)

      Description copied from class: `AbstractScoreHolder`
      For internal use only, use penalize() or reward() instead.
      Specified by:
        `impactScore` in class `AbstractScoreHolder<BendableBigDecimalScore>`
      Parameters:
        `kcontext` - never null
        `weightMultiplier` - any

    - #### impactScore

          public void impactScore​(org.kie.api.runtime.rule.RuleContext kcontext,
                                  long weightMultiplier)

      Description copied from class: `AbstractScoreHolder`
      For internal use only, use penalize() or reward() instead.
      Specified by:
        `impactScore` in class `AbstractScoreHolder<BendableBigDecimalScore>`
      Parameters:
        `kcontext` - never null
        `weightMultiplier` - any

    - #### impactScore

          public void impactScore​(org.kie.api.runtime.rule.RuleContext kcontext,
                                  BigDecimal weightMultiplier)

      Description copied from class: `AbstractScoreHolder`
      For internal use only, use penalize() or reward() instead.
      Specified by:
        `impactScore` in interface `BendableBigDecimalScoreHolder`
      Specified by:
        `impactScore` in class `AbstractScoreHolder<BendableBigDecimalScore>`
      Parameters:
        `kcontext` - never null
        `weightMultiplier` - any

    - #### addHardConstraintMatch

          public void addHardConstraintMatch​(org.kie.api.runtime.rule.RuleContext kcontext,
                                             int hardLevel,
                                             BigDecimal weight)

      Specified by:
        `addHardConstraintMatch` in interface `BendableBigDecimalScoreHolder`
      Parameters:
        `kcontext` - never null, the magic variable in DRL
        `hardLevel` - `0 <= hardLevel <` `BendableBigDecimalScoreHolder.getHardLevelsSize()`. The `scoreLevel` is `hardLevel` for hard levels and `softLevel + hardLevelSize` for soft levels.
        `weight` - never null, higher is better, negative for a penalty, positive for a reward

    - #### addSoftConstraintMatch

          public void addSoftConstraintMatch​(org.kie.api.runtime.rule.RuleContext kcontext,
                                             int softLevel,
                                             BigDecimal weight)

      Specified by:
        `addSoftConstraintMatch` in interface `BendableBigDecimalScoreHolder`
      Parameters:
        `kcontext` - never null, the magic variable in DRL
        `softLevel` - `0 <= softLevel <` `BendableBigDecimalScoreHolder.getSoftLevelsSize()`. The `scoreLevel` is `hardLevel` for hard levels and `softLevel + hardLevelSize` for soft levels.
        `weight` - never null, higher is better, negative for a penalty, positive for a reward

    - #### addMultiConstraintMatch

          public void addMultiConstraintMatch​(org.kie.api.runtime.rule.RuleContext kcontext,
                                              BigDecimal[] hardWeights,
                                              BigDecimal[] softWeights)

      Specified by:
        `addMultiConstraintMatch` in interface `BendableBigDecimalScoreHolder`
      Parameters:
        `kcontext` - never null, the magic variable in DRL
        `hardWeights` - never null, array of length `BendableBigDecimalScoreHolder.getHardLevelsSize()`, does not contain any nulls
        `softWeights` - never null, array of length `BendableBigDecimalScoreHolder.getSoftLevelsSize()`, does not contain any nulls

    - #### extractScore

          public BendableBigDecimalScore extractScore​(int initScore)

      Specified by:
        `extractScore` in class `AbstractScoreHolder<BendableBigDecimalScore>`