Привет, я использую оптапланер со слюнями, и у меня есть правило, использующее накапливать максимум внутри него.Во время решения не возникает никаких проблем, но после решения я хочу узнать, какие правила создают ограничение, и я использую этот код ниже.
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