本文首发且更新于个人博客: https://www.xerrors.fun/Animal-Identification-Expert-System/
前言:本篇文章主要是介绍什么是专家系统,接下来会使用 JavaScript 语言来实现专家系统,同时完成在线交互演示的功能,使用的是 Vue 框架,没有把全部代码给贴出来,仅仅贴出来与算法相关的部分,如果想看全部的代码或者编辑这些代码,可以到 「Codepen」 体验。如果仅仅想要体验交互程序可以到我的「个人博客」 。而且我不想在非专业的文章里面出现很多的专有词汇,所以整篇文章会偏向于口语化,适合课后用来理解。
1. 专家系统介绍
在专家系统中,用户可以通过输入动物的特征,从系统中获得是什么动物。在系统内部,有若干个规则,系统基于已经存在的规则,对用户的输入进行判断,给出最终结果。这个系统就相当于一个动物领域的专家,你只要告诉他动物的特征,他就可以根据过往的经验来判断出你说的是什么动物。
想要达到这个地步,需要两样东西:一个是你要有足够的经验才能成为专家,其次就是你要能够运用这些知识,不然还不如一本书呢。
维基百科对 专家系统 的解释。专家系统= 知识库 + 推理机 ,因此专家系统也被称为基于知识的系统。专家系统其实也有好几个分类,这里所介绍的动物识别专家系统实际上就是一个基于规则的前向链专家系统(Forward-Chain Rule-Based Expert System),也就是我们是已知动物的特征去推算动物的种类。下面是两个规则的例子(字丑勿怪):
规则1:如果有毛且有蹄,可推出食草动物;
规则2:如果长脖子且是食草动物,可推出长颈鹿;
2. 知识库
下面的例子会借助一个具有对七个动物的识别的例子来详细介绍什么是专家系统:「企鹅、海燕、鸵鸟、斑马、长颈鹿、虎、金钱豹」。然后我们使用 31 个词来描述动物的特征,也就是下面的 Features 。其中前 20 个是最基础的,是用户的可输入的特征,而「哺乳类、鸟类、肉食类、蹄类」 这四个是中间推导结果;最后七个特征是七种动物。对于这些特征我们使用一个数组来保存。
为了方便大家理解这些特征跟序号的对应关系,大家看图:
保存规则
在线演示需要使用 JavaScript 作为编程语言,这里我们首先使用一个字符串数组来保存这些特征,使用一个对象数组来保存这些规则,然后使用一个布尔数组来保存推理的结果。比如若推导出是鸟类,则将 result[21]
置为 true
。
features: ["有毛","产奶","有羽毛","会飞","会下蛋","吃肉","有犬齿","有爪","眼睛盯前方","有蹄","反刍","黄褐色","有斑点","有黑色条纹","长脖","长腿","不会飞","会游泳","黑白两色","善飞","哺乳类","鸟类","肉食类","蹄类","企鹅","海燕","鸵鸟","斑马","长颈鹿","虎","金钱豹"],
rules: [