第五章用PROLOG语言建造专家系统第一节专家系统概论第二节专家系统入门第三节用PROLOG语言建造正向推理专家系统第四节用PROLOG语言建造反向推理专家系统第一节专家系统概论一、专家系统的基本概念1、专家系统的概念•具有相当于专家的知识和经验水平,以及解决专门问题能力的计算机系统•通常指计算机软件系统2、专家系统的特点1)与传统的计算机程序相比,ES的特点•知识信息处理系统•知识利用系统•具有知识推理能力•咨询解释能力第一节专家系统概论2)与人类专家相比,ES的特点•ES的知识具有永久性•ES的知识和它本身都很容易被复制和传播•ES的知识具有高度的一致性和可靠性•ES的费用较人类专家低得多第一节专家系统概论二、专家系统的结构知识库推理机知识获取对话解释/帮助自然语言界面人类专家使用者第一节专家系统概论三、专家系统的用途和类型1、专家系统的用途•知识利用、保存和传播的现代化工具•人工智能和知识工程技术的开发环境2、专家系统的类型•解释型•诊断型•设计型•教学型•咨询型•工具型第二节专家系统入门一、一个简单的专家系统•该系统没有知识的获取、解释和帮助功能•其知识库没有采用外部文件的形式,而是程序的一部分•其知识直接采用PROLOG规则形式表达•推理机直接应用PROLOG的推理机制第二节专家系统入门二、系统设计1、诊断的表示•三个诊断结果分别用三个diagnose规则表示•如:如果脸色通红and皮肤发烫and体温升高那么中暑•用PROLOG规则表示:diagnose(“中暑”)ifsymptom(“脸色通红”)andsymptom(“皮肤发烫”)andsymptom(“体温升高”)•diagnose(“病因不明”)第二节专家系统入门2、症状的表示•用symptom谓词表示•每个症状需定义一条规则,如symptom(“恶心”)ifask(“病人是否恶心”,“恶心”)•在database段,定义两个数据库谓词:yes(symptom)no(symptom)•ask(Text,Keyword)ifwrite(Text),readchar(Answer),write(Answer),nl,Answer=‘y’,asserta(yes(Keyword)).ask(_,Keyword)ifasserta(no(Keyword)),fail.第二节专家系统入门3、措施的表示•一般性措施,用“或”关系与三种诊断结果相对应•特殊措施,用于不同的诊断结果•用measure谓词表示•数据库谓词recognized用于存储诊断结果第二节专家系统入门三、程序的执行过程•调用diagnose(D)规则,证明诊断•将诊断结果存入数据库•调用measure(M)规则,给出应采取的措施第二节专家系统入门四、规则库的构造轻度中暑中暑日射病andandand冷汗脉频体温正常苍白脸色发红皮肤发烫体温过高恶心呕吐皮肤凉R1R2R3第二节专家系统入门五、程序运行医疗诊断系统请用y或n回答下列问题病人脸色是否苍白?n病人脸色是否发红?y病人皮肤是否发烫?y病人体温是否过高?y诊断结果:中暑请采取以下措施:病人是否已昏迷?n将病人抬到阴凉处用湿毛巾擦身降温呼救第二节专家系统入门医疗诊断系统请用y或n回答下列问题病人脸色是否苍白?n病人脸色是否发红?y病人皮肤是否发烫?y病人体温是否过高?n病人皮肤是否发凉?y病人是否恶心?y病人是否呕吐?y诊断结果:日射病请采取以下措施:病人是否已昏迷?y病人呼吸是否正常?y平躺将病人抬到阴凉处将病人抬到阴凉处呼救第三节正向推理专家系统一、系统规划1、系统的基本功能•通过对话输入新的知识库并加以储存•调入一个已储存的知识库•通过对话输入已知事实•结论推理并输出结果•程序不用重新启动也能重复运行第三节正向推理专家系统2、系统的扩展功能•用菜单的形式控制•用菜单的形式选择事实输入•对知识库进行编辑第三节正向推理专家系统3、知识的表达•rule(编号,[条件1,条件2,…],结论)•如:rule(3,[“哺乳动物”,“个头大”,“有长鼻子”],“大象”)rule(4,[“生活在水中”,“用鳃呼吸”],“鱼”)第三节正向推理专家系统二、推理机设计start检查下一条规则不再有其他规则stop结论存在数据库中所有条件都满足对使用者提供解释YNNYYN结论存入数据库中inferenceifrule(Rn,Cond,Cons),not(fact(Cons)),meeted(Cond),explain(Rn,Cons),assertz(fact(Cons)),fail.meeted([]).meeted([Cond|Rest])iffact(Cond),meeted(Rest).第三节正向推理专家系统三、规则库的产生•提供两种操作:构造新的知识库(a)或将已存在的知识库调入内存(b)process(‘a’)ifacquisition.process(‘b’)ifwrite(“请输入知识库名:”),readln(Name),consult(Name),writef(“知识库%已装入”,Name).•若输入的知识库名字不存在process(‘b’)ifwrite(“指定的知识库不存在!”),beep,wait(15000),start.wait(0).wait(N)ifN1=N-1,wait(N1).第三节正向推理专家系统•当使用者即不选择a,也不选择bprocess(_)ifwrite(“选择错误,注意只能选择a或b”),beep,wait(15000),start.•新建知识库——acquisitionrule_read(Nr)ifconditions_read([],List),conclusion_read(Conclusion),assertz(rule(Nr,List,Conclusion)),Nr1=Nr+1,continue(Nr1).第三节正向推理专家系统•读入条件conditions_read(L1,L2)ifwrite(“请输入条件”),readln(B),B”*”attach(L1,[B],Lnew),conditions_read(Lnew,L2).conditions_read(L,L).attach([],L,L).attach([X|L1],L2,[X|L3])ifattach(L1,L2,L3).第三节正向推理专家系统四、事实的收集dialogifmakewindow(3,7,7,”事实搜集”,2,2,20,75),write(“请输入已知事实,打入星号退出:”),nl,facts_readin.facts_readinifwrite(“事实”),readln(F),F”*”,assertz(fact(F)),facts_readin.facts_readin.第三节正向推理专家系统五、动物识别1、知识库rule(1,[“有毛皮”],“是哺乳动物”)rule(2,[“产乳”],“是哺乳动物”)rule(3,[“有羽毛”],“是鸟”)rule(4,[“下蛋”],“是鸟”)rule(5,[“能飞”],“是鸟”)rule(6,[“能游水飞”,“生活在水中”],“是鱼”)rule(7,[“有长鼻”,“是哺乳动物”],“是大象”)rule(8,[“有鬃毛”,“是哺乳动物”],“是狮子”)rule(9,[“有驼峰”,“是哺乳动物”],“是骆驼”)rule(10,[“尖耳朵”,“是鸟”],“是猫头鹰”)rule(11,[“钩”,“是鸟”],“是鹰”)rule(12,[“红色”,“是鱼”],“是金鱼”)rule(13,[“很大”,“是鱼”],“是鲨鱼”)第三节正向推理专家系统2、示例•输入事实:能游水、生活在水中,很大•推理结论已知下列事实:能游水生活在水中很大根据规则6得出结论:是鱼已知下列事实:能游水生活在水中很大是鱼根据规则13得出结论:是鲨鱼继续还是退出(y/n)?