【人工智能)人工智能实验报告.doc

  1. 1、本文档共43页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
(人工智能)人工智能实验报告 江苏科技大学 实验报告 (2012/2013学年第2学期) 名称: 人工智能 学生姓名: 陈嘉生 学生学号: 1040501211 院系: 数理学院 专业: 信息与计算科学 2013年5月18日 实验一:知识表示方法 一、实验目的 状态空间表示法是人工智能领域最基本的知识表示方法之一,也是进一步学习状态空间搜索策略的基础,本实验通过牧师与野人渡河的问题,强化学生对知识表示的了解和应用,为人工智能后续环节的奠定基础。 二、问题描述 有n个牧师和n个野人准备渡河,但只有一条能容纳c个人的小船,为了防止野人侵犯牧师,要求无论在何处,牧师的人数不得少于野人的人数(除非牧师人数为0),且假定野人与牧师都会划船,试设计一个算法,确定他们能否渡过河去,若能,则给出小船来回次数最少的最佳方案。 三、基本要求 输入:牧师人数(即野人人数):n;小船一次最多载人量:c。 输出:若问题无解,则显示Failed,否则,显示Successed输出一组最佳方案。用三元组(X1,X2,X3)表示渡河过程中的状态。并用箭头连接相邻状态以表示迁移过程:初始状态->中间状态->目标状态。 例:当输入n=2,c=2时,输出:221->110->211->010->021->000 其中:X1表示起始岸上的牧师人数;X2表示起始岸上的野人人数;X3表示小船现在位置(1表示起始岸,0表示目的岸)。 要求:写出算法的设计思想和源程序,并以图形用户界面实现人机交互,进行输入和输出结果,如: Pleaseinputn:2Pleaseinputc:2 SuccessedorFailed?:Successed OptimalProcedure:221->110->211->010->021->000 四、实验组织运行要求 本实验采用集中授课形式,每个同学完成上述实验要求。 五、实验条件 每人一台计算机完成实验。 六、实验代码 Main.cpp #include<iostream> #include"RiverCrossing.h" usingnamespacestd; //主函数 voidmain() { RiverCrossing::ShowInfo(); intn,c; cout<<"Pleaseinputn:"; cin>>n; cout<<"Pleaseinputc:"; cin>>c; RiverCrossingriverCrossing(n,c); riverCrossing.solve(); system("pause"); } RiverCrossing.h #pragmaonce #include<list> //船 clasoat { public: staticintc; intpastor;//牧师 intsavage;//野人 Boat(intpastor,intsavage); }; //河岸状态 classState { public: staticintn; intiPastor;//牧师数量 intiSavage;//野人数量 intiBoatAtSide;//船所在河岸 State*pPrevious;//前一个状态 State(intpastor,intsavage,intboatAtSide); intgetTotalCount();//获得此岸总人数 boolcheck();//检查人数是否符合实际 boolisSafe();//检查是否安全 Stateoperator+(Boat&boat); Stateoperator-(Boat&boat); booloperator==(State&state); }; //过河问题 classRiverCrossing { private: std::list<State*>openList,closeList; StateendState; boolmove(State*nowState,Boat*boat);//进行一次决策 State*findInList(std::list<State*>&listToCheck,State&state);//检查某状态节点是否在列表中 voidprint(State*endState);//打印结果 public: staticvoidShowInfo(); RiverCrossing(intn,intc); boolsolve();//求解问题 }; RiverCrossing.cpp #include"RiverCrossing.h" #include<iostream> #

文档评论(0)

卓越智库 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档