Clips的可扩展性是什么..这是CLIPS中规则和事实数量的最大限制是什么?我正在使用CLIPS 6.24,但无法上传一百万个事实!
答案 0 :(得分:0)
CLIPS中rete算法的实现共享规则之间的常见模式,因此在添加规则时模式匹配性能会合理扩展。当规则之间没有共享模式时,将发生最坏情况的性能。
在版本6.3中也进行了大量改进,以提高大量事实的性能:
CLIPS (V6.24 06/15/06)
CLIPS> (timer (loop-for-count (?i 100000) (assert (data ?i))))
3.78414106369019
CLIPS> (reset)
CLIPS> (timer (loop-for-count (?i 1000000) (assert (data ?i))))
885.884355068207
CLIPS>
CLIPS (6.30 3/17/15)
CLIPS> (timer (loop-for-count (?i 100000) (assert (data ?i))))
0.136654
CLIPS> (reset)
CLIPS> (timer (loop-for-count (?i 1000000) (assert (data ?i))))
6.046085
CLIPS>
我还没有花太多时间来优化大型规则集的加载,因此这个或其他相关开发功能无法很好地扩展,这当然是可能的。我使用具有几千个简单规则的商业产品来研究专家系统。性能和编译时间是可以接受的,并且可能会很好地扩展,但是桌面客户端和规则存储库之间的同步是非常缓慢和错误的。我无法想象在不改进产品组件的情况下尝试扩展该应用程序。
除了事实和规则的数量之外,还有许多影响可伸缩性的因素,特别是规则的设计,复杂性以及事实和规则模式之间的关系。评估工具时最好的选择是编写一个简单的程序,生成大量类似于您想要编写的规则以及与这些规则相匹配的相关事实,并使用这些规则来测试可伸缩性。
我写过的最大的CLIPS系统有大约600个复杂的规则,处理了成千上万的事实,并且在CLIPS 6.24中具有可接受的性能。我不记得有人提到过要大得多的系统,但实际上我并不认为你可以用6.24扩展到一百万个事实,除非你对可接受的性能表示慷慨。
使用6.3,我认为你可以建立一个至少有几千个规则和几十万个事实的系统是合理的,但你最好的选择是以编程方式生成规则和事实并测试性能。