如何测试Clips的性能?

时间:2019-06-16 08:05:27

标签: clips

我对Clips的性能进行测试时遇到问题。需要对Clips进行什么性能测试?如何测试其性能?如何设计一些典型的规则和数据来测试Clips的性能。

我学习Clips编程已有一段时间了,而且我可以编写一些规则。我使用了一些规则来测试Clips / 6.30的推理时间,但我认为这没有说服力

1 个答案:

答案 0 :(得分:0)

性能测试是一个非常广泛的主题,但让我们将其分为两大类:特定和一般。

如果要测试特定程序的性能,请使用一组具有代表性的用法示例运行该程序,并查看性能是否可接受。

如果要测试总体性能,则尝试为处理规则的算法创建从最佳情况到最坏情况的假设使用示例。对于这些情况,对使用的算法有所了解(在CLIPS中为rete算法)很有用,但通常大多数规则基准测试会使用大量规则,大量事实或以下各项的组合来测试性能他们俩。

对CLIPS 6.3所做的一项改进是使用哈希表存储部分匹配项。在CLIPS 6.24中,对于一个简单的规则,您将看到以下基线性能,该规则查找变量变量为x的事实具有相同值的三元组。

         CLIPS (V6.24 06/15/06)
CLIPS> 
(defrule match
   (a ?x)
   (b ?x)
   (c ?x)
   =>)
CLIPS> (timer (loop-for-count (?i 25) (assert (a ?i) (b ?i) (c ?i))))
0.000200986862182617
CLIPS> (reset)
CLIPS> (timer (loop-for-count (?i 10000) (assert (a ?i) (b ?i) (c ?i))))
19.6043310165405
CLIPS> 

在这种情况下,由于事实数量增加了400倍,因此性能并非呈线性比例。

在CLIPS 6.3中,您会看到此方案的线性缩放:

         CLIPS (6.31 5/9/19)
CLIPS> 
(defrule match
   (a ?x)
   (b ?x)
   (c ?x)
   =>)
CLIPS> (timer (loop-for-count (?i 25) (assert (a ?i) (b ?i) (c ?i))))
0.000128
CLIPS> (reset)
CLIPS> (timer (loop-for-count (?i 10000) (assert (a ?i) (b ?i) (c ?i))))
0.049131
CLIPS>

您可以在https://sourceforge.net/p/clipsrules/code/HEAD/tree/branches/63x/examples/上找到一些CLIPS的基准测试程序。除了数独基准和基准目录中的其他基准外,这些基准还包括广泛使用的华尔兹和举止基准。