CLIPS的可扩展性如何?也就是说,CLIPS中规则和事实的最大限制是多少?我使用的是CLIPS 6.24,但无法上传一百万个事实!
回答:
CLIPS中rete算法的实现会在规则之间共享常见模式,因此随着规则的增加,模式匹配性能会合理地扩展。当规则之间没有模式共享时,会出现最坏情况的性能表现。
在6.3版本中,也进行了大量改进,以提升大量事实的性能表现:
CLIPS (V6.24 06/15/06)CLIPS> (timer (loop-for-count (?i 100000) (assert (data ?i))))3.78414106369019CLIPS> (reset)CLIPS> (timer (loop-for-count (?i 1000000) (assert (data ?i))))885.884355068207CLIPS> CLIPS (6.30 3/17/15)CLIPS> (timer (loop-for-count (?i 100000) (assert (data ?i))))0.136654CLIPS> (reset)CLIPS> (timer (loop-for-count (?i 1000000) (assert (data ?i))))6.046085CLIPS>
我没有花太多时间优化加载大型规则集,因此这或其他相关开发功能可能无法很好地扩展。我曾使用一个商业产品开发了一个专家系统,该系统有几千条简单的规则。性能和编译时间都可接受,并且可能会很好地扩展,但桌面客户端与规则库之间的同步非常慢且存在错误。我无法想象在不改进产品这一组件的情况下扩展该应用。
影响可扩展性的因素有很多,不仅仅是事实和规则的数量,特别是规则的设计、它们的复杂性以及事实与规则模式之间的关系。在评估一个工具时,最好的方法是编写一个简单的程序,生成大量类似于你设想的规则和与这些规则匹配的事实,并使用这些来测试可扩展性。
我编写过的最大CLIPS系统大约有600条复杂规则,处理了数万个事实,并且在CLIPS 6.24上表现出可接受的性能。我不记得有人提到过更大的系统,但实际上我认为如果不宽泛地定义可接受的性能,你无法使用6.24扩展到一百万个事实。
使用6.3版本,我认为你可以构建一个至少有几千条规则和几十万个事实的系统,但同样,最好的方法是程序化地生成规则和事实,并测试性能。