Control 版 (精华区)

发信人: dagam (断情), 信区: Control
标  题: [转载]专家系统[1] 
发信站: 哈工大紫丁香 (2001年07月01日11:47:59 星期天), 站内信件


什么是专家系统
专家系统是人工智能最重要的应用之一,它的目的是让电脑在某种程度上帮助或者替代
某个领域的专家解决问题。
例如医疗诊断系统、投资风险分析系统、家居设计系统等等。
一个典型的专家系统的构成方式如下图所示:
       ○                          ○
       ╋  Domain                  ╋ User
       /\  Expert                  /\
                                 ┃  △
       ┃ expertise              ▽  ┃
       ▽                      ┌---------┐
       ○  Kowledge            ┃User     ┃-----------┐
       ╋  Engineer            ┃Irterface┃           ▽
       /\                      └---------┘           ○ System
       ┃                            △                ╋ Engineer
       ┃                            ┃          ┌>   /\
       ┃encoded                     ▽          ┃
       ┃expertise             ┌---------┐     ┃    △
       ┃                      ┃Irference┃-----┘    ┃
       ┃                      ┃Engine   ┃           ┃
       ┃                      └---------┘           ┃
       └----->┌---------┐     △     △      ┌---------┐
               ┃Knowledge┃     ┃     ┃      ┃Working  ┃
               ┃Base     ┃-----┘     └-->   ┃Storage  ┃
               └---------┘                    └---------┘
Domain Expert就是某个领域的专家,他提供原始的知识。Knowledge Engineer是把专家
的知识翻译成
电脑所能够识别的知识的工程师。某领域的专家把他所知道的知识告诉knowlegde engi
neer以后,由
knowlegde engineer对这些知识进行处理,最后做成知识库knowledge base。
System Engineer是设计专家系统的程序员,他的主要任务是编写专家系统的推理机构i
nferface engine,
和用户界面user interface。用户使用用户界面和专家系统打交道,他和专家系统之间
的交流的一些信息
由工作空间working storage储存。推理机构根据用户信息和知识库中的信息为用户提供
服务。
在设计专家系统时候有目标驱动和数据驱动两种方式。下面我们通过实例来说明一下如
何使用prolog编写
目标驱动的专家系统。
一个可以识别鸟类的专家系统
这个系统的目的是通过用户对某种鸟类的描述,推断出用户描述的是何种鸟。由于prol
og的规则就是一种非
常好的表达知识的方法,而其内建的回溯功能和模式匹配功能则是很好的推理机构,所
以使用prolog来编写
这样的专家系统是再容易不过的了。
首先让我们来看看如何是使用prolog的规则来表达知识吧。我们可以从鸟类专家那里得
到如下的知识:
如果某种鸟是属于信天翁科,并且其颜色是白色的,那么这种叫就是laysan信天翁。(
我是翻译的外文教
材,所以这里关于鸟类的知识翻译的并不是太准确)
当然我们要用英语来表这个规则:
IF
family is albatross and
color is white
THEN
bird is laysan_albatross
如果使用prolog的规则来表达就是:
bird(laysan_albatross) :-
family(albatross),
color(white).
同样我们还可以加入下面的规则:
bird(laysan_albatross):-
family(albatross),
color(white).
bird(black_footed_albatross):-
family(albatross),
color(dark).
bird(whistling_swan) :-
family(swan),
voice(muffled_musical_whistle).
bird(trumpeter_swan) :-
family(swan),
voice(loud_trumpeting).
为了能够让这些规则能够分辨不同的鸟类,我们必须储存关于某种鸟的特定的信息。
例如,如果我们加入下面两个事实的话:
family(albatross).
color(dark).
然后在解释器中进行如下的询问:
?- bird(X).
X = black_footed_albatross
很自然的我们就得到了答案。
现在我们看到了一个再简单不过的专家系统了。他具备了前面所说的专家系统的几个构
造部分。
四条关于识别鸟的规则就是知识库knowledge base。
两条关于某种鸟的特性的事实就是工作空间working storage中存储的信息。
prolog的内建的模式匹配和回溯功能就是推理机构。
prolog的解释器就是用户界面。
当然,上面的这四个部分都还只是雏形,下面我们就要分解介绍如何慢慢的添加功能。

增加层次关系
仅仅使用上面的四条知识构成专家系统的知识结构是远远不够的。下面我们就来添加一
些新的知识。
动物界为动物分了科、目、属、种、类等几个层次,这些层次构成一个树状结构,下面
的几条规则就描述了其中的一些层次结构。
order(tubenose) :-
nostrils(external_tubular),
live(at_sea),
bill(hooked).
order(waterfowl) :-
feet(webbed),
bill(flat).
family(albatross) :-
order(tubenose),
size(large),
wings(long_narrow).
family(swan) :-
order(waterfowl),
neck(long),
color(white),
flight(ponderous).
其中的第二个规则:order的中文意思是动物学的目,waterfowl的意思是水鸟,所以第
二个规则描述的就是,水鸟这
个目的动物具有“脚有蹼”“bill扁平”这两个特点。
再解释一下最后一个规则,他的意思是天鹅这个科的的特点是:“属于水鸟目”“颈部
很长”“颜色是白色”“飞行起来比较沉重”。
注意前面我们bird的规则中使用了family,而在此对family的规则进行了定义,定义fa
mily的过程中,又使用了order。作为有强大
回溯功能的prolog可以很容易的把这些规则串起来,而不需要我们做更多的工作。下面
我们来看一个例子。
假如我们在系统中添加了如下的描述鸟的事实:
nostrils(external_tubular).
live(at_sea).
bill(hooked).
size(large).
wings(long_narrow).
color(dark).
那么我们就可以用来识别具有这些特征的是什么鸟了。
?- bird(X).
注意前面我们bird的规则中使用了family,洞硬幌 欢光光一个,可惜偏偏光光一个义fa
mily的过程中,又使用了order。作为有强大
回溯功能的prolog可以很容易的把这些规则串起来,而不需要我们做更多的工作。下面
我们来看一个例子。
假如我们在系统中添加了如下的描述鸟的事实:
nostrils(external_tubular).
live(at_sea).
bill(hooked).
size(large).
wings(long_narrow).
color(dark).
那么我们就可以用来识别具有这些特征的是什么鸟了。
?- bird(X).
X = black_footed_albatross           (原文转自“垂钓听竹轩”)

--

--
※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: heart.hit.edu.cn]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:4.672毫秒