Drools的基于成本的评估?

时间:2011-06-21 09:44:00

标签: lazy-evaluation drools

我有一个问题,我可以使用规则引擎解决,我们的团队已经使用Drools编写了应用程序(但我是新手,所以为新手问题做好准备)。

我的一个问题是,其中一个事实是计算起来非常昂贵(REST调用远程服务器)。我想这意味着Drools'eval'功能可用于懒惰评估。

但是,我真的想把这个特定的事实强加到评估顺序的后面。我真的不希望Drools算法决定'这个函数的答案是一种非常有效的分区规则集的方法' - 也许是,如果成本是无关紧要的,但这个比其他人贵得多。

Drools是否有一些工具/黑客来解决这个问题,或者它是否是解决此问题的错误工具?

2 个答案:

答案 0 :(得分:0)

如果您可以预加载REST事实,请执行此操作,以便Drools可以优化索引(散列)并加入它们。 如果没有,您的情况类似于使用from直接使用hibernate进行drools。

你可以做的一些事情: 请查看手册中的salience,以便最后执行这些规则。 另外,将eval()最后放在规则LHS中。

答案 1 :(得分:0)

eval()不执行延迟评估;它只是简单地计算一个不能用DRL模式语法表达的布尔表达式。它需要在5.2中不太常见,因为它支持更丰富的自由形式表达式。

关于你关于昂贵事实的具体问题;在知识库中使用之前预先加载可能是您的最佳选择(正如Geoffey所说)。我假设一旦加载它们的计算是昂贵的,它们是非常静态的。

Rumor拥有它,在5.2之后,有异步“from”的计划,因此模式可以对异步加载的事实作出反应。它在阿根廷的长途飞行中被提及,目前最好被认为是 etherware ,但是在drools用户邮件列表上推送它可能会更具体。