2017-07-03 36 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:你在哪裏分配儘可能多的實體,而不會打破硬約束。如果規劃過度,可以將實體保留爲未分配狀態。