2

我正在评估业务规则引擎。我玩了一点 Drools,但看起来,我宁愿寻找一个查询驱动的反向链接系统。

所以更具体地说,让我们看一个像这样的简单业务规则:

when
    (amount > 1000 AND amount < 2000 AND currency == USD)
    OR
    (amount > 750 AND amount < 1500 AND currency == EUR)
then
   approve loan

是否可以仅使用此规则并“询问” Drools 来回答这些问题:

  1. 如果货币是美元,获得批准贷款的必要条件是什么?我希望得到这样的结果:(amount > 1000) AND (amount < 2000)

  2. 2000欧元贷款可以吗?(预期答案:错误)

  3. 如果不可能,那么拒绝的主要原因是什么?(预期答案amount >= 1500:)

Drools 是否能够仅使用一条规则来回答此类问题?理论上,这些信息都存储在规则中,但我不知道如何从中“提取”。

如果 Drools 不是这种场景的最佳规则引擎,那么有没有提供这种功能的引擎?

4

2 回答 2

0

在 RETE 引擎中,产品包含多个条件,因此基本上我们可以将您的规则定义为:

P1= C1 ^ C2 ^ C3 其中C1=数量> 1000;C2=金额 < 2000;C3=货币 == 美元

我还建议您将 OR 条件拆分为两个不同的产品。P2=C4 ^ C5 ^ C6 其中C4=数量> 750;C5=金额<1500;C6=货币==欧元;

(请注意,在生产系统中,您实际上并没有 OR,并且由于可追溯性要求,其中一些甚至不允许您编写 OR 条件)

并回答您的问题:

  1. 您只需查询所有共享 C3 的产品作为您的条件的一部分。
  2. 用你的输入执行你的规则,你会得到结果
  3. 查询您没有令牌的 Beta 记忆,并在网络的相应 Alpha 记忆中传递了 C5 的判别条件。

并非所有规则引擎都允许您查询 beta 内存和令牌。检查 Drools 是否允许您检索 alpha、beta 记忆和存储的令牌。基本上你需要遍历内部 RETE 图。

于 2013-09-24T06:34:36.277 回答
0

Drools 与许多其他规则引擎一样,使用 RETE 算法来决定运行哪些结果,规则的所有 when 部分必须与 then 部分匹配才能运行。

对于您的问题 1 和 2:如果您想要多个“答案”,您可以使用多个规则,或使用累积功能。

对于 3:您无法知道为什么没有调用规则,您需要将拒绝案例表示为单独的规则,该规则在满足拒绝案例的特定条件时触发。

于 2012-10-09T21:01:34.713 回答