我目前正在阅读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
和$leftCourse
,period
和$period
和id
之间有什么区别$leftId
到目前为止,我似乎无法在文档中找到任何解释
答案 0 :(得分:2)
$leftCourse : course
等绑定将$leftCourse
设置为引用course
对象的字段Lecture
的变量。
第1行的讲座由其id
标识;第2行中的那个具有更大的id。假设id
值是主键,这个组合基本上匹配所有可能的无序Lectures对,但是......
...约束course == $leftCourse
将配对限制为相同课程的配对和......
...约束period == $period
进一步将其限制为相等(非空)句点。
换句话说,规划排除了同一时期同一课程的两个不同讲座的作业。