Optaplanner:如果它打破了硬约束,如何将规划变量保留为空
Optaplanner: How to leave planning variables as null if it breaks hard constraint
我在结果中看到的行为是,两个只能在一个时间段内(如星期一上午 9 点)的课程无论如何都设置在同一时间段,尽管有硬约束。我希望发生的是将其中一个设置为空,这样我可以稍后检索它们并通知用户。
有这方面的配置吗?如果没有,我应该如何处理这种情况?我希望在我的应用程序中打破硬约束,但对我来说重要的是我可以通知用户哪些课程不能安排,这样他就可以自己安排(通过 UI)。
这里是相关的硬约束规则:
rule "roomOccupancy"
when
Lecture(period != null, $leftPeriod:period, room != null, $leftRoom: room)
Lecture(eval($leftPeriod.overlaps(period) == true), $leftRoom == room)
then
scoreHolder.addHardConstraintMatch(kcontext, -1);
end
如果我没理解错的话,如果某个限制条件被打破,您希望课程表中的其中一门课程未分配。默认情况下,将计划每个计划实体。得分最高的解决方案将仍然是一个解决方案。
我建议您查看 over-constrained planning:您可以在其中分配尽可能多的实体而不破坏硬性约束。通过过度约束规划,实体可以保持未分配状态。
我在结果中看到的行为是,两个只能在一个时间段内(如星期一上午 9 点)的课程无论如何都设置在同一时间段,尽管有硬约束。我希望发生的是将其中一个设置为空,这样我可以稍后检索它们并通知用户。
有这方面的配置吗?如果没有,我应该如何处理这种情况?我希望在我的应用程序中打破硬约束,但对我来说重要的是我可以通知用户哪些课程不能安排,这样他就可以自己安排(通过 UI)。
这里是相关的硬约束规则:
rule "roomOccupancy"
when
Lecture(period != null, $leftPeriod:period, room != null, $leftRoom: room)
Lecture(eval($leftPeriod.overlaps(period) == true), $leftRoom == room)
then
scoreHolder.addHardConstraintMatch(kcontext, -1);
end
如果我没理解错的话,如果某个限制条件被打破,您希望课程表中的其中一门课程未分配。默认情况下,将计划每个计划实体。得分最高的解决方案将仍然是一个解决方案。
我建议您查看 over-constrained planning:您可以在其中分配尽可能多的实体而不破坏硬性约束。通过过度约束规划,实体可以保持未分配状态。