gpt4 book ai didi

java - Optaplanner - drools 使用旧的影子变量

转载 作者:行者123 更新时间:2023-12-02 00:11:15 24 4
gpt4 key购买 nike

我正在使用 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;

(...)

}

drl:

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

最佳答案

我在字段上有@CustomShadowVariable注释并使用了lombok。当我在 getter 上添加注释(手动创建)时,规则开始工作......

关于java - Optaplanner - drools 使用旧的影子变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58119770/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com