2017-03-20 4 views
0

私は現在optaplannerのコースのカリキュラム例を読んでいると私はこれを理解するように見えることはできませんのための説明:Optaplannerカリキュラム例に、curriculumCourseScoreRules.drl

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行目の講義の間には?
- 私は、変数assignementsは、1行目に起こっているが、2行目では、course$leftCourseperiod$periodid$leftId

の違いはこれまで何、私は任意の説明を見つけることができないように理解文書

答えて

2

$leftCourse : courseなどのバインディングは、のLectureオブジェクトを参照する変数として$leftCourseを設定します。

1行目の講義は、idで識別されます。 2行目のidはより大きなidを持ちます。制約course == $leftCourse

を同じコースのものにペアリングを制限し、... ...

この組み合わせは、基本的に講義のすべての可能な順不同のペアに一致し、id値は主キーであることを仮定し、しかし... ...制約period == $periodはさらに、それを等しい(非ヌル)期間に制限します。

つまり、計画では、同じ期間に2つの異なる講義の割り当てが除外されます。

+0

これは、** **任意の** 2つの講義オブジェクトが与えられているということです。同じコースと期間を持つ2つの講義オブジェクトはありませんか? – Samuel

+0

また、この行のためにどの講義が矛盾しているのかを「覚えている」と思うのは正しいですか? 'scoreHolder.addHardConstraintMatch(kcontext、-1);' – Samuel

+0

両方に "yes"を指定する必要があります。そうしないと、ルールは無意味になります。 addHardConstraintMatchの呼び出しで行うことができる、 "舞台裏で"発したルールに参加している実際のファクトオブジェクトを取得する方法があります。 – laune

関連する問題