我正在制作一个时间表计划,该计划从SubjectTeacherPeriod
(计划实体)到Period
执行一对一匹配。有一种情况需要:“y期间,SubjectTeacherPeriod
的至少x必须与match_condition
匹配
例如,我想约束3个特定时期,其中至少有两个时期由与asst prof
匹配的教师讲授。
这是持有这种约束的数据结构:
Class XOfYPeriods
SomeType match_condition
int x
List<Period> Periods //problem
SubjectTeacherPeriod
当然有Period
class SubjectTeacherPeriod
int id
SomeType attrib
Period period
如何编写评估列表中各个Period
的规则,以检查分配了SubjectTeacherPeriod
个的Period
的x个数量符合比赛条件?
如果我以错误的形式定义我的课程,请纠正我。
为了举例,这里是一个要评估以确定匹配的语句:eval(matches($stp_attrib,$match_condition))
很抱歉使用Pseudocode如果它比澄清更困惑。 SomeType
实际上是List&lt;串GT;因此,使用Collections.disjoint
答案 0 :(得分: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
希望它有所帮助。