我有一个自定义影子变量,可以在分配给作业时更新某个人的分配列表。这是为了启用一个规则,例如,一个人每周只能换班x次。我认为保持这个人员变动列表,因为我们进入阴影变量应该比在求解器规则中计算它更容易。
当我运行求解器时,在第一次迭代中,求解器崩溃并出现此异常:
线程“main”中的异常java.lang.IllegalArgumentException:The 实体(黑色)从未添加到此ScoreDirector中。通常是 原因是该特定实例不在您的解决方案中 实体。
我不完全确定这意味着什么。实体Black是规划实体的一个实例,它在config.xml中都有注释和定义,它位于问题事实集合中。
我的影子变量定义为:
@CustomShadowVariable(
variableListenerClass = PersonAssignmentListener.class,
sources = {@CustomShadowVariable.Source(
variableName = "startingTimeGrain",
entityClass = Assignment.class)
}
)
public List<Assignment> getAssignments() {
return assignments;
}
shadow变量的监听器如下所示:
@Override
public void afterEntityAdded(ScoreDirector scoreDirector,
Assignment assignment) {
updatePerson(scoreDirector, assignment);
}
@Override
public void afterVariableChanged(ScoreDirector scoreDirector,
Assignment assignment) {
updatePerson(scoreDirector, assignment);
}
private void updatePerson(ScoreDirector scoreDirector,
Assignment sourceAssignment) {
Shift shift = sourceAssignment.getShift();
Person p = sourceAssignment.getPerson();
scoreDirector.beforeVariableChanged(away, "assignments");
p.getAssignments().add(sourceAssignment);
scoreDirector.afterVariableChanged(away, "assignments");
}
“afterVariableChanged”调用发生异常。
答案 0 :(得分:0)
它与链式或影子变量无关。
检查PlanningSolution类上具有EntityCollectionProperty批注的方法。那个黑色的例子不会在那里。