几个具有相同显着性的规则的结果是什么?它们的执行顺序是它们列出的顺序,还是未定义的行为 - 也就是说,它们是否以任意顺序检查?我似乎无法找到有关内部处理方式的文档。
问问题
13503 次
3 回答
12
简短的回答是,您不应该依赖于相同显着性的规则触发顺序 - 如果它们“冲突”(即两者都有资格触发)。顺便说一句,没有显着性的规则只是显着性为零。
当然它是确定性的——只是算法会在版本之间发生变化(虽然不太可能)。
这属于“解决冲突”的一般领域,并且已经写了很多关于它的文章。我找不到有关 Drools 策略的当前文章 - 但我相信其中大部分是“新近度” - 即最近修改/插入的事实“获胜” - 或者更确切地说,引用最新事实的规则将获胜。如果毕竟它无法决定 - 通常是它们规则的加载顺序(这通常与它们在文件中的写入方式相一致)。如果你必须有一个命令——使用显着性,或者使用规则流或类似的,最好不要再猜测它是如何工作的。
于 2010-09-09T03:42:23.513 回答
2
Rete 算法使用条件的新近性和特异性。
于 2011-11-02T22:11:32.950 回答
1
我对 Drools 5.1 的体验是,它是后进先出的。也就是说,您的 drl 中最后定义的规则将首先执行。
但是,是的,依靠这种行为并不是最好的主意:)
于 2010-11-01T02:20:27.420 回答