Optaplanner课程示例,课程说明课程评分Rules.drl

时间:2017-03-20 13:20:34

标签: drools optaplanner

我目前正在阅读optaplanner的课程示例,我似乎无法理解这一点:

rule "conflictingLecturesSameCourseInSamePeriod"
    when
        // line 1
        Lecture($leftId : id, $leftCourse : course, $period : period, period != null)
        // line 2
        Lecture(course == $leftCourse, period == $period, id > $leftId)
    then
        scoreHolder.addHardConstraintMatch(kcontext, -1);
end

问题是:
- 第1行的讲座()和第2行的讲座有什么区别?
- 我理解变量分配发生在第1行,但在第2行,course$leftCourseperiod$periodid之间有什么区别$leftId

到目前为止,我似乎无法在文档中找到任何解释

1 个答案:

答案 0 :(得分:2)

$leftCourse : course等绑定将$leftCourse设置为引用course对象的字段Lecture的变量。

第1行的讲座由其id标识;第2行中的那个具有更大的id。假设id值是主键,这个组合基本上匹配所有可能的无序Lectures对,但是......

...约束course == $leftCourse将配对限制为相同课程的配对和......

...约束period == $period进一步将其限制为相等(非空)句点。

换句话说,规划排除了同一时期同一课程的两个不同讲座的作业。