CLIPS专家系统实现经验

此贴原先以英文语言刊登在此处

本人在前些时候有机会推行一项结合CLIPS专家系统的网上订购和实时系统监控的项目。这两样功能无论是以过程语言或是面向对象语言来实现都有相当大的难度。主要是当逻辑因子和监控变量增加时,要评价这些变量的复杂性将会以指数增长的方式变得极其复杂。我们尝试以Python语言来实现这两样功能,可是初步实现这两样功能的源码出现六层次的嵌套IF-ELSE结构,而最终得被迫放弃。若我们坚持以Python来继续实现,想必将来的软件维护将会是一项艰巨的任务。

虽然CLIPS专家系统最终为我们解决了评价变量复杂性的问题,但是本人还是觉得CLIPS专家系统并不适用于所有的逻辑问题。

CLIPS编程范式需要激进的思想转变

必须放弃以过程方式来思考如何实现各个评价操作,各个操作须以个别规则来实现,而这些规则要以识别动作周期的方式在CLIPS环境里运行。当一组的规则匹配成功时,这将引发相关的动作指令。这些指令可能修正这些规则的一些先前条件,而匹配其他(甚至是原先)的规则。另一项值得注意的是要如何设计这些规则,让这些规则能按照您想要的顺序来引发,而要在同时避免添加太多的约束。各个规则的引发条件应该避免依赖其他规则的状态,也就是规则之间的耦合度应该降到最低点。

要有深层的领域知识

在编写CLIPS规则时,您要将您领域里的各个事物运行的知识整理成一系列的规则和模式。您可以尝试进行这一个过程,或是聘请专家来协助您。

执行应该是数据驱动或是模式驱动

当您需要以多个IF语句来推理多个变量时,这执行过程很可能是数据驱动或是模式驱动的。任何有一定规模的领域都会牵涉到十几个或更多的变量,这意味着您的过程或面向对象源码将会呈现网格结构或是包含多层次的嵌套IF-ELSE结构。CLIPS的语言规范能让您针对各组指令而设置个别的引发条件,但是要注意对CLIPS事实和类的规划,CLIPS事实和类的属性应该遵循数据封装的原理来设计。