2

(我对使用 Drools 有点陌生,所以如果这是一个简单的问题,请原谅)。

我想使用 Drools 来响应式执行规则,这意味着我们可以将插入的“事实”视为“事件”实例。但是,我希望它以在收到事件后立即触发规则的方式执行。但是,如果一个规则可能依赖于多个事件,我如何配置工作记忆,以记住以前的事件。考虑一个非常简单的例子:

假设我有以下规则:

 - when (E1) do A1
 - when (E2) do A2
 - when (E1,E2) do A3

然后,如果时间进展如下,我想遵循要被解雇的规则,例如:

 - t=1 , E1 happens => A1 fired
 - t=2 , E2 happens => A2 fired + A3 fired

我遇到的问题是,如果我ksession.fireAllRules()在每次插入后调用,工作记忆就会忘记所有以前的事件。实现我想要的最佳方式是什么?

4

1 回答 1

0

只要您使用有状态知识会话,您可能正在做的事情是因为无状态知识会话没有 fireAllRules() 方法,WM不会忘记所有插入的事实。

您所说的“E1 发生”应该是 ksession.insert(E1);

您可以使用文档中给出的示例(上面的链接)...

于 2013-01-17T18:36:39.550 回答