2012-03-26 12 views
1

私はと一致するSubjectTeacherPeriod(計画エンティティ)からPeriodに一致するタイムテーブルプログラムを作成しています。 x out of yの制約を満たすには

は、例えば、私は3つの特定の期間、それらの少なくとも2を制限したい教師によって教えられる「Y期間については、SubjectTeacherPeriodの少なくともxがmatch_conditionが一致しなければならない」:私はする必要がある場合があります来ますwhoはasst profに一致します。ここで

は、このような制約を保持するデータ構造です:

Class XOfYPeriods 
    SomeType match_condition 
    int x 
    List<Period> Periods //problem 

SubjectTeacherPeriodPeriod、当然の

class SubjectTeacherPeriod 
    int id 
    SomeType attrib 
    Period period 

どのように私はから個々のPeriod Sを評価するルールを書くのですがありますをリストして、SubjectTeacherPeriodのx番号に012が割り当てられているかどうかを確認しますは一致条件を満たしていますか?

悪い形で私のクラスを定義しているのであれば、私を修正してください。例のため

は、ここで試合を決定するために評価される文は次のとおりです。擬似コードを使用するためのeval(matches($stp_attrib,$match_condition))


申し訳ありませんが、それは明確に以上のことを混同している場合。 SomeTypeは実際にリスト<文字列である>ため、一致条件は、私はそれを試してみるだろうCollections.disjoint

答えて

2

で確認されていますが、ないように注意してください、私は完全にあなたの問題文を理解する:

rule "X of Y Periods" 
when 
    $c : XOfYPeriods() 
    $list : List(size > $c.x) from 
     accumulate($stp : SubjectTeacherPeriod(matches(attrib, $c.match_condition), 
               period memberOf $c.periods), 
        collectList($stp)) 
then 
    // $list of STP that match the condition and 
    // whose period matches one of the periods in the list 
end 

はそれがお役に立てば幸いです。

+0

はい、 'accumulate'と' memberOf'の使用は私が必要としていました。 – aitchnyu

関連する問題