我'使用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
我想成为我的时间表看起来像第一列,我需要防止其他情况。
答案 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