Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Drools 最新的n个事件,匹配某个模式_Drools - Fatal编程技术网

Drools 最新的n个事件,匹配某个模式

Drools 最新的n个事件,匹配某个模式,drools,Drools,Drools中是否有内置功能,可以选择最新的n个事件,并匹配特定模式?我在文档中读过关于滑动长度窗口的内容,股票勾号示例似乎正是我想要的: 例如,如果用户想只考虑最后10个RHT股票,不依赖于它们的年龄,那么模式将是这样的:“”。 StockTick(company==“RHT”)窗口上方:长度(10) 在测试示例时,我觉得它的评估更像一个 窗口上方StockTick()中的StockTick(公司==“RHT”):长度(10) 选择最新的10个StockTick事件,然后按company==“

Drools中是否有内置功能,可以选择最新的n个事件,并匹配特定模式?我在文档中读过关于滑动长度窗口的内容,股票勾号示例似乎正是我想要的: 例如,如果用户想只考虑最后10个RHT股票,不依赖于它们的年龄,那么模式将是这样的:“

”。
StockTick(company==“RHT”)窗口上方:长度(10)

在测试示例时,我觉得它的评估更像一个

窗口上方StockTick()中的StockTick(公司==“RHT”):长度(10)

选择最新的10个StockTick事件,然后按company==“RTH”对其进行过滤,结果是0到10个RHT Tick事件,尽管流包含10个以上的RTH事件

解决方法类似于:

$tick : StockTick( company == "RHT" )
accumulate(
    $other : StockTick(this after $tick, company == "RHT" );
    $cnt : count(other);
    $cnt < 10)
$tick:StockTick(公司==“RHT”)
积累(
$other:StockTick(在$tick之后,公司==“RHT”);
$cnt:计数(其他);
$cnt<10)

它的性能和可读性都很差。

很可能您看到的是初始阶段,窗口中的事件计数和约束尚未达到
window:length
中指定的长度。比如说,

rule "Your First Rule"
when
accumulate( $st : Applicant($age: age > 5) over window:length(10)
                  from entry-point X,
            $avg: average ( $age ), $cnt: count( $st ))
then
System.out.println("~~~~~avg~~~~~");
System.out.println($avg + ", count=" + $cnt);
System.out.println("~~~~~avg~~~~~");
end
即使在有10个匹配的申请者之前也会显示输出,但以后,
$cnt
不会低于10,即使
$age
定期从0到9不等

如果您确实认为您找到了支持您的声明的示例,请提供完整的复制代码,并确保注明Drools版本


你的解决方法确实很糟糕,因为它会在每次股票交易中累积。但是
window:length(n)
可以通过使用维护
n
事件列表的辅助事实非常有效地实现。这甚至可能比
window:length

更有利。我刚刚构建了一个示例:它将始终打印一个公司的3个刻度和另一个公司的两个刻度。我已经查询过Drools的使用列表。你应该使用我指出的解决方法。长度窗口的当前行为是bug还是预期行为?我还没有从Drools列表中得到答案。我会推。