Optaplanner:元组的约束?(三个要素)



我正在尝试使用optaplanner为大学生成时间表。我想把老师每天的课程数量限制在2门以内。

通过使用约束,我知道如何将限制强制为1,例如:

return constraintFactory
.forEachUniquePair(Lesson.class,
Joiners.equal(Lesson::getTeacher)
Joiners.equal((lesson) -> lesson.getStart().toLocalDate()))
.penalize("Limit to one course per date", HardSoftScore.ONE_SOFT);

这很容易,因为我只需要处理对,而且有一个forEachUniquePair。optaplanner有forEachUniqueTriplet这样的东西吗?

不,没有。然而,forEachUniquePair是的句法糖

forEach(Lesson.class)
.join(Lesson.class, Joiners.lessThan(Lesson::getId))

通过在第三个Lesson上应用相同的模式,您将获得所需的结果。也就是说,joiner的逻辑可能需要有点不同,才能真正给出唯一的三元组。事实上,只做可能更容易(但不是最高效的(

forEach(Lesson.class)
.join(Lesson.class, Joiners.lessThan(Lesson::getId))
.join(Lesson.class)
.filter((lesson1, lesson2, lesson3) -> lesson3 != lesson2 && lesson3 != lesson1)

最新更新