Drools 如何将两个规划实体同步到一个值
我想在两个规划实体之间同步规划值。在这种情况下,我想让两个Drools 如何将两个规划实体同步到一个值,drools,drools-planner,Drools,Drools Planner,我想在两个规划实体之间同步规划值。在这种情况下,我想让两个subjecteatherperiod选择彼此“重合”的时段,即使它们可能的值范围是不相交的 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 SyncCons
subjecteatherperiod
选择彼此“重合”的时段,即使它们可能的值范围是不相交的
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>
STP s1:period-N/A period list->[1,2,3,4,5,6]
STP s2:period-N/A periodList->[106107108109110111]
SyncConstraint(左STP=s1,右STP=s2)
例如,Period
s1
和106
是兼容的,因为它们都是“周一的第一个小时”。同样适用于2
和107
我确实设置了规划实体难度,在s1
之后分配s2
(我看到了日志)。但它们是不兼容的赋值。在解算器操作结束时,系统永远不会从此类错误中恢复
如何使它们同步
在我提到的“兼容”和“一致”中,我指的是两个字段(星期几和日顺序)相等的
期间。每个类(以及该类中可能的句点的每个SubjectTeacherPeriod
)都有单独的Period
s.在类Period
上,创建一个gettergetPeriodType()
(例如返回“星期一的第一个小时”),然后添加这样的分数规则:
when
MyEntity($leftType: period.periodType, $leftId : id, ...)
MyEntity(period.periodType != $leftType, id < $leftId, ...)
when
MyEntity($leftP : period, $leftId : id, ...)
MyEntity($rightP : period, id != $leftId, ...)
PeriodToPeriodTypeLink(period == $leftP, $t : type)
not PeriodToPeriodTypeLink(period == $rightP, type == $t)