使用无状态知识会话在LHS中改变状态

时间:2013-01-27 09:54:21

标签: drools

我在这里列出我的问题。

  1. 人员可以进出房间。
  2. 人可以是学生,也可以是教师或HOD。
  3. 学生有一个名为status的属性,可以手动更新,也可以自动更新。
  4. 这是我的活动:

    1. 进入房间的人。
    2. 为每位学生更新了属性状态。
    3. 这些是我的规则。

      1. 如果进入房间的人是教师,则输入打印老师。
      2. 如果进入房间的人数超过30,请提醒我。
      3. 如果学生上课时间超过20小时,则更新状态以完成。
      4. 现在我希望将1和3组合在一起 喜欢:  4.如果具有完成属性状态的学生进入房间,请提醒教师。

        正如我之前所说的那样,两个事件分别来了。因此,在2个不同的规则中处理它更容易。但是当我想创建一个规则,它是规则4中的1和3的组合,那么我必须验证一个人进入一个房间是否是一个学生,如果他的属性“完整”。

        但是,即使在验证他是否是学生之前加载状态属性,对我来说听起来也不好。所以,我想调用一个只在

        时加载属性的方法
          

        “一个人是学生,并且有一条规则试图加载属性状态”。

        我计划通过LHS中的方法调用来实现,这并不简单。

        还有其他办法,我可以办理吗?

1 个答案:

答案 0 :(得分:2)

在大多数时间内制定识别特定情况的小规则比使用复杂规则来识别混合情况要好。我不清楚的是你是否想用规则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

当然,此规则是否适合您取决于其他因素,如执行周期。

希望它有所帮助,