2012-04-03 3 views
0

Ich möchte Planungswerte zwischen zwei Planungsentitäten synchronisieren. In diesem Fall möchte ich zwei SubjecTeacherPeriod Perioden wählen, die miteinander "übereinstimmen", auch wenn ihre möglichen Wertebereiche disjunkt sind.So synchronisieren Sie zwei Planungsentitäten mit einem Wert

STP s1: period-N/A periodList->[1,2,3,4,5,6] 
STP s2: period-N/A periodList->[106,107,108,109,110,111] 
SyncConstraint(leftSTP = s1,rightSTP = s2) 
<A rule for SyncConstraint that checks if s1.period and s2.period are compatible> 

Zum Beispiel Period s 1 und 106 kompatibel sind, da sie beide „ersten Stunden von Montag“ sind. Ebenso für 2 und 107.

Ich habe Planung Einheit Schwierigkeit festgelegt, die s2 direkt nach s1 zuweist (ich sah das Protokoll). Aber ihnen werden Werte zugewiesen, die nicht kompatibel sind. Und am Ende der Solver-Aktion erholt sich das System nie von einem solchen Fehler.

Wie kann ich sie synchronisieren?


Wo ich „kompatibel“ und „zusammenfallen“ erwähnt, meine ich Period s, die zwei Felder (Tag der Woche und Tag um) gleich sind. Jede Klasse (und jede SubjectTeacherPeriod, deren mögliche Perioden in dieser Klasse) hat separate Period s.

Antwort

0

Auf der Klasse Period, erstellen Sie einen Getter getPeriodType() (die „erste Stunde am Montag,“ zum Beispiel gibt) und dann eine Punktzahl Regel wie folgt hinzu:

when 
    MyEntity($leftType: period.periodType, $leftId : id, ...) 
    MyEntity(period.periodType != $leftType, id < $leftId, ...) 

Oder wenn ein Period mehrere Typen haben kann, Erstellen Sie nicht diesen Getter, sondern erstellen Sie eine Relationsklasse PeriodToPeriodTypeLink:

when 
    MyEntity($leftP : period, $leftId : id, ...) 
    MyEntity($rightP : period, id != $leftId, ...) 
    PeriodToPeriodTypeLink(period == $leftP, $t : type) 
    not PeriodToPeriodTypeLink(period == $rightP, type == $t)