1、西安郵電大学人工智能实验报 告 书(三)学院:自动化学院专业:智能科学与技术班级:智能 1403姓名:刘忠强时间:2016-3-29一、实验目的1. 熟悉人工智能系统中的问题求解过程;2. 熟悉状态空间的盲目搜索策略;3.掌握盲目收索算法,重点是宽度优先收索和深度优先收索。二、实验算法广度优先收索是一种先生成的节点先扩展的策略。它的过程是:从初始节点开始逐层向下扩展,再第 n 层节点还没有完全搜索之前,不进如第 n+1 层节点。Open 表中的节点总是按进入的先后排序,先进入的节点排在前面,够进入的排在后面。三、程序框图四、实验结果及分析初始状态: 目标状态:2 8 3 2 1 61 6 4
2、4 0 87 0 5 7 5 3五、源程序及注释#include #include #include using namespace std;const int ROW = 3;const int COL = 3;const int MAXDISTANCE = 10000;const int MAXNUM = 10000;int abs(int a)if (a0) return a;else return -a;typedef struct _Nodeint digitROWCOL;int dist; / 距离 int dep; / 深度int index; / 索引值 Node;Node s
3、rc, dest;vector node_v; / 储存节点 bool isEmptyOfOPEN() /判断 Open 表是否空 for (int i = 0; i index = node_vindex.index;while (index != 0) rstep_v.push_back(node_vindex);index = node_vindex.index;for (int i = rstep_v.size() - 1; i = 0; i-)cout 0) Swap(node_up.digitxy, node_up.digitx - 1y);if (isExpandable(nod
4、e_up) dist_up = Distance(node_up, dest.digit); node_up.index = index;node_up.dist = dist_up;node_up.dep = node_vindex.dep + 1;node_v.push_back(node_up);Node node_down; /下移操作Assign(node_down, index);int dist_down = MAXDISTANCE;if (x 0) Swap(node_left.digitxy, node_left.digitxy - 1);if (isExpandable(n
5、ode_left) dist_left = Distance(node_left, dest.digit);node_left.index = index;node_left.dist = dist_left;node_left.dep = node_vindex.dep + 1;node_v.push_back(node_left);Node node_right; /右移操作Assign(node_right, index);int dist_right = MAXDISTANCE;if (y number;src.digitij = number;src.index = 0;src.de
6、p = 1;cout number;dest.digitmn = number;node_v.push_back(src);while (1) if (isEmptyOfOPEN() cout rstep_v;cout “初始状态:“ endl;cout src endl;PrintSteps(loc, rstep_v);cout “成功!“ endl;break;else ProcessNode(loc);return 0;6、实验心得:不得不说这次的实验内容真的好难,涉及到的算法很复杂也很抽象,但是这次实验确实让我的编程能力有了很大的提高,让我对人工智能技术有了更深一步的认识,在解决问题和算法设计方面也有了很大的提高。这次实验我花了好几天的时间去查找资料,阅读并消化,最后采用了深度优先算法解决了八数码难题。这次实验让我明白了一个问题一开始无论看起来有多么困难,只要你能花时间去研究就一定能找出解决问题的方法。