人工智能实验报告:知识表示方法及应用.docx

上传人:豆**** 文档编号:29945931 上传时间:2022-08-02 格式:DOCX 页数:15 大小:533.14KB
返回 下载 相关 举报
人工智能实验报告:知识表示方法及应用.docx_第1页
第1页 / 共15页
人工智能实验报告:知识表示方法及应用.docx_第2页
第2页 / 共15页
点击查看更多>>
资源描述

《人工智能实验报告:知识表示方法及应用.docx》由会员分享,可在线阅读,更多相关《人工智能实验报告:知识表示方法及应用.docx(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、 人工智能 上机实验报告实验名称: 知识表示方法及应用 实验日期 2016年12月3日 1. 实验目的:(1) 在掌握状态空间搜索策略的基础上,理解知识表示的方法。(2) 能够应用知识表示方法,解决实际问题。2. 实验内容:(1) M-C问题描述有n个牧师和n个野人准备渡河,但只有一条能容纳c个人的小船,为了防止野人侵犯牧师,要求无论在何处,牧师的人数不得少于野人的人数(除非牧师人数为0),且假定野人与牧师都会划船,试设计一个算法,确定他们能否渡过河去,若能,则给出小船来回次数最少的最佳方案。(2) 基本要求:1. 输入:牧师人数(即野人人数):n;小船一次最多载人量:c。2. 输出:若问题无

2、解,则显示Failed,否则,显示Successed输出一组最佳方案。用三元组(X1, X2, X3)表示渡河过程中的状态。并用箭头连接相邻状态以表示迁移过程:初始状态-中间状态-目标状态。3. 例:当输入n=2,c=2时,输出:221-110-211-010-021-0004. 其中:X1表示起始岸上的牧师人数;X2表示起始岸上的野人人数;X3表示小船现在位置(1表示起始岸,0表示目的岸)。5. 要求:写出算法的设计思想和源程序,并以图形用户界面实现人机交互,进行输入和输出结果,如:Please input n: 2 Please input c: 2Successed or Failed?

3、: SuccessedOptimal Procedure: 221-110-211-010-021-0003. 算法设计package cn.xiaoyangege.mvc.yerenguohe;/CrossRiverQuestion.javaimport java.util.ArrayList;import java.util.List;import java.util.Scanner;public class CrossRiverQuestion public static void main(String args) Scanner scanner = new Scanner(Syste

4、m.in);int n = 0;int c = 0;String ns = null;String cs = null;boolean flag;do flag = false;System.out.print(Please input n:);ns = scanner.nextLine();System.out.print(Please input c:);cs = scanner.nextLine();try n = Integer.parseInt(ns);c = Integer.parseInt(cs); catch (NumberFormatException e) System.o

5、ut.println(输入不合法。);flag = true;continue;if (!flag & (n 0 | c 0) System.out.println(输入不合法。);flag = true; while (flag);scanner.close();CrossRiverQuestion q = new CrossRiverQuestion(n, c);q.solveQuestion();private intpeoNum;private intsavageNum;private ListresultList= new ArrayList();public List solveQ

6、uestion() Node n = new Node(peoNum, savageNum, 0, 0, 0, new ArrayList(),0, 0);boolean dfsResult = dfs(n);System.out.print(Succeed or Failed?: );if (dfsResult) System.out.println(Succeed.);System.out.print(Optimal Procedure: );resultList.add(0, n);for (Node node : resultList) System.out.print(node.ge

7、tLeftPeo() + + node.getLeftSavage()+ + (1 - node.getCURR_STATE() + -);System.out.println(End);return resultList; else System.out.println(Failed.);return null;public CrossRiverQuestion(int peoNum, int savageNum) super();this.peoNum = peoNum;this.savageNum = savageNum;private boolean dfs(Node n) if (n

8、.hasVisited() return false;n.addCheckSum();if (n.getLeftPeo() = 0 & n.getLeftSavage() = 0) return true;if (n.getLeftPeo() 0 | n.getRightPeo() 0 | n.getLeftSavage() 0| n.getRightSavage() 0) return false;if (n.getLeftPeo() 0) return false;if (n.getRightPeo() 0) return false;if (n.getCURR_STATE() = n.g

9、etStateBoatLeft() Node n1 = new Node(n.getLeftPeo() - 1, n.getLeftSavage() - 1,n.getRightPeo() + 1, n.getRightSavage() + 1,n.getStateBoatRight(), n.getNodesCheckSum(), 1, 1);if (dfs(n1) resultList.add(0, n1);return true;Node n4 = new Node(n.getLeftPeo() - 2, n.getLeftSavage(),n.getRightPeo() + 2, n.

10、getRightSavage(),n.getStateBoatRight(), n.getNodesCheckSum(), 2, 0);if (dfs(n4) resultList.add(0, n4);return true;Node n5 = new Node(n.getLeftPeo(), n.getLeftSavage() - 2,n.getRightPeo(), n.getRightSavage() + 2,n.getStateBoatRight(), n.getNodesCheckSum(), 0, 2);if (dfs(n5) resultList.add(0, n5);retu

11、rn true; else Node n6 = new Node(n.getLeftPeo(), n.getLeftSavage() + 1,n.getRightPeo(), n.getRightSavage() - 1,n.getStateBoatLeft(), n.getNodesCheckSum(), 0, 1);if (dfs(n6) resultList.add(0, n6);return true;Node n7 = new Node(n.getLeftPeo() + 1, n.getLeftSavage(),n.getRightPeo() - 1, n.getRightSavag

12、e(),n.getStateBoatLeft(), n.getNodesCheckSum(), 1, 0);if (dfs(n7) resultList.add(0, n7);return true;Node n1 = new Node(n.getLeftPeo() + 1, n.getLeftSavage() + 1,n.getRightPeo() - 1, n.getRightSavage() - 1,n.getStateBoatLeft(), n.getNodesCheckSum(), 1, 1);if (dfs(n1) resultList.add(0, n1);return true

13、;Node n4 = new Node(n.getLeftPeo() + 2, n.getLeftSavage(),n.getRightPeo() - 2, n.getRightSavage(),n.getStateBoatLeft(), n.getNodesCheckSum(), 2, 0);if (dfs(n4) resultList.add(0, n4);return true;Node n5 = new Node(n.getLeftPeo(), n.getLeftSavage() + 2,n.getRightPeo(), n.getRightSavage() - 2,n.getStat

14、eBoatLeft(), n.getNodesCheckSum(), 0, 2);if (dfs(n5) resultList.add(0, n5);return true;return false;public List getResultList() return resultList;class Node private ListnodesCheckSum= new ArrayList();private intleftPeo;private intrightPeo;private intleftSavage;private intrightSavage;private intCURR_

15、STATE= 0;private intonBoatPeoNum= 0;private intonBoatSavageNum= 0;private final intSTATE_BOAT_LEFT= 0;private final intSTATE_BOAT_RIGHT= 1;public Node(int leftPeo, int leftSavage, int rightPeo, int rightSavage,int state, List checkSumList, int onBoatPeoNum,int onBoatSavageNum) CURR_STATE = state;thi

16、s.leftPeo = leftPeo;this.leftSavage = leftSavage;this.rightPeo = rightPeo;this.rightSavage = rightSavage;nodesCheckSum.addAll(checkSumList);this.onBoatPeoNum = onBoatPeoNum;this.onBoatSavageNum = onBoatSavageNum;public int getLeftPeo() return leftPeo;public void setLeftPeo(int leftPeo) this.leftPeo

17、= leftPeo;public int getRightPeo() return rightPeo;public void setRightPeo(int rightPeo) this.rightPeo = rightPeo;public int getLeftSavage() return leftSavage;public void setLeftSavage(int leftSavage) this.leftSavage = leftSavage;public int getRightSavage() return rightSavage;public void setRightSav

18、age(int rightSavage) this.rightSavage = rightSavage;Overridepublic String toString() return leftPeo + , + leftSavage + , + rightPeo + , + rightSavage+ , + CURR_STATE;public int getCURR_STATE() return CURR_STATE;public void setCURR_STATE(int cURR_STATE) CURR_STATE = cURR_STATE;public int getStateBoat

19、Left() return STATE_BOAT_LEFT;public int getStateBoatRight() return STATE_BOAT_RIGHT;public int calcCheckSum() return 1 * getCURR_STATE() + 10 * getLeftPeo() + 100 * getLeftSavage()+ 1000 * getRightPeo() + 10000 * getRightSavage();public void addCheckSum() int checkSum = calcCheckSum();nodesCheckSum

20、.add(checkSum);public boolean hasVisited() int sum = calcCheckSum();for (Integer checkSum : nodesCheckSum) if (checkSum = sum) return true;return false;public List getNodesCheckSum() return nodesCheckSum;public int getOnBoatPeoNum() return onBoatPeoNum;public void setOnBoatPeoNum(int onBoatPeoNum) t

21、his.onBoatPeoNum = onBoatPeoNum;public int getOnBoatSavageNum() return onBoatSavageNum;public void setOnBoatSavageNum(int onBoatSavageNum) this.onBoatSavageNum = onBoatSavageNum;4. 程序调试(实验数据记录根据程序要求输入几组不同数据,记录程序运行结果,并分析结果,分析程序运行中出现的主要错误。或对其他程序环境的使用情况的记录。注:必须认真书写)错误:当输入不合法时,程序会抛出异常而终止运行。于是改进程序如下:5. 讨论(通过实验的一些体会、学会的知识和技能等)(1) 若代码所要实现的功能较多或者程序较为复杂,可先设计好程序的整体框架,画出流程图,然后依次编写代码分别实现上述功能,最后将各部分代码按照顺序结合起来,对各个参数稍加调试,便可得到清晰正确的程序。(2) 在用到循环或者递归等算法时,很容易出现对某一界限界定不明导致程序无法正常运行,而且这些疏漏之处往往是简短几步中不容易发现的,这就需要细心、耐心地梳理清楚各条脉络,找出问题所在。(3) 在编写程序时,应在方便的情况下尽可能使用同一种变量进行各步的运算,减少不必要的变量定义,以免造成代码过于混乱。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 教育专区 > 小学资料

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁