Чтобы удовлетворить x из y ограничений

Я делаю программу хронометража, которая делает один на один соответствует SubjectTeacherPeriod (субъект планирования) для Period, Наступает случай, когда мне нужно: "в течение y периодов, по крайней мере, х SubjectTeacherPeriod должен соответствовать 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 s из списка, чтобы проверить, если х число SubjectTeacherPeriod ы, которые выделены тем Period соответствуют ли условия?

Поправьте меня, если я определяю свои занятия в плохой форме.

Для примера, вот оператор, который нужно оценить для определения соответствия: eval(matches($stp_attrib,$match_condition))


Извините за использование псевдокода, если его перепутали более, чем уточнили. SomeType на самом деле List и, таким образом, условие соответствия проверяется с помощью Collections.disjoint

1 ответ

Решение

Я попробую, но не уверен, что полностью понимаю вашу формулировку проблемы:

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

Надеюсь, поможет.

Другие вопросы по тегам