我正在使用 VRP 問題示例并進行一些更改。一是計算所有任務的到達和目的地時間。另一個是某些任務對必須具有相同的到達時間。更新到達時間后,我“移動”并行任務 - 并更改它們的日期。因此移動步驟可以改變另一輛車上任務的影子變量。但是,驗證兩個任務的到達是否相同的 drools 規則并沒有看到這種變化。就像他們根本沒有改變對象一樣。我究竟做錯了什么?也許我的做法是錯誤的?并行任務未標記為 ShadowVaraible 或 PlanningVariable。聽眾:public class ArrivalTimeUpdatingVariableListener implements VariableListener<Task> { @Override public void afterEntityAdded(ScoreDirector scoreDirector, Task task) { updateTaskAssignmentTimes(scoreDirector); } @Override public void afterVariableChanged(ScoreDirector scoreDirector, Task task) { updateTaskAssignmentTimes(scoreDirector); } (...) scoreDirector.beforeVariableChanged(task, "arrivalTime"); task.setArrivalTime(task.getArrivalTime() + diff); scoreDirector.afterVariableChanged(task, "arrivalTime"); (...)}任務:@PlanningEntity(difficultyWeightFactoryClass = DepotAngleTaskDifficultyWeightFactory.class)public class Task extends AbstractPersistable implements Standstill { (...) @CustomShadowVariable(variableListenerClass = ArrivalTimeUpdatingVariableListener.class, sources = {@PlanningVariableReference(variableName = "previousStandstill")}) private Long arrivalTime; @CustomShadowVariable(variableListenerClass = ArrivalTimeUpdatingVariableListener.class, sources = {@PlanningVariableReference(variableName = "previousStandstill")}) private Long departureTime; (...)}博士升:rule "Parallel task soft relation"when $task : Task(assigned, relations.tasksParallel.size() > 0, $tasksParallel : relations.tasksParallel) Task(assigned, $tasksParallel.contains(id), doesNotHaveSameArrivalTime($task))then scoreHolder.addHardConstraintMatch(kcontext, -1088);end
1 回答

Smart貓小萌
TA貢獻1911條經驗 獲得超7個贊
我在字段上有 @CustomShadowVariable 注釋并使用了 lombok。當我在 getter 上添加注釋(手動創建)時,規則開始工作......
添加回答
舉報
0/150
提交
取消