2020-09-27

                                          专家系统
什么叫专家系统

专家系统(Expert System,简称ES):专家系统被定义为一种交互式可靠的基于计算机的决策系统,它使用事实和启发式方法来解决复杂的决策问题。它被认为是人类智慧和专业知识的最高水平。它是一个计算机应用程序,可以解决特定域中最复杂的问题。
  专家系统可以解决通常需要人类专家的许多问题。它基于从专家那里获得的知识。它还能够表达和推理某些知识领域。专家系统是当今人工智能,深度学习和机器学习系统的前身。

专家系统的组成

专家系统通常由人机交互界面、知识库、推理机、解释器、综合数据库、知识获取等6个部分构成。其中尤以知识库与推理机相互分离而别具特色。专家系统的体系结构随专家系统的类型、功能和规模的不同,而有所差异。
1.用户界面
  用户界面是专家系统中最重要的部分。此组件以可读形式获取用户的查询,并将其传递给推理引擎。之后,它会向用户显示结果。换句话说,它是一个帮助用户与专家系统通信的界面。
  用户界面是专家系统中最关键的部分。该组件以可读的形式获取用户的查询,并将其传递给推理机。之后,它向用户显示结果。换句话说,它是一个帮助用户与专家系统进行通信的界面。

2.推理机
  推理机是专家系统的大脑。推理机包含解决特定问题的规则。它是指从知识库中获取的知识。当试图回答用户的查询时,它选择要应用的事实和规则。它为知识库中的信息提供了推理。它也有助于解决问题。这一组成部分也有助于制定结论。

3.知识库
  知识库是事实的储存库。专家系统的[问题求解过程是通过知识库中的知识来模拟专家的思维方式的,因此,知识库是专家系统质量是否优越的关键所在,即知识库中知识的质量和数量决定着专家系统的质量水平。

专家系统工作结构图:


image.png
专家系统特点

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.运行测试:


image.png

你可能感兴趣的:(2020-09-27)