微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

OptaPlanner,如何获取过滤数据的数量?

如何解决OptaPlanner,如何获取过滤数据的数量?

我正在尝试使用 optaplanner 制定课程分配时间表。

我怎样才能获得同一天同一班级的相同课程的数量? 我正在使用约束管理

                for example
  -----------------------------------------------

  0.P     Math              Math           Math --> 3  ---Pen.ofHard(5)

  1.P     Math              Math           Another --> 2 -- No Pen

  2.P     Another           Another        Another --> 3  -- Pen.ofHard(5)

(我想使用 groupBy 但我不能)

我想做:

private Constraint checkMaxLesson(ConstraintFactory constraintFactory)    {
    return constraintFactory.fromUniquePair(Lesson.class,Joiners.equal(Lesson::getStudentGroup),Joiners.equal(Lesson::getSubject),Joiners.equal(t -> t.getTimeSlot().getDayOfWeek()))
            **??.filter( count() > 2)**
            .penalize("Max 2 lesson some day",HardSoftscore.ofHard(5));
}
  
          

解决方法

我不太确定您为什么不能使用 groupBy(),您应该在问题中添加解释。也就是说,您尝试做的事情应该是可行的:

private Constraint checkMaxLesson(ConstraintFactory constraintFactory) {
    return constraintFactory.from(Lesson.class)
        .groupBy(Lesson::getStudentGroup,Lesson::getSubject,lesson -> lesson.getTimeSlot().getDayOfWeek(),ConstraintCollectors.count())
        .filter((group,subject,dayOfWeek,lessonCount) -> lessonCount > 2)
        .penalize("Max 2 lessons on any given day",HardSoftScore.ofHard(5),(group,lessonCount) -> lessonCount - 2));
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。