mthoutai

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

经过一段时间的学习。最终对专家系统有了一定的认识,在此发表一下个人的见解,希望和大家一起交流学习。

 专家系统,通俗的讲。就是让计算机具有人类专家的知识、经验和技能,可以像人类专家一样解决实际问题。专家系统实质上是一段计算机程序,它可以以人类专家的水平完毕某一专业领域的任务。

通过计算机。模拟人类专家怎样运用他们的知识和经验解决面临问题的方法、技巧和步骤。


基本系统结构(通常由人机交互界面、知识库、综合数据库、推理机、解释器、知识获取等6个部分构成):


以下是一个简单的动物识别的专家系统设计(简单推断蛇、蜥蜴、鸡、猫四种动物):

1. 实现流程:

1)    初始化规则集合

2)    初始化规则事实集合

3)    使用规则推导

2. 加入规则信息:

”冷血”,”有腿”,”羽毛”,”会飞”

3. 规则事实:

冷血+没有腿 -> 蛇

冷血+有腿 -> 蜥蜴

非冷血+有羽毛+不会飞 -> 鸡

非冷血+没有羽毛 -> 猫

4. 推理过程:


部分代码:

#define Chicken 0x02	//鸡		0010
#define Cat     0x00	//猫		0000
#define Snake   0x01	//蛇		0001
#define Lizard  0x05	//蜥蜴	0101

4位二进制位分别表示:能飞、有腿、有羽毛、冷血,匹配上则为1,否则为0
数据结构定义

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条规则),想要功能更完好。我们还能够加入很多其它精确的规则和事实。

posted on 2017-08-12 17:59  mthoutai  阅读(11429)  评论(0编辑  收藏  举报