如何将两个计划实体同步到一个值

时间:2012-04-03 08:39:10

标签: drools drools-planner

我想在两个计划实体之间同步计划值。在这种情况下,我想让两个SubjecTeacherPeriod选择期间彼此“重合”,即使它们的可能值范围是不相交的。

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>

例如,Period s 1106是兼容的,因为它们都是“星期一的第一个小时”。同样适用于2107

我确实设置了计划实体难度,在s2之后立即指定s1(我看到了日志)。但是它们被赋予了不兼容的值。并且系统永远不会在解算器操作结束时从这样的错误中恢复。

如何让它们同步?


我提到“兼容”和“重合”的地方,我的意思是Period s有两个字段(星期几和日期顺序)相等。每个类(以及该类中可能的句点的每个SubjectTeacherPeriod)都有单独的Period s。

1 个答案:

答案 0 :(得分:0)

在课程Period上创建一个getter getPeriodType()(例如,返回“周一的第一个小时”),然后添加一个这样的分数规则:

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

或者如果Period可以有多种类型,请不要创建该getter,而是创建关系类PeriodToPeriodTypeLink

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