您好,欢迎访问三七文档
一个专家系统的例子一、建立动物识别专家系统的规则库,并用与/或图来描述这个规则库。规则库由15条规则组成,规则名分别是;rule1,rule2,┉,rule15,规则库的符号名为ruleS。编写一段程序,把15条规则组成一个表直接赋值给规则库ruleS。(rules((rule1(if(animalhashair))若动物有毛发(F1)(then(animalismammal)))则动物是哺乳动物(M1)((rule2(if(animalgivesmilk))若动物有奶(F2)(then(animalismammal)))则动物是哺乳动物(M1)((rule3(if(animalhasfeathers))若动物有羽毛(F9)(then(animalisbird)))则动物是鸟(M4)((rule4(if(animalflies))若动物会飞(F10)(animallayseggs))且生蛋(F11)(then(animalisbird)))则动物是鸟(M4)((rule5(if(animaleatsmeat))若动物吃肉类(F3)(then(animaliscarnivore)))则动物是食肉动物(M2)((rule6(if(animalRaspointedteeth))若动物有犀利牙齿(F4)(animalhasclaws)且有爪(F5)(animalhasforwordeyes))且眼向前方(F6)(then(animaliscarnivore)))则动物是食肉动物(M2)((rule7(if(animalhasmammal))若动物是哺乳动物(M1)(animalhashoofs))且有蹄(F7)(then(animalisungulate)))则动物是有蹄类动物(M3)((rule8(if(animalhasmammal))若动物是哺乳动物(M1)(animalchewscud))且反刍(F8)(then(animalisungulate)))则动物是有蹄类动物(M3)((rule9(if(animalismammal))若动物是哺乳动物(M1)(animaliscarnivore)且是食肉动物(M2)(animalhastawnycolor)且有黄褐色(F12)(animalhasdarksports))且有暗斑点(F13)(then(animalischeetah)))则动物是豹(H1)((rule10(if(animalismammal))若动物是哺乳动物(M1)(animaliscarnivore)且是食肉动物(M2)(animalhastawnycolor)且有黄褐色(F12)(animalhasblackstripes)且有黑色条纹(F15)(then(animalistiger)))则动物是虎(H2)((rule11(if(animalisungulate))若动物是有蹄类动物(M3)(animalhaslongneck)且有长脖子(F16)(animalhaslonglegs)且有长腿(F14)(animalhasdarksports))且有暗斑点(F13)(then(animalisgiraffe)))则动物是长颈鹿(H3)((rule12(if(animalisungulate))若动物是有蹄类动物(M3)(animalhasblackstripes)且有黑色条纹(F15)(then(animaliszebra)))则动物是斑马(H4)((rule13(if(animalisbird))若动物是鸟(M4)(animaldoesnotfly)且不会飞(F17)(animalhaslongneck)且有长脖子(F16)(animalhaslonglegs))且有长腿(F14)(animalblackandwhite))且有黑白二色(F18)(then(animalisostrich)))则动物是驼鸟(H5)((rule14(if(animalisbird))若动物是鸟(M4)(animaldoesnotfly)且不会飞(F17)(animalswims)且会游泳(F19)(animalblackandwhite))且有黑白二色(F18)(then(animalispenguin)))则动物是企鹅(H6)((rule15(if(animalisbird))若动物是鸟(M4)(animalflieswell))且善飞(F20)(then(animalisalbatross)))则动物是信天翁(H6)在上述规则的说明中,用F1-F20标记的是初始事实或证据,用M1-M4标记的是中间结论,用H1-H7标记的是最终结论。用标记表示15条规则如下:R1:F1→M1R2:F2→M1R3:F9→M4R4:F10∧F11→M4R5:F3→M2R6:F4∧F5∧F6→M2R7:F7∧M1→M3R8:F8∧M1→M3R9:F12∧F13∧M1∧M2→H1R10:F12∧F15∧M1∧M2→H2R11:F13∧F14∧F16∧M3→H3R12:F15∧M3→H4R13:F14∧F16∧F17∧F18∧M4→H5R14:F17∧F18∧F19∧M4→H6R15:F20∧M4→H7用VC++编写一个函数,把一个表赋给变量rules,这个表有15个顶层元素,每一个顶层元素是一条规则,每条规则都是有4个元素的一个表。rule1Rule2Rule3Rule4Rule5Rule6Rule7Rule8Rule9rule10┉If前件F1F2F9F10∧F11F3F4∧F5∧F6F7∧M1F8∧M1F12∧F13∧M1∧M2F12∧F15∧M1∧M2Then后件M1M1M4M4M2M2M3M3H1H2可信度激活标志二、推理机及其实现1、正向推理过程:根据在综合数据库中给出的已知事实,正向使用规则,即把规则的前件同当前数据库的内容进行匹配来选取可用规则,若有多条规则可用,则采用先选优先的策略,将执行规则的结论添加到综合数据库中,并将用过的规则置上激活标志,直到问题求解或没有可用规则为止.2、正向推理过程程序实现Procedurerespond将规则库中规则的前件同当前数据库的内容进行匹配,若匹配成功,则将这条规则送入可用规则集S;否则,取下一条规则进行匹配。whileS非空且问题未求解除dobegin调用select-rule(S),从S中选择一条规则,将该规则的结论添加到综合数据库中。调用respondend由上可见正向推理过程respond是递归的。3、举例说明正向推理机推理过程若已知的初始事实是F13(有暗斑点)、F12(黄褐色)、F3(若动物吃肉类)及F1(动物有毛发),使用steq函数把已知的初始事实赋值给事实表facts:(steqfacts((animalhasdarkspots)(animalhastawnycolor)(animaleatsmeat)(animalhashair))即:facts=(F13F12F3F1)facts是一个可编辑的表,即可以添加。steq函数的功能就是对facts进行编辑。使用在前面建立的rules规则库,叙述正向推理过程如下:1)、在rules中查找规则前件的全部条件在当前facts=(F13F12F3F1)中的可用规则,首先找到规则R1,则把R1后件中不在facts中的结论M1添加到facts中,扩充facts为facts=(F13F12F3F1M1)。实际上,对facts=(F13F12F3F1)还有一条可用规则R5,因为R5的前件F3也在当前facts中。但是,由前面提到的冲突消解策略,若有多条可用规则,则按可用规则在规则库表rules中的顺序选择第一条可用规则。2)、对当前facts在rules中查找可用规则,仍然找到规则R1,但R1的后件结论M1已在facts中,因此不会执行规则R1。继续查找可用规则,找到规则R5,因为R5的后件结论M2不在当前的facts中,故执行R5,把R5不在facts中的结论M2添加到facts中,扩充facts为facts=(F13F12F3F1M1M2)。3)、对当前facts在rules中继续查找可用规则,规则R9的前件在facts中,因此R9是可用规则。而R9的后件结论H1不在当前的facts中,执行R9,把R9的结论H1扩充到facts中,使得facts=(F13F12F3F1M1M2H1)。4)、对当前facts,在rules中找不到规则的前件所包含的全部条件在facts中且后件有不在facts中的结论的任何规则,至此,正向推理结束.为了实现上述推理过程,需编写以下7个函数:A、正向推理机函数deduce函数表达式;(deducefacts)功能:连续不断的从规则库rules中选择可用规则,每选择到一条可用规则,就把该规则的后件中不在facts中的所有结论添加到facts中,B、调用函数step-forward实现对facts进行扩充,再通过扩充了的facts函数表达式:选择下一条可用规则,对facts再扩充,直到(step-forwardrules)没有可用规则为止。每找到一条可用规则对函数功能:facts进行一次扩充,deduce返回t;否则逐次扫描规则库rules中的规则,返回nil。若发现rules中有一条可用规则,即该规则的前件所包含的全部事实在表facts中,则把该规则的后件中不在facts中的所有结论添加到facts中,且step-forward返回t;若rules中没有一条可用规则,返回nil。C、调用函数try-rule实现函数表达式:(try-rulerule)函数功能:判断规则变量rule中的一条规则的前件包含的全部事实是否在表facts中,若全部事实都在表facts中,且规则后件有不在facts中的结论,则把不在facts中的结论逐一添加到表facts中,此时try-rule返回t;否则,返回nil。调用函数use-then实现调用函数remember或者函数recall实现D、函数use-then函数表达式:(use-thenrule)函数功能:判断变量rule中的一条规则的后件所包含的全部结论是否在表facts中,若全部结论都在facts中,则use-then返回nil;否则,将不在facts中的结论逐一添加到表facts中,且use-then返回t。▲(调用函数steq实现)E、函数remember函数表达式:(remembernew)函数功能:判断变量new中的一个事实是否在表facts中,存在,返回nil;否则,将new中的事实添加到表facts的表头,且返回new中的事实。F、函数recall函数表达式:(recallfact)函数功能:判断变量fact中的一个事实是否在表facts中,存在,recall返回值是fact中的事实;否则,返回nil。●关于E、F的区别E用于向事实表facts中添加新的事实。F用于跟踪推理过程。G、函数test-if函数表达式:(test-ifrule)函数功能:判断变量rule中的一条规则的前件所包含的全部事实是否在表facts中,若在,test-if返回t;否则,返回nil。
本文标题:一个专家系统的例子
链接地址:https://www.777doc.com/doc-4645604 .html