人工智能实验知识表示法.docx_第1页
人工智能实验知识表示法.docx_第2页
人工智能实验知识表示法.docx_第3页
人工智能实验知识表示法.docx_第4页
人工智能实验知识表示法.docx_第5页
已阅读5页,还剩1页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验二 知识表示方法1实验目的(1)了解知识表示相关技术;(2)掌握问题规约法或者状态空间法的分析方法。2实验内容(2个实验内容可以选择1个实现)(1)梵塔问题实验。熟悉和掌握问题规约法的原理、实质和规约过程;理解规约图的表示方法;(2)状态空间法实验。从前有一条河,河的左岸有m个传教士、m个野人和一艘最多可乘n人的小船。约定左岸,右岸和船上或者没有传教士,或者野人数量少于传教士,否则野人会把传教士吃掉。搜索一条可使所有的野人和传教士安全渡到右岸的方案。3实验报告要求(1)简述实验原理及方法,并请给出程序设计流程图。本次试验选择传教士过河问题,以状态空间法实现。解答步骤如下:(1) 设置状态变量并确定值域M为传教士人数,C 为野人人数,B为船数,要求M=C且M+C = 3,L表示左岸,R表示右岸。初始状态目标状态LRLRM30M03C30C03B10B01(2) 确定状态组,分别列出初始状态集和目标状态集用三元组来表示:(ML , CL , BL)(均为左岸状态)其中,BL 0 , 1 :(3 , 3 , 1) : (0 , 0 , 0)初始状态表示全部成员在河的的左岸;目标状态表示全部成员从河的左岸全部渡河完毕。(3) 定义并确定规则集合仍然以河的左岸为基点来考虑,把船从左岸划向右岸定义为Pij操作。其中,第一下标i表示船载的传教士数,第二下标j表示船载的食人者数;同理,从右岸将船划回左岸称之为Qij操作,下标的定义同前。则共有10种操作,操作集为 F=P01,P10,P11,P02,P20,Q01,Q10,Q11,Q02,Q20P10if ( ML ,CL , BL=1 ) then ( ML1 , CL , BL 1 ) P01if ( ML ,CL , BL=1 ) then ( ML , CL1 , BL 1 ) P11if ( ML ,CL , BL=1 ) then ( ML1 , CL1 , BL 1 ) P20if ( ML ,CL , BL=1 ) then ( ML2 , CL , BL 1 ) P02if ( ML ,CL , BL=1 ) then ( ML , CL2 , BL 1 ) Q10 if ( ML ,CL , BL=0 ) then ( ML+1 , CL , BL+1 ) Q01if ( ML ,CL , BL=0 ) then ( ML , CL+1 , BL +1 ) Q11if ( ML ,CL , BL=0 ) then ( ML+1 , CL +1, BL +1 ) Q20if ( ML ,CL , BL=0 ) then ( ML+2 , CL +2, BL +1 ) Q02if ( ML ,CL , BL=0 ) then ( ML , CL +2, BL +1 ) (4) 当状态数量不是很大时,画出合理的状态空间图 图1 状态空间图箭头旁边所标的数字表示了或操作的下标,即分别表示船载的传教士数和食人者数。接下来进行树的遍历,根据规则由根(初始状态)扩展出整颗树,检测每个结点的“可扩展标记”,为“-1”的即目标结点。由目标结点上溯出路径。(2)源程序清单:/关键代码#include #include #include using namespace std;typedef structint m;/表示传教士int c;/ 表示野人int b;/船状态MCNode;list fringe;/相当于队列vector closed;/closed表/判断是否是目标结点bool IsGoal(MCNode tNode)if(tNode.m=0&tNode.c=0&tNode.b=0)return true;elsereturn false;/判断是否是合法状态bool IsLegal(MCNode tNode)if(tNode.m=0&tNode.m=0&tNode.c=3)if(tNode.m=tNode.c)|(tNode.m=3)|(tNode.m=0)return true;elsereturn false;elsereturn false;bool operator=(MCNode m1,MCNode m2) /重载运算符,判断两结构体是否相等if(m1.m=m2.m&m1.c=m2.c&m1.b=m2.b)return true;elsereturn false;bool IsClosed(MCNode tNode) /判断是否已在closed表中int i;for(i=0;i!=closed.size();i+)if(tNode=closedi)return true;if(i=closed.size()return false;void ExpandNode(MCNode tNode,int b,list &fringe)MCNode node5;/应用5条规则集生成新结点if(b=1)for(int i=0;i5;i+)nodei.b=0;node0.m=tNode.m-1;node0.c=tNode.c;node1.m=tNode.m;node1.c=tNode.c-1;node2.m=tNode.m-1;node2.c=tNode.c-1;node3.m=tNode.m-2;node3.c=tNode.c;node4.m=tNode.m;node4.c=tNode.c-2;elsefor(int i=0;i5;i+)nodei.b=1;node0.m=tNode.m+1;node0.c=tNode.c;node1.m=tNode.m;node1.c=tNode.c+1;node2.m=tNode.m+1;node2.c=tNode.c+1;node3.m=tNode.m+2;node3.c=tNode.c;node4.m=tNode.m;node4.c=tNode.c+2;for(int i=0;i5;i+)if(IsLegal(nodei)&!IsClosed(nodei)fringe.push_front(nodei);/队列后进先出,深度优先搜索,最后得到一条最小解序列/fringe.push_back(nodei);/队列后进后出,广度优先搜索,最后得到最小解序列状态空间图void main()MCNode InitNode,unode;InitNode.m=3;InitNode.c=3;InitNode.b=1;fringe.push_back(InitNode);/将初始状态空间加入到队列while(!fringe.empty()unode=fringe.front();fringe.pop_front();if(IsGoal(unode)closed.push_back(unode);for(int i=0;i!=closed.size();i+)coutclos

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论