2017-07-03 66 views
0

我在结果中看到的行为是两个课程只能在一个时间段内(如星期一上午9点​​)都设置为相同无论如何,尽管有严格的限制。我想要发生的事情是,其中一个设置为空,以便稍后可以检索它们并通知用户。Optaplanner:如果将计划变量设置为空,如果它打破硬约束

是否有配置?如果不是,我该如何处理这种情况?我期望在我的应用程序中破除硬约束,但对我来说重要的是我可以通知用户哪些课程无法安排,所以他可以自己安排(通过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 

回答

1

如果我理解正确的话,你想要的课程之一,在时间表被空缺,如果在一定的约束被打破。默认情况下,每个计划实体都将被计划。得分最高的解决方案仍然是一个解决方案。

我建议你看看over-constrained planning:你在哪里分配尽可能多的实体,而不会打破硬约束。如果规划过度,可以将实体保留为未分配状态。