code: public void penalize(RuleContext kcontext, long[] hardWeightsMultiplier, long[] softWeightsMultiplier) {
          long[] negatedHardWeightsMultiplier = new long[hardScores.length];
          long[] negatedSoftWeightsMultiplier = new long[softScores.length];
          for (int i = 0; i < negatedHardWeightsMultiplier.length; i++) {
              negatedHardWeightsMultiplier[i] = -hardWeightsMultiplier[i];
          }
          for (int i = 0; i < negatedSoftWeightsMultiplier.length; i++) {
              negatedSoftWeightsMultiplier[i] = -softWeightsMultiplier[i];
          }
          reward(kcontext, negatedHardWeightsMultiplier, negatedSoftWeightsMultiplier);
      }
docs: Penalize a match by the {@link ConstraintWeight} negated and multiplied with the specific weightMultiplier per score level.
  Slower than {@link #penalize(RuleContext, long)}.
  @param kcontext never null, the magic variable in DRL
  @param hardWeightsMultiplier elements at least 0
  @param softWeightsMultiplier elements at least 0