2017-03-21 36 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