《人工智能实验报告:知识表示方法及应用》由会员分享,可在线阅读,更多相关《人工智能实验报告:知识表示方法及应用(15页珍藏版)》请在金锄头文库上搜索。
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.getStateBoatLeft(), n.getNodesCheckSum(), 0, 2);if (dfs(n5) resultList.add(0, n5);return true;