3.2知识库的设计用户通过友好的人机界面将大量规则存储于知识库中,例如,主人回家开门时,客厅里的电灯会因室内的光线过暗自动打开;主人外出关门时,室内的监控系统会因家中无人而自动开启。电灯的打开这个操作会与门打开、室内亮度过低这两个事件联系在一起,我们用产生式规则来表示描述这条知识:IFTHEN产生式描述了事物之间的一种对应关系(包括因果关系和蕴含关系),这种基于规则的符号化模型特别适于反应人们对家电设备的
3.2 知识库的设计
用户通过友好的人机界面将大量规则存储于知识库中,例如,主人回家开门时,客厅里的电灯会因室内的光线过暗自动打开;主人外出关门时,室内的监控系统会因家中无人而自动开启。电灯的打开这个操作会与门打开、室内亮度过低这两个事件联系在一起,我们用产生式规则来表示描述这条知识:
IF< 门打开,室内光线过暗> THEN< 灯亮 >
产生式描述了事物之间的一种对应关系(包括因果关系和蕴含关系),这种基于规则的符号化模型特别适于反应人们对家电设备的调度,由一台设备的某一事件或状态作为条件,引发对另一设备的使用。此系统中的知识库实际上是一个能够表达用户主观意愿的产生式规则库,在系统中以动态数据结构进行组织。
知识的表示是描述客观事物的一组规定,是知识的符号化过程。规则主要包含规则的前提和规则结论部分,前提部分说明规则可以被引用的条件,而结论部分则说明当前提成立时可进行的操作或引起的领域行为。根据需要,一条规则可以有多个前提和多个结论。在具体用C语言实现时,直接以IF<前提条件>THEN<动作>语句形式编程是行不通的,为了实现事件的驱动,必须利用C语言强有力的字符串处理能力将抽象的符号变成一个个表单元。根据实际情况我们可以将智能家居监控下的设备看成一个对象,C语言定义为:
struct object{
char *name; /*设备的名称*/
float val; /*设备的特性值*/
enum events {
high,middle,low,open,close};USB2.0
/*事件类型的抽象*/
};
这些对象通过规则联系起来,每定义一条规则,都要把它们存放到规则库Rule_Base中,以方便推理机获取有用的规则。在规则表达中,通过rule()函数把规则的外部语言形式转换成内部的特性表的形式,它的Clause和Action特性分别存放了该规则的前提和结论。推理时若要用到某条规则rule_X(X=1,2...n),就直接从它的特性表中取出相应的前提和结论,Clause和Action可以是一个函数调用、常量或变量,每条规则的特性表组织成如下形式:
(Clause(条件1 条件2…)Action (结论1 结论2…))
3.3 推理机的设计
推理机设计采用事件驱动正向推理方式,其基本思想是:推理机通过网关管理
模块读取信息家电的当前状态,从中获取由设备产生的事件,这些事件构成了基本事实;从基本事实出发引用规则库中的规则,若某些规则的前提被满足,则执行这些规则的结论,若这些规则的结论部分形成新的事件,则用同样的方法以这些逻辑结果为基础再次进行正向推理。推理过程中的冲突消解采用最先匹配策略,将所有符合当前求解条件的知识放在一张表中,在问题求解过程中一旦找到匹配的规则即采用该规则。