Question

I am making a timetabling program which does one to one matches from SubjectTeacherPeriod (planning entity) to Period. There comes a case when I need to: "for y periods, atleast x of the SubjectTeacherPeriod must match a match_condition"

For example, I want to constrain 3 particular periods, atleast two of them to be taught by teachers who match to asst prof.

Here is the data structure holding such a constraint:

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

SubjectTeacherPeriod has a Period, of course

class SubjectTeacherPeriod
  int id
  SomeType attrib
  Period period

How do I write a rule that evaluates individual Periods from a list to check if x number of SubjectTeacherPeriods that are allocated those Periods meet the match condition?

Do correct me if I am defining my classes in bad form.

For the sake of example, here is a statement to be evaluated to determine a match: eval(matches($stp_attrib,$match_condition))


Sorry for the use of Pseudocode if it confused more than clarified. The SomeType is actually List< String> and thus the match condition is checked with a Collections.disjoint

Était-ce utile?

La solution

I will give it a try, but not sure I completely understand your problem statement:

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

Hope it helps.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top