Clips 的可扩展性是什么……也就是说,CLIPS 中规则和事实的数量的最大限制是多少?我正在使用 CLIPS 6.24 但无法上传一百万个事实!!
1 回答
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,我认为您可以构建一个包含至少数千条规则和数十万条事实的系统是合理的,但您最好的选择还是以编程方式生成规则和事实并测试性能。