Opta Planner我如何按顺序安排课程讲座

时间:2014-11-22 13:18:46

标签: java optaplanner timetable

我'使用Optaplanner在土耳其阿塔图尔克大学开发自动时间表软件。 Optalanner已满足所有要求。但另外还有一些要求。其中之一: - >当我想在时间表上放一个课程时,我怎么能按顺序排列2个时段。并且不应该是三个连续时期的讲座。 例如,三个小时考虑数学课:

                      IN MONDAY
      -----------------------------------------------

      0.P     Math              Math           Math

      1.P     Math              Math           Another

      2.P     Another           Math           Another

      3.P     Another           Another        Math

      4.P     Math              Another        Another
         (or another day)
      5.P     Another           Another        Another

      6.P     Another           Another        Math
              -----             -----          ----- 
             CORRECT            WRONG          WRONG

我想成为我的时间表看起来像第一列,我需要防止其他情况。

1 个答案:

答案 0 :(得分:0)

这样的事情应该有效:

rule "twoInARowIsgood"
when
    CourseSequentialRequirement($c : course)
    Lecture (course == $c, $firstP : period)
    Lecture (course == $c, period.isImmediatlyAfter($firstP))
then
    scoreHolder.add...(kcontext, 100); // Positive constraint
end

rule "threeInARowIsBad"
when
    CourseSequentialRequirement($c : course)
    Lecture (course == $c, $firstP : period)
    Lecture (course == $c, period.isImmediatlyAfter($firstP), $secondP : period)
    Lecture (course == $c, period.isImmediatlyAfter($secondP))
then
    scoreHolder.add...(kcontext, -500); // Negative constraint and higher than twice the positive one
end