optaplanner - Optaplanner 学校时间表多个学生组同时在同一个房间

我试图弄清楚如何允许多个学生组(一些配置的数字)在同一个房间同时参加同一主题的课程。

我想我应该使用 group by,但不明白如何计算这些,如果大于定义的数字则惩罚。

回答1

return forEach(Lesson.class)
.groupBy(Lesson::getTimeslot, Lesson::getRoom, sum(Lesson::getStudentCount)
.filter((timeslot, room, studentTotal) -> studentTotal > room.capacity)
.penalize("room capacity", ONE_HARD,
        (timeslot, room, studentTotal) -> studentTotal - room.capacity);

相似文章