私は現在、OptaPlanner と Drools を使用して、コース スケジューリング用のアプリケーションを作成しています。Drools で記述されたルールの 1 つは、同じ日のエントリ (スケジュールの時間枠) を 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