使用无状态知识会话改变LHS状态的Drools
我在这里列出我的问题使用无状态知识会话改变LHS状态的Drools,drools,Drools,我在这里列出我的问题 人们可以进出房间 一个人可以是学生、老师或HOD 学生有一个名为status的属性,可以手动或自动更新 以下是我的活动: 人们进入房间 为每个学生更新属性状态 这是我的规则 如果进入房间的人是教师,则打印“教师输入” 如果进入房间的人数超过30,请通知我 如果学生上课时间超过20小时,则更新状态以完成 现在我想要1和3组合在一起。 比如: 4.如果属性状态为“完成”的学生进入教室,请提醒老师 正如我先前所说,这两件事是分开来的。因此,用两种不同的规则处理它更容易。但是,当我
比如: 4.如果属性状态为“完成”的学生进入教室,请提醒老师 正如我先前所说,这两件事是分开来的。因此,用两种不同的规则处理它更容易。但是,当我想创建一个规则,它是规则4中1和3的组合,那么我必须验证进入房间的人是否是学生,以及他是否具有属性“complete” 但是,即使在验证他是否是学生之前加载status属性,对我来说也很糟糕。因此,我想调用一个方法,仅当 “一个人是学生,有一条规则试图加载属性状态” 我计划通过LHS中的方法调用来实现,这并不简单
有没有其他方法,我可以处理这个问题?在大多数情况下,使用小规则识别特定情况比使用复杂规则尝试识别混合情况要好。我不清楚的是,你是否想用第4条规则取代第3条规则。我将保留规则3并创建规则4,如下所示:
when
PersonEnteringRoom($p: person, $r: room, person.type == "Student", person.status == "Complete") // status was set by rule 3.
Room(this == $r, $t: currentTeacher != null) //the relation could be stablished by rule 1
then
Notifier.notify($t, "The student has completed the course", $p);
end
当然,这个规则是否适用于您取决于其他因素,比如您的执行周期
希望有帮助