我正在评估业务规则引擎。我和Drools玩了一点,但看起来,我宁愿寻找一个查询驱动的反向链接系统。
更具体地说,让我们看一个像这样的简单业务规则:
when
(amount > 1000 AND amount < 2000 AND currency == USD)
OR
(amount > 750 AND amount < 1500 AND currency == EUR)
then
approve loan
是否可以仅使用此规则并“询问”Drools回答这些问题:
如果货币是美元,获得贷款的必要条件是什么?
我希望结果如下:(amount > 1000) AND (amount < 2000)
是否可以获得2000欧元的贷款? (预期答案:错误)
如果不可能,那么拒绝的主要原因是什么? (预期答案:amount >= 1500
)
Drools是否只能使用一条规则来回答这类问题? 从理论上讲,这些信息都存储在规则中,但我不知道如何从中“提取”。
如果Drools不是这种情况的最佳规则引擎,那么有没有提供此类功能的引擎?
答案 0 :(得分:0)
对于您的问题1和2: 如果您想要多个“答案”,您可以使用多个规则,也可以使用累积功能。
3: 您无法知道为什么没有调用规则,您需要将拒绝案例表示为单独的规则,当拒绝案件的具体条件得到满足时,该规则将被触发。
答案 1 :(得分:0)
在RETE引擎中,生产包含多个条件,因此基本上我们可以将您的规则定义为:
P1 = C1 ^ C2 ^ C3其中C1 =量> 1000; C2 =金额&lt; 2000; C3 =货币==美元
我还建议你将你的OR条件分成两个不同的作品。 P2 = C4 ^ C5 ^ C6 其中C4 =量> 750; C5 =量&lt; 1500; C6 =货币== EUR;
(请注意,在生产系统中,您实际上没有OR,并且由于可追踪性要求,其中一些甚至不允许您编写OR条件)
并回答你的问题:
并非所有规则引擎都允许您查询beta内存和令牌。检查Drools是否允许您检索alpha,beta记忆和存储的令牌。基本上你需要遍历内部的RETE图。