我想知道drools中是否有任何东西可以用来确定规则(或已被激活)的接近程度? 从我能说的一切来看,标准的流氓不支持任何类似的东西,我只是想知道我是否可能错过了什么。
我瞥了一眼Drools Chance(https://github.com/droolsjbpm/drools-chance),但似乎它最近还没有发展很多,似乎还没有为Drools 6.x做好准备。
我知道当规则被触发时,可以使用AgendaEventListeners进行拦截,但如果规则的单个条件被评估为真,则看起来没有任何东西可以拦截。
我是否遗漏了某些内容,或者这是当前对drools的限制,对此类内容没有任何支持?
谢谢!
答案 0 :(得分:1)
这与我所说的“学习失败的原因”有关。考虑一下你必须通过n个资格。而不是被告知你失败了,你想要一个“通过”(和“失败”)标准的清单。
一次性评估所有这一切的规则并不好。您必须为n个标准中的每个标准编写一个规则,并使用持有调查属性的事实收集正数。最后,一个低优先级规则可以检查你是否拥有所有n(“hooray”)而另一个可以告诉你“抱歉,不”,但它可以给你一个成功的列表(以及不是)。
很多努力,但好的信息总是很昂贵。
答案 1 :(得分:1)
也许你可以使用一种解决方法。构建一组额外的规则,根据您的关闭定义编写指标,这些规则可以是针对感兴趣的规则的LHS的1..n部分和/或LHS任何部分的接近阈值(说你想知道一个值接近90%的另一个值)。对于源代码中的复杂条件(不是与Drools相关),我使用了类似下面的方法来跟踪复杂和嵌套的逻辑:
boolean a1 = property1 > property2
boolean a2 = (!isHigh || isMedium)
boolean a3 = property 4 == property5
System.out.println ("rule2: " + a1 + " " + a2 + " " + a3);
if (a1 && a2 && a3) {
...do something
}