经过一段时间的学习。最终对专家系统有了一定的认识,在此发表一下个人的见解,希望和大家一起交流学习。
专家系统,通俗的讲。就是让计算机具有人类专家的知识、经验和技能,可以像人类专家一样解决实际问题。专家系统实质上是一段计算机程序,它可以以人类专家的水平完毕某一专业领域的任务。通过计算机。模拟人类专家怎样运用他们的知识和经验解决面临问题的方法、技巧和步骤。
基本系统结构(通常由人机交互界面、知识库、综合数据库、推理机、解释器、知识获取等6个部分构成):
以下是一个简单的动物识别的专家系统设计(简单推断蛇、蜥蜴、鸡、猫四种动物):
1. 实现流程:
1) 初始化规则集合
2) 初始化规则事实集合
3) 使用规则推导
2. 加入规则信息:
”冷血”,”有腿”,”羽毛”,”会飞”
3. 规则事实:
冷血+没有腿 -> 蛇
冷血+有腿 -> 蜥蜴
非冷血+有羽毛+不会飞 -> 鸡
非冷血+没有羽毛 -> 猫
4. 推理过程:
部分代码:
#define Chicken 0x02 //鸡 0010 #define Cat 0x00 //猫 0000 #define Snake 0x01 //蛇 0001 #define Lizard 0x05 //蜥蜴 0101
数据结构定义
typedef struct Rule { char *info; //规则信息 Rule *pYes; //匹配到的下一个规则 Rule *pNo; //未匹配到的下一个规则 int pos; //该规则的位置 }Rule; unsigned char result = 0;
推导函数
void MatchRules(char *s, Rule *match) { if(!s || !match) return; //规则是否匹配上 if(CheckRule(s, match->info) > 0) { //记录位置 result += 1 << match->pos; MatchRules(s, match->pYes) } else { //未匹配上 MatchRules(s, match->pNo); } }
推断result。得出结论
switch (result) { case Chicken: printf("鸡!"); break; case Cat: printf("猫!"); break; case Snake: printf("蛇。"); break; case Lizard: printf("蜥蜴!"); break; default: printf("其它!"); break; }
以上仅仅包括简单规则(4种动物推断,和4条规则),想要功能更完好。我们还能够加入很多其它精确的规则和事实。