2017-03-21 67 views
0

我目前正在建立optaplanner的課程示例,我試圖將課程分配給某些房間。像CS101一樣,只能分配給Lab1,而不能分配給TheatreRoom1。Optaplanner:限制某些房間的課程

我現在試圖限制課程是在房間,不知道如何做到這一點

對如何實現這一目標的任何想法?我目前的規則如下。

rule "courseAllowedInRoom" 
    when 
     $room: Room() 
     Lecture($course:course) 
     eval($course.cantBeInRoom($room)) 
    then 
     scoreHolder.addHardConstraintMatch(kcontext, -1); 
end 

我通過單元測試驗證Course.cantbeInRoom似乎輸出正確的布爾,但我仍然得到講座,房間內應發生衝突。

回答

1

使用處罰模式

class CourseRoomRestrictionPenalty { 
    Course c; 
    Room r; 
} 

rule "CourseRoomRestrictionPenalty" 
when 
    CourseRoomRestrictionPenalty($c : course, $r : room) 
    Lecture(course == $c, room != $r) 
then 
    ...addHard...(..., -1); 
end