Optaplanner:将课程限制在某些房间

Optaplanner: Restricting Courses to certain rooms

我目前正在以 optaplanner 的课程示例为基础,并且我正在尝试仅将课程分配给某些房间。比如CS101只能分配给Lab1,不能分配给TheatreRoom1。

我目前正在尝试将课程限制在房间内,但不知道该怎么做

对如何实现这一点有什么想法吗?我目前的规则如下。

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

我已经通过单元测试验证 Course.cantbeInRoom 似乎正在输出正确的布尔值,但我仍然在应该冲突的房间中得到讲座。

使用惩罚模式

class CourseRoomRestrictionPenalty {
  Course c;
  Room r;
}

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