我目前正在使用 OptaPlanner 和 Drools 编写课程安排应用程序。我们用 Drools 编写的规则之一将同一天的条目(时间表的时间段)收集到 ArrayList 中。
在测试我们的规则时,我注意到这条规则被触发了多次,即通过收集它们找到的条目的确切数量。我认为这条规则触发这么多次的原因是由于重新组合找到的条目(又名回溯),即。当同一天有 10 个条目时,此规则触发 10 次
有什么办法可以取消这种行为?
如果它可能有助于推理我的问题,这是我正在谈论的规则:
rule spareHoursViolated
when
$traject : Traject()
Date($day := day, $month := month, $year := year)
$lecturesOnSameDay: ArrayList() from collect
(Entry($day := startingDate.day,
$month := startingDate.month,
$year := startingDate.year, courseComponent.course
memberOf $traject.courses))
then
sort($lecturesOnSameDay);
scoreHolder.addSoftConstraintMatch(kcontext,
checkSpareHoursAndNoonBreak($lecturesOnSameDay));
end