专家系统
什么叫专家系统
专家系统(Expert System,简称ES):专家系统被定义为一种交互式可靠的基于计算机的决策系统,它使用事实和启发式方法来解决复杂的决策问题。它被认为是人类智慧和专业知识的最高水平。它是一个计算机应用程序,可以解决特定域中最复杂的问题。
专家系统可以解决通常需要人类专家的许多问题。它基于从专家那里获得的知识。它还能够表达和推理某些知识领域。专家系统是当今人工智能,深度学习和机器学习系统的前身。
专家系统的组成
专家系统通常由人机交互界面、知识库、推理机、解释器、综合数据库、知识获取等6个部分构成。其中尤以知识库与推理机相互分离而别具特色。专家系统的体系结构随专家系统的类型、功能和规模的不同,而有所差异。
1.用户界面
用户界面是专家系统中最重要的部分。此组件以可读形式获取用户的查询,并将其传递给推理引擎。之后,它会向用户显示结果。换句话说,它是一个帮助用户与专家系统通信的界面。
用户界面是专家系统中最关键的部分。该组件以可读的形式获取用户的查询,并将其传递给推理机。之后,它向用户显示结果。换句话说,它是一个帮助用户与专家系统进行通信的界面。
2.推理机
推理机是专家系统的大脑。推理机包含解决特定问题的规则。它是指从知识库中获取的知识。当试图回答用户的查询时,它选择要应用的事实和规则。它为知识库中的信息提供了推理。它也有助于解决问题。这一组成部分也有助于制定结论。
3.知识库
知识库是事实的储存库。专家系统的[问题求解过程是通过知识库中的知识来模拟专家的思维方式的,因此,知识库是专家系统质量是否优越的关键所在,即知识库中知识的质量和数量决定着专家系统的质量水平。
专家系统工作结构图:
专家系统特点
1.一般采用启发式的解题方法
2.知识库与推理机分离
3.能对自身的工作过程进行推理
4.解题过程中除了用演绎方法外,有时采用归纳方法和抽象方法
专家系统的分类
1.按知识表示技术可分为:基于逻辑的专家系统、基于规则的专家系统、基于语义网络的专家系统和基于框架的专家系统。
2.按任务类型可分为:
解释型:可用于分析符号数据,进行阐述这些数据的实际意义。
预测型:根据对象的过去和现在情况来推断对象的未来演变结果。
诊断型:根据输入信息来找到对象的故障和缺陷。
调试型:给出自己确定的故障的排除方案。
维修型:指定并实施纠正某类故障的规划。
规划型:根据给定目标拟定行动计划。
设计型:根据给定要求形成所需方案和图样。
监护型:完成实时监测任务。
控制型:完成实施控制任务。
demo:一个基于动物识别的专家系统:
1.构建知识库:
char *animal[]={"企鹅","海燕","鸵鸟","斑马","长颈鹿","虎","金钱豹"};
char *feature[]={"有毛","产奶","有羽毛","会飞","会下蛋","吃肉","有犬齿","有爪","眼睛盯前方","有蹄","反刍","黄褐色","有斑点",
//0 1 2 3 4 5 67 8 9 10 11 12
"有黑色条纹","长脖","长腿","不会飞","会游泳","黑白两色","善飞","哺乳类","鸟类","肉食类","蹄类",
//13 14 15 16 17 18 1920 21 22 23
"企鹅","海燕","鸵鸟","斑马","长颈鹿","虎","金钱豹"};
//24 25 26 27 28 29 30
typedef struct //存放规则的结构体
{
int relation[5];
int name;
}Rule;
Rule rule[15]={
{{0,-1},20},{{1,-1},20},{{2,-1},21},{{3,4,-1},21},{{20,5,-1},22},
{{6,7,8,-1},22} ,{{20,8,-1},23} ,{{20,9,-1},23},{{22,11,12,-1},30},
{{22,11,13,-1},29},{{23,14,15,12,-1},28},{{23,13,-1},27},
{{21,14,15,16,-1},26},{{21,19,-1},25},{{21,17,18,16,-1},24}
};
2.推理算法:
int inference(){//正向推理
int ti;
int i,j;
int tres;
cout< "<
3.其他函数:
int flag[23]={0};//标记各个特征是否选择
int IsAnimal(int a);
int inference();
void input();
void menu();
void menu(){
int i=0;
for(i=0;i<24;i++){
if(i%4==0&&i!=0){
cout<> ti;
if(ti>=0&&ti<=23)
flag[ti]=1;
else if(ti!=-1){
cout<<"输入错误!请输入 0~23 之间的数字!"<< endl; //notanimal=25
cin.clear();//清除流错误错误标
cin.sync(); ////////////清空输入缓冲区
}
}
}
int IsAnimal(int a){
if(a>=24&&a<=30)
return 1;
else
return 0;
}
//主函数
void main(){
char q;
while(q!='n'){
menu();
input();
inference();
cout<<"\n 继续?(Y/N)"<>q;
system("cls");
}
system("pause");
}
4.运行测试: