1

(計画エンティティ)からに1対1の一致を行うタイムテーブルプログラムを作成しています。私がする必要がある場合があります:「y期間の間、少なくともxは一致しなければなりませんSubjectTeacherPeriodPeriodSubjectTeacherPeriodmatch_condition

たとえば、3つの特定の期間を制限したいのですが、そのうちの少なくとも2つは、に一致する教師によって教えられasst profます。

このような制約を保持するデータ構造は次のとおりです。

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

SubjectTeacherPeriodPeriodもちろん、

class SubjectTeacherPeriod
  int id
  SomeType attrib
  Period period

リストPeriodから個々のsを評価して、それらに割り当てられたx個のsが一致条件を満たしているかどうかを確認するルールを作成するにはどうすればよいですか?SubjectTeacherPeriodPeriod

クラスを悪い形式で定義している場合は、修正してください。

例として、一致を判断するために評価されるステートメントを次に示します。eval(matches($stp_attrib,$match_condition))


明確にされている以上に混乱している場合は、擬似コードを使用して申し訳ありません。はSomeType実際にはList<String>であるため、一致条件はCollections.disjoint

4

1 に答える 1

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

それが役に立てば幸い。

于 2012-03-27T18:19:49.523 に答える