Оптапланер - Слюни накапливают функцию reverseSupport Exception - PullRequest
0 голосов
/ 14 сентября 2018

Привет, я использую оптапланер со слюнями, и у меня есть правило, использующее накапливать максимум внутри него.Во время решения не возникает никаких проблем, но после решения я хочу узнать, какие правила создают ограничение, и я использую этот код ниже.

 List<ConstraintMatchTotal> constraintMatchTotalList = null;
            do {
                try {
                    constraintMatchTotalList
                            = solutionBusiness.getConstraintMatchTotalList();
                    check = true;
                } catch (Exception e) {
                    if (counter < 9) {
                        Thread.sleep(3000);
                        counter++;
                    } else {
                        logClass.addExceptionLog(e, scenario.getIdx());
                        e.printStackTrace();
                    }
                }
            } while (!check && counter < 10);

Первые 5 раундов этот метод вызывает исключение, но после этого он работает, кроме каквключить правило функции накопления [checkMaxDeadlineWithoutJava]

Есть мое правило

rule "checkMaxDeadlineWithoutJava"
salience 21
when
      Action(this != null, $taskId: getTaskId(), getMaxDeadline() > 0)
      accumulate( Action(this != null, $endTime : getEndTime(), getTaskId() == $taskId),
                        $max : max( $endTime ))
      $action : Action(this != null, getEndTime() == $max, $taskId == getTaskId(), $maxDeadLine: getMaxDeadline())
eval((int) $maxDeadLine < (int) $max)
then
System.out.println("maxDead" + $maxDeadLine);
System.out.println("max" + $max);
    scoreHolder.addHardConstraintMatch(kcontext, -21);
end

И это исключение, которое выбрасывается в первые 5 раундов повторных попыток;

10: 58: 20,145 ОШИБКА [stderr] (Таймер-2) Исключение, приводящее к исключению для правила "checkMaxDeadlineWithoutJava" в org.optaplanner.examples.opnext.Core.solver: java.lang.UnsupportedOperationException:Функция накопления (max), используемая в правиле (правилах) [checkMaxDeadlineWithoutJava], не имеет reverseSupport 10: 58: 20,145 ОШИБКА [stderr] (Таймер-2) в org.drools.core.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException (DefaultConsequence).java: 39) 10: 58: 20,145 ОШИБКА [stderr] (Таймер-2) в org.drools.core.common.DefaultAgenda.handleException (DefaultAgenda.java:1247) 10: 58: 20,145 ОШИБКА [stderr] (Таймер-2) в org.drools.core.phreak.RuleExecutor.innerFireActivation (RuleExecutor.java:438) 10: 58: 20,145 ОШИБКА [stderr] (Таймер-2) в org.drools.core.phreak.RuleExecutor.fireActivation (RuleExecutor.Java: 379) 10: 58: 20,145 ОШИБКА [stderr] (Таймер-2) в org.drools.core.phreak.RuleExecutor.fire (RuleExecutor.java:135) 10: 58: 20,145 ОШИБКА [stderr] (Таймер-2) в org.drools.core.phreak.RuleExecutor.evaluateNetworkAndFire (RuleExecutor.java:88) 10: 58: 20,145 ОШИБКА [stderr] (Таймер-2) в org.drools.core.concurrent.AbstractRuleEvaluator.internalEvaluateAndFire (AbstractRule: 34): 20,145 ОШИБКА [stderr] (Таймер-2) в org.drools.core.concurrent.SequentialRuleEvaluator.evaluateAndFire (SequentialRuleEvaluator.java:43) 10: 58: 20,145 ОШИБКА [stderr] (Таймер-2) в org.drools..common.DefaultAgenda.fireLoop (DefaultAgenda.java:1067) 10: 58: 20,145 ОШИБКА [stderr] (Таймер-2) в org.drools.core.common.DefaultAgenda.internalFireAllRules (DefaultAgenda.java:1014) 10:58:20,145 ОШИБКА [stderr] (Таймер-2) в org.drools.core.common.DefaultAgenda.fireAllRules (DefaultAgenda.java:1006) 10: 58: 20,145 ОШИБКА [stderr] (Таймер-2) в org.drools.core.impl.StatefulKnowledgeSessionImpl.internalFireAllRules (StatefulKnowledgeSessionImpl.java:1318) 10: 58: 20,145 ОШИБКА [stderr] (Таймер-2) в org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRewsIllSledge.jl .Sj.09) 10: 58: 20,145 ОШИБКА [stderr] (Таймер-2) в org.drools.core.impl.StatefulKnowledgeSessionImpl.fireAllRules (StatefulKnowledgeSessionImpl.java:1293) 10: 58: 20,145 ОШИБКА [stderr] (Таймер-2) вorg.optaplanner.core.impl.score.director.drools.DroolsScoreDirector.getConstraintMatchTotals (DroolsScoreDirector.java:134) 10: 58: 20,145 ОШИБКА [stderr] (Timer-2) в org.optaplanner.examples.common.business.SB.getConstraintMatchTotalList (SolutionBusiness.java:259) 10: 58: 20,145 ОШИБКА [stderr] (Таймер-2) в org.optaplanner.examples.opnext.Core.business.CalculatorClass.endSolver (CalculatorClass.java:325) 10:58:20,145 ОШИБКА [stderr] (Таймер-2) в org.optaplanner.examples.opnext.Core.business.CalculatorClass $ 2.run (CalculatorClass.java:226) 10: 58: 20,145 ОШИБКА [stderr] (Таймер-2) в Java.util.TimerThread.mainLoop (Timer.java:555) 10: 58: 20,145 ОШИБКА [stderr] (Таймер-2) в java.util.TimerThread.run (Timer.java:505) 10: 58: 20,146 ОШИБКА [stderr] (Таймер-2) Причина: java.lang.UnsupportedOperationException:Функция накопления (max), используемая в правиле (правилах) [checkMaxDeadlineWithoutJava], не имеет reverseSupport 10: 58: 20,146 ОШИБКА [stderr] (Timer-2) в org.drools.core.reteoo.FromNodeLeftTuple.getAccumulatedObjects (FromNodeLjj) 10: 58: 20,146 ОШИБКА [stderr] (Таймер-2) вorg.drools.core.common.AgendaItem.getObjectsDeep (AgendaItem.java:79) 10: 58: 20,146 ОШИБКА [stderr] (Таймер-2) в org.drools.core.reteoo.RuleTerminalNodeLeftTuple.getObjectsDeep (RuleTerminalNodeLeftTuple.java:359) 10: 58: 20,146 ОШИБКА [stderr] (Таймер-2) в org.optaplanner.core.api.score.holder.AbstractScoreHolder.extractJustificationList (AbstractScoreHolder.java:118) 10: 58: 20,146 ОШИБКА [stderr] (Таймер-2) в org.optaplanner.core.api.score.holder.AbstractScoreHolder.registerConstraintMatch (AbstractScoreHolder.java:88) 10: 58: 20,146 ОШИБКА [stderr] (Таймер-2) в org.optaplanner.core.api.score.buildin.hardmediumsoft.HardMediumSoftScoreHolder.addHardConstraintMatch (HardMediumSoftScoreHolder.java:58) 10: 58: 20,146 ОШИБКА [stderr] (Таймер-2) в org.optaplanner.examples.opnext.Core.solver.Rule_checkMaxDeadlineWithoutJava699319029.defaultConsequence (Rule_checkMaxDeadlineWithoutJava699319029.java:23) 10: 58: 20,146 ОШИБКА [stderr] (Таймер-2) в org.optaplanner.examples.opnext.Core.solver.Rule_checkMaxDeadlineWithoutJava699319029DefaultConsequenceInvokerGenerated.evaluate (Неизвестно Источник) 10: 58: 20,146 ОШИБКА [stderr] (Таймер-2) в org.optaplanner.examples.opnext.Core.solver.Rule_checkMaxDeadlineWithoutJava699319029DefaultConsequenceInvoker.evaluate (Неизвестно Источник) 10: 58: 20,146 ОШИБКА [stderr] (Таймер-2) в org.drools.core.phreak.RuleExecutor.innerFireActivation (RuleExecutor.java:431) 10: 58: 20,146 ОШИБКА [stderr] (Таймер-2) ... еще 17

...