Чтобы удовлетворить ограничения x из y - PullRequest
1 голос
/ 26 марта 2012

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

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

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


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

1 Ответ

2 голосов
/ 27 марта 2012

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

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

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

...