文档视界 最新最全的文档下载
当前位置:文档视界 › 昆明理工大学八数码实验报告

昆明理工大学八数码实验报告

昆明理工大学八数码实验报告
昆明理工大学八数码实验报告

昆明理工大学信息工程与自动化学院学生实验报告

(2014 —2015 学年第 1 学期)

课程名称:人工智能及其应用开课实验室:信自楼5042014年11月26日年级、专业、班计科122

学号 4 邹华宇成绩

实验项目名称八数码问题指导教师吴霖

教师评语该同学是否了解实验原理: A.了解□ B.基本了解□ C.不了解□

该同学的实验能力: A.强□ B.中等□ C.差□

该同学的实验是否达到要求: A.达到□ B.基本达到□ C.未达到□

实验报告是否规范: A.规范□ B.基本规范□ C.不规范□

实验过程是否详细记录: A.详细□ B.一般□ C.没有□

教师签名:

年月日

一、上机目的及内容

1.上机内容:

求解八数码问题。

问题描述:八数码难题,问题描述:在3×3方格棋盘上,分别放置了标有数字1,2,3,4,5,6,7,8的八张牌,初始状态S0,目标状态S1如图所示,可以使用的操作有:空格上移,空格左移,空格右移,空格下移。只允许位于空格左,上,右,下方的牌移入空格。用广度优先搜索策略寻找从初始状态到目标状态的解路径。

2.上机目的:

(1)复习程序设计和数据结构课程的相关知识;

(2)熟悉人工智能系统中的问题求解过程;

(3)熟悉对八码数问题的建模、求解及编程语言的运用。

二、实验原理及基本技术路线图(方框原理图或程序流程图)

(1)建立一个只含有起始节点S的搜索图G,把S放到一个叫做OPEN的未扩展节点的表中;

(2)建立一个叫做CLOSED的已扩展节点表,其初始为空表;

(3)LOOP:若OPEN表是空表,则失败退出;

(4)选择OPEN表上的第一个节点,把它从OPEN表移除并放进CLOSED表中,称此节点为节点n;

(5)若n为一目标节点,则有解并成功退出,此解是追踪图G中沿着指针从n到S这条路径而得到的;

(6)扩展节点n,同时生成不是n的祖先的那些后继节点的集合M。把M的这些成员作为n的后继节点舔到图中;

(7)对那些未曾在G中出现过的M成员设置一个通向n的指针。把M的这些成员加进OPEN表。对已经在OPEN表或CLOSED表上的成员,确定是否需要更改通到n的指针方向;

(8)按某一任意方式或按某个探视值,重排OPEN表。

宽度优先算法实现过程

(1)把起始节点放到OPEN表中;

(2)如果OPEN是个空表,则没有解,失败退出;否则继续;

(3)把第一个节点从OPEN表中移除,并把它放入CLOSED的扩展节点表中;

(4)扩展节点n。如果没有后继节点,则转向(2);

(5)把n的所有后继结点放到OPEN表末端,并提供从这些后继结点回到n的指针;(6)如果n的任意一个后继结点是目标节点,则找到一个解答,成功退出,否则转(2)。

深度优先实现过程

(1)把起始节点S放入未扩展节点OPEN表中。如果此节点为一目标节点,则得一个解;

(2)如果OPEN为一空表,则失败退出;

(3)把第一个节点从OPEN表移到CLOSED表;

(4)如果节点n的深度等于最大深度,则转向(2);

(5)扩展节点n,产生其全部后裔,并把它们放入OPEN表的前头。如果没有后裔,则转向(2);

(6)如果后继结点中有任一个目标节点,则得到一个解,成功退出,否则转向(2)。

三、所用仪器、材料(设备名称、型号、规格等或使用软件)

1台PC及VISUAL C++6.0软件

四、实验方法、步骤(或:程序代码或操作过程)

1、先创建项目,新建Source File文件:main.cpp。

#include

#include "Node.h"

#include "Queue.h"

#include "Search.h"

#include "Tree.h"

void CreateNode1(std::vector& s) {

s.push_back(2);

s.push_back(8);

s.push_back(3);

s.push_back(1);

s.push_back(0);

s.push_back(4);

s.push_back(7);

s.push_back(6);

s.push_back(5);

}

void CreateNode4(std::vector& d) {

d.push_back(2);

d.push_back(8);

d.push_back(3);

d.push_back(1);

d.push_back(6);

d.push_back(4);

d.push_back(7);

d.push_back(0);

d.push_back(5);

}

void CreateNode8(std::vector& d) {

d.push_back(0);

d.push_back(2);

d.push_back(3);

d.push_back(1);

d.push_back(8);

d.push_back(4);

d.push_back(7);

d.push_back(6);

d.push_back(5);

}

void CreateNode20(std::vector& d) {

d.push_back(2);

d.push_back(0);

d.push_back(8);

d.push_back(1);

d.push_back(4);

d.push_back(3);

d.push_back(7);

d.push_back(6);

d.push_back(5);

}

void CreateNode27(std::vector& d) {

d.push_back(1);

d.push_back(2);

d.push_back(3);

d.push_back(8);

d.push_back(0);

d.push_back(4);

d.push_back(7);

d.push_back(6);

d.push_back(5);

}

void CreateNode_test1(std::vector& d) {

d.push_back(7);

d.push_back(6);

d.push_back(5);

d.push_back(4);

d.push_back(0);

d.push_back(1);

d.push_back(3);

d.push_back(8);

d.push_back(2);

}

void test_expand()

{

std::vector s;

CreateNode1(s);

std::vector d;

CreateNode4(d);

Node source(s);

Node dest(d);

source.Display();

Search search(&source);

std::cout << source.Expand(dest, search); }

void test_search()

{

std::vector s;

CreateNode1(s);

std::vector d;

CreateNode4(d);

Node source(s);

Node dest(d);

source.Display();

dest.Display();

Search search(&source);

search.Find( & dest);

search.DisplayRoute();

}

void test_search2level()

{

std::vector s;

CreateNode1(s);

std::vector d;

CreateNode8(d);

Node source(s);

Node dest(d);

source.Display();

dest.Display();

Search search(&source);

search.Find( & dest);

search.DisplayRoute();

}

八数码问题求解--实验报告讲解

实验报告 一、实验问题 八数码问题求解 二、实验软件 VC6.0 编程语言或其它编程语言 三、实验目的 1. 熟悉人工智能系统中的问题求解过程; 2. 熟悉状态空间的盲目搜索和启发式搜索算法的应用; 3. 熟悉对八数码问题的建模、求解及编程语言的应用。 四、实验数据及步骤 (一、)实验内容 八数码问题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态。 2 8 3 1 2 3 1 4 8 4 7 6 5 7 6 5 (a) 初始状态(b) 目标状态 图1 八数码问题示意图 (二、)基本数据结构分析和实现 1.结点状态 我采用了struct Node数据类型 typedef struct _Node{

int digit[ROW][COL]; int dist; // distance between one state and the destination一 个表和目的表的距离 int dep; // the depth of node深度 // So the comment function = dist + dep.估价函数值 int index; // point to the location of parent父节点的位置 } Node; 2.发生器函数 定义的发生器函数由以下的四种操作组成: (1)将当前状态的空格上移 Node node_up; Assign(node_up, index);//向上扩展的节点 int dist_up = MAXDISTANCE; (2)将当前状态的空格下移 Node node_down; Assign(node_down, index);//向下扩展的节点 int dist_down = MAXDISTANCE; (3)将当前状态的空格左移 Node node_left; Assign(node_left, index);//向左扩展的节点 int dist_left = MAXDISTANCE; (4)将当前状态的空格右移 Node node_right; Assign(node_right, index);//向右扩展的节点 int dist_right = MAXDISTANCE; 通过定义结点状态和发生器函数,就解决了8数码问题的隐式图的生成问题。接下来就是搜索了。 3.图的搜索策略 经过分析,8数码问题中可采用的搜速策略共有:1.广度优先搜索、2.深度优先搜索、2.有界深度优先搜索、4.最好优先搜索、5.局部择优搜索,一共五种。其中,广度优先搜索法是可采纳的,有界深度优先搜索法是不完备的,最好优先和局部择优搜索法是启发式搜索法。 实验时,采用了广度(宽度)优先搜索来实现。 (三、)广度(宽度)优先搜索原理 1. 状态空间盲目搜索——宽度优先搜索 其基本思想是,从初始节点开始,向下逐层对节点进形依次扩展,并考察它是否为目标节点,再对下层节点进行扩展(或搜索)之前,必须完成对当层的所有节点的扩展。再搜索过程中,未扩展节点表OPEN中的节点排序准则是:先进入的节点排在前面,后进入的节点排在后面。其搜索过程如图(1)所示。

数值分析上机作业

昆明理工大学工科研究生《数值分析》上机实验 学院:材料科学与工程学院 专业:材料物理与化学 学号:2011230024 姓名: 郑录 任课教师:胡杰

P277-E1 1.已知矩阵A= 10787 7565 86109 75910 ?? ?? ?? ?? ?? ??,B= 23456 44567 03678 00289 00010 ?? ?? ?? ?? ?? ?? ?? ?? ,错误!未找到引用源。 = 11/21/31/41/51/6 1/21/31/41/51/61/7 1/31/41/51/61/71/8 1/41/51/61/71/81/9 1/51/61/71/81/91/10 1/61/71/81/91/101/11?????????????????? (1)用MA TLAB函数“eig”求矩阵全部特征值。 (2)用基本QR算法求全部特征值(可用MA TLAB函数“qr”实现矩阵的QR分解)。解:MA TLAB程序如下: 求矩阵A的特征值: clear; A=[10 7 8 7;7 5 6 5;8 6 10 9;7 5 9 10]; E=eig(A) 输出结果: 求矩阵B的特征值: clear; B=[2 3 4 5 6;4 4 5 6 7;0 3 6 7 8;0 0 2 8 9;0 0 0 1 0]; E=eig(B) 输出结果:

求矩阵错误!未找到引用源。的特征值: clear; 错误!未找到引用源。=[1 1/2 1/3 1/4 1/5 1/6; 1/2 1/3 1/4 1/5 1/6 1/7; 1/3 1/4 1/5 1/6 1/7 1/8; 1/4 1/5 1/6 1/7 1/8 1/9;1/5 1/6 1/7 1/8 1/9 1/10; 1/6 1/7 1/8 1/9 1/10 1/11]; E=eig(错误!未找到引用源。) 输出结果: (2)A= 10 7877565861097 5 9 10 第一步:A0=hess(A);[Q0,R0]=qr(A0);A1=R0*Q0 返回得到: 第二部:[Q1,R1]=qr(A1);A2=R1*Q1

八数码问题人工智能实验报告

基于人工智能的状态空间搜索策略研究 ——八数码问题求解 (一)实验软件 TC2.0 或VC6.0编程语言或其它编程语言 (二)实验目的 1. 熟悉人工智能系统中的问题求解过程; 2. 熟悉状态空间的盲目搜索和启发式搜索算法的应用; 3. 熟悉对八数码问题的建模、求解及编程语言的应用。 (三)需要的预备知识 1. 熟悉TC 2.0或VC6.0 编程语言或者其它编程语言; 2. 熟悉状态空间的宽度优先搜索、深度优先搜索和启发式搜索算法; 3. 熟悉计算机语言对常用数据结构如链表、队列等的描述应用; 4. 熟悉计算机常用人机接口设计。 (四)实验数据及步骤 1. 实验内容 八数码问题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态。 图1 八数码问题示意图 请任选一种盲目搜索算法(深度优先搜索或宽度优先搜索)或任选一种启发式搜索方法(A 算法或A* 算法)编程求解八数码问题(初始状态任选),并对实验结果进行分析,得出合理的结论。 2. 实验步骤 (1)分析算法基本原理和基本流程; 程序采用宽度优先搜索算法,基本流程如下:

(2)确定对问题描述的基本数据结构,如Open表和Closed表等;

(3)编写算符运算、目标比较等函数; (4)编写输入、输出接口; (5)全部模块联调; (6)撰写实验报告。 (五)实验报告要求 所撰写的实验报告必须包含以下内容: 1. 算法基本原理和流程框图; 2. 基本数据结构分析和实现; 3. 编写程序的各个子模块,按模块编写文档,含每个模块的建立时间、功能、输入输出参数意义和与其它模块联系等; 4. 程序运行结果,含使用的搜索算法及搜索路径等; 5. 实验结果分析; 6. 结论; 7. 提供全部源程序及软件的可执行程序。 附:实验报告格式 一、实验问题 二、实验目的 三、实验原理 四、程序框图 五、实验结果及分析 六、结论

A星算法求八数码问题试验报告

人工智能实验报告实验名称:八数码问题 姓名:xx 学号:2012210xx xx计算机学院

2014年1月14日 一.实验目的. 的思想,启发式搜索,来求解在代价最小的情况下将九宫格从一掌握A* 个状态转为另状态的路径。 二.实验内容且要求在有限步的操作内,使其转化为目标状态,给定九宫 格的初始状态,并打印出求解路径。例如(即移动的步数最少)所得到的解是代 价最小解 3 8 2 4 6 1 5 0 7 3 2 8 4 6 1 5 0 7 A*三、算法思想:1、思想:估价值与实际A*算法是一种静态路网中求 解最短路最有效的直接搜索方法。值越接近,估价函数取得就越好、原理:2 f(n)=g(n)+h(n), 估价函数公式表示为:是在状态空g(n) 是从初始点经由节点n到目标点的估价函数,其中 f(n) 到目标节点最佳路径的估计nh(n) 是从间中从初始节点到n节点的实际代价,h(n)的选取:代价。保证找到最短路径(最优解的)条件,关键在于估价函数到目标节点的距离实际值,这种情况下,搜索的点数多,搜索估价值h(n)<= n等于h(n)范围大,效率低。但能得到最优解。并且如果h(n)=d(n),即距离估计如

果估那么搜索将严格沿着最短路径进行此时的搜索效率是最高的。最短距离, ,搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。价值>实际值 四、算法流程:

1、使用了CreateChild()函数,求得了任意未拓展九宫格的扩展结点,便于拓展子空间,搜索所有情况。 关键代码: bool CreateChild(NOExtend ns[],NOExtend ne){

昆明理工大学—数值分析各年考试题及答案教案资料

昆明理工大学—数值分析各年考试题及答 案

昆明理工大学数值分析考试题 (07) 一.填空(每空3分,共30分) 1.设A 0.231 x =是真值 0.229 T x =的近似值,则 A x 有 位有效数字。 2.若74()631f x x x x =+++,则017[2,2,...2]f = ,018[2,2,...2]f = 。 3.A=1031????-?? ,则1A = ;A ∞= ;2A = 2()cond A = 。 4.求方程()x f x =根的牛顿迭代格式是 。 5.设105%x =± ,则求函数()f x = 。 6.A=2101202a a ?? ? ? ??? ,为使其可分解为T L L g (L 为下三角阵,主对角线元素>0), a 的取值范围应为 。 7.用最小二乘法拟合三点A(0,1),B(1,3),C(2,2)的直线是 。 (注意:以上填空题答案标明题号答在答题纸上,答在试卷上的不给予评分。) 二.推导与计算 (一)对下表构造f(x)的不超过3次的插值多项式,并建立插值误差公式。(12分)

(二)已知()x x =Φ和()x 'Φ满足∣()x 'Φ-3∣<1。请利用()x Φ构造一个收敛的简单迭代函数()x ψ,使1(),0,1,......k k x x k +=ψ=收敛。(8分) (三)利用复化梯形公式计算2 1 0x I e dx -=?,使其误差限为60.510-?,应将区间 [0,1] 等份。 (8分) (四)设A= 1001005a b b a ?? ???? ???? ,detA ≠0,推导用a ,b 表示解方程组AX=f 的Seidel(G-S) 迭代法收敛的充分必要条件。(10分) (五)确定节点及系数,建立如下 GAUSS 型求积公式 1 11220 ()()A f x A f x ≈+? 。(10分) (六)对微分方程初值问题'00(,) ()y f x y y x y ?=?=? (1)用数值积分法推导如下数值算法:1111(4)3 n n n n n h y y f f f +-+-=+++, 其中(,)i i i f f x y =,(1,,1)i n n n =-+。(8分) (2)试构造形如 1011011(),n n n n n y a y a y h b f b f +--=+++ 的线形二步显格式差 分格式,其中111(,),(,)n n n n n n f f x y f f x y ---==。试确定系数 0101,,,a a b b ,使差分格式的阶尽可能高,写出其局部截断误差主项,并 指明方法是多少阶。(14分)

八数码问题C语言A星算法详细实验报告含代码

一、实验内容和要求 八数码问题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态。 例如: [ (a) 初始状态 (b) 目标状态 图1 八数码问题示意图 请任选一种盲目搜索算法(广度优先搜索或深度优先搜索)或任选一种启发式搜索方法(全局择优搜索,加权状态图搜索,A 算法或 A* 算法)编程求解八数码问题(初始状态任选)。选择一个初始状态,画出搜索树,填写相应的OPEN 表和CLOSED表,给出解路径,对实验结果进行分析总结,得出结论。 二、实验目的 1. 熟悉人工智能系统中的问题求解过程; 2. 熟悉状态空间的盲目搜索和启发式搜索算法的应用; % 3. 熟悉对八数码问题的建模、求解及编程语言的应用。 三、实验算法 A*算法是一种常用的启发式搜索算法。 在A*算法中,一个结点位置的好坏用估价函数来对它进行评估。A*算法的估价函数可表示为: f'(n) = g'(n) + h'(n) 这里,f'(n)是估价函数,g'(n)是起点到终点的最短路径值(也称为最小耗费或最小代价),h'(n)是n到目标的最短路经的启发值。由于这个f'(n)其实是无法预先知道的,所以实际上使用的是下面的估价函数: f(n) = g(n) + h(n) 其中g(n)是从初始结点到节点n的实际代价,h(n)是从结点n到目标结点的最佳路径的估计代价。在这里主要是h(n)体现了搜索的启发信息,因为g(n)是已

知的。用f(n)作为f'(n)的近似,也就是用g(n)代替g'(n),h(n)代替h'(n)。这样必须满足两个条件:(1)g(n)>=g'(n)(大多数情况下都是满足的,可以不用考虑),且f必须保持单调递增。(2)h必须小于等于实际的从当前节点到达目标节点的最小耗费h(n)<=h'(n)。第二点特别的重要。可以证明应用这样的估价函数是可以找到最短路径的。 *算法的步骤 A*算法基本上与广度优先算法相同,但是在扩展出一个结点后,要计算它的估价函数,并根据估价函数对待扩展的结点排序,从而保证每次扩展的结点都是估价函数最小的结点。 A*算法的步骤如下: & 1)建立一个队列,计算初始结点的估价函数f,并将初始结点入队,设置队列头和尾指针。 2)取出队列头(队列头指针所指)的结点,如果该结点是目标结点,则输出路径,程序结束。否则对结点进行扩展。 3)检查扩展出的新结点是否与队列中的结点重复,若与不能再扩展的结点重复(位于队列头指针之前),则将它抛弃;若新结点与待扩展的结点重复(位于队列头指针之后),则比较两个结点的估价函数中g的大小,保留较小g值的结点。跳至第五步。 4)如果扩展出的新结点与队列中的结点不重复,则按照它的估价函数f大小将它插入队列中的头结点后待扩展结点的适当位置,使它们按从小到大的顺序排列,最后更新队列尾指针。 5)如果队列头的结点还可以扩展,直接返回第二步。否则将队列头指针指向下一结点,再返回第二步。 四、程序框图

八数码实验报告人工智能课设报告

学生实验报告 实验课名称:人工智能 实验名称: 八数码 专业名称:计算机科学与技术 班级: 学号: 学生姓名: 教师姓名: 2010 年10 月20日 一.实验内容 用OPEN表和CLOSED表解决搜索问题。 二.实验题目 采用启发式算法(如A*算法)求解八数码问题。 三.实验要求 1.必须使用OPEN表和CLOSED表。 2.明确给出问题描述。系统初始状态。目标状态和启发式函数。 3.除了初始状态以外,至少搜索四层。 4.给出解路径(解图)。 四.实验过程 ①问题:初始状态到目标状态是否可解如何判断? 答:实验过程自己给出的初始状态使用A*算法求解,并不是所有的初始状态都可解到达目标状态。因为八数码问题其实是0~9的一个排列,而排列有奇排列和偶排列,从奇排列不能转化为偶排列或者相反。例如:函数f(s)表示s前比s 小的数字的数目(s 则当f(a8)+f(a7)+……+f(a1)为偶数时才能重排成,所以嘛,上面那个有解的. ②问题描述: 在3X3的九宫格棋盘上,摆有8个将牌,每一个将牌都刻有1~8数码中的某一个数码。棋盘中留有一个空格,允许周围的某一个将牌向空格移动,这样通过移动将牌就可以不断地改变将牌的布局。这种游戏的求解的问题是:给定一种处

世的将牌布局或结构和一个目标的布局,问如何移动将牌,实现从从初始状态到目标状态的转变。 下面给出初始状态和目标状态: 初始状态:Array 目标状态: 评价函数f(n)形式为:f(n)=g(n)+h(n),其中g(n)是节点所处的深度, h(n)是启发式函数,这里启发式函数h(n)表示“不在位”的将牌个数,这时f(n) 注意:移动规则为左-→上→右→下。 ③搜索过程: 因此可得解路径:S(4)→B(4)→D(5)→E(5)→I(5)→K(5)→L(5). ④得到OPEN表和CLOSED表 OPEN表

计算数学排名

070102 计算数学 计算数学也叫做数值计算方法或数值分析。主要内容包括代数方程、线性代数方程组、微分方程的数值数值逼近问题,矩阵特征值的求法,最优化计算问题,概率统计计算问题等等,还包括解的存在性、唯一性差分析等理论问题。我们知道五次及五次以上的代数方程不存在求根公式,因此,要求出五次以上的高次代一般只能求它的近似解,求近似解的方法就是数值分析的方法。对于一般的超越方程,如对数方程、三角方采用数值分析的办法。怎样找出比较简洁、误差比较小、花费时间比较少的计算方法是数值分析的主要课题的办法中,常用的办法之一是迭代法,也叫做逐次逼近法。迭代法的计算是比较简单的,是比较容易进行的以用来求解线性方程组的解。求方程组的近似解也要选择适当的迭代公式,使得收敛速度快,近似误差小。 在线性代数方程组的解法中,常用的有塞德尔迭代法、共轭斜量法、超松弛迭代法等等。此外,一些比消去法,如高斯法、追赶法等等,在利用计算机的条件下也可以得到广泛的应用。在计算方法中,数值逼近本方法。数值逼近也叫近似代替,就是用简单的函数去代替比较复杂的函数,或者代替不能用解析表达式表值逼近的基本方法是插值法。 初等数学里的三角函数表,对数表中的修正值,就是根据插值法制成的。在遇到求微分和积分的时候,的函数去近似代替所给的函数,以便容易求到和求积分,也是计算方法的一个主要内容。微分方程的数值解法。常微分方程的数值解法由欧拉法、预测校正法等。偏微分方程的初值问题或边值问题,目前常用的是有限元素法等。有限差分法的基本思想是用离散的、只含有限个未知数的差分方程去代替连续变量的微分方程求出差分方程的解法作为求偏微分方程的近似解。有限元素法是近代才发展起来的,它是以变分原理和剖分的方法。在解决椭圆形方程边值问题上得到了广泛的应用。目前,有许多人正在研究用有限元素法来解双曲方程。计算数学的内容十分丰富,它在科学技术中正发挥着越来越大的作用。 排名学校名称等级 1 北京大学A+ 2 浙江大学 A+ 3 吉林大学A+ 4 大连理工大学A+ 5 西安交通大学A 北京大学:http:https://www.docsj.com/doc/be7069235.html,/NewsSpecialDetailsInfo.aspx?SID=4 浙江大学:http:https://www.docsj.com/doc/be7069235.html,/NewsSpecialDetailsInfo.aspx?SID=21847 吉林大学:http:https://www.docsj.com/doc/be7069235.html,/NewsSpecialDetailsInfo.aspx?SID=5506 大连理工大学:http:https://www.docsj.com/doc/be7069235.html,/NewsSpecialDetailsInfo.aspx?SID=4388 西安交通大学:http:https://www.docsj.com/doc/be7069235.html,/NewsSpecialDetailsInfo.aspx?SID=18285

八数码问题C语言A星算法详细实验报告含代码

八数码问题C语言A星算法详细实验报告含代 码 Document serial number【UU89WT-UU98YT-UU8CB-UUUT-UUT108】

一、实验内容和要求 八数码问题:在3×3的方格棋盘上,摆放着1到8这八个数码,有1个方格是空的,其初始状态如图1所示,要求对空格执行空格左移、空格右移、空格上移和空格下移这四个操作使得棋盘从初始状态到目标状态。 例如: (a) 初始状态 (b) 目标状态 图1 八数码问题示意图 请任选一种盲目搜索算法(广度优先搜索或深度优先搜索)或任选一种启发式搜索方法(全局择优搜索,加权状态图搜索,A 算法或 A* 算法)编程求解八数码问题(初始状态任选)。选择一个初始状态,画出搜索树,填写相应的OPEN表和CLOSED表,给出解路径,对实验结果进行分析总结,得出结论。 二、实验目的 1. 熟悉人工智能系统中的问题求解过程; 2. 熟悉状态空间的盲目搜索和启发式搜索算法的应用; 3. 熟悉对八数码问题的建模、求解及编程语言的应用。 三、实验算法 A*算法是一种常用的启发式搜索算法。 在A*算法中,一个结点位置的好坏用估价函数来对它进行评估。A*算法的估价函数可表示为: f'(n) = g'(n) + h'(n)

这里,f'(n)是估价函数,g'(n)是起点到终点的最短路径值(也称为最小耗费或最小代价),h'(n)是n到目标的最短路经的启发值。由于这个f'(n)其实是无法预先知道的,所以实际上使用的是下面的估价函数: f(n) = g(n) + h(n) 其中g(n)是从初始结点到节点n的实际代价,h(n)是从结点n到目标结点的最佳路径的估计代价。在这里主要是h(n)体现了搜索的启发信息,因为g(n)是已知的。用f(n)作为f'(n)的近似,也就是用g(n)代替 g'(n),h(n)代替h'(n)。这样必须满足两个条件:(1)g(n)>=g'(n)(大多数情况下都是满足的,可以不用考虑),且f必须保持单调递增。(2)h必须小于等于实际的从当前节点到达目标节点的最小耗费 h(n)<=h'(n)。第二点特别的重要。可以证明应用这样的估价函数是可以找到最短路径的。 *算法的步骤 A*算法基本上与广度优先算法相同,但是在扩展出一个结点后,要计算它的估价函数,并根据估价函数对待扩展的结点排序,从而保证每次扩展的结点都是估价函数最小的结点。 A*算法的步骤如下: 1)建立一个队列,计算初始结点的估价函数f,并将初始结点入队,设置队列头和尾指针。

人工智能 八数码实验

人工智能作业八数码问题

一、题目 八数码问题: 初始状态图:目标状态图: 二、算符与状态空间 算符:左、上、右、下 状态空间: 状态:A=(X0,X1,X2,X3,X4,X5,X6,X7,X8) 初始状态:S0=(0,4,1,5,2,8,3,6,7); 目标状态:Sg=(0,1,7,5,2,8,3,6,4)。

三、搜索树 22 求解: 四、Open 表,Closed 表 Open 表: Closed 表:

五、程序代码 /* 3_13.pro eight puzzle */ trace DOMAINS state=st(in,in,in,in,in,in,in,in,in) in=integer DATABASE-mydatabase open(state,integer) closed(integer,state,integer) res(state) mark(state) fail_ PREDICATES solve search(state,state) result searching step4(integer,state) step56(integer,state) equal(state,state) repeat resulting(integer) rule(state,state) GOAL solve. CLAUSES solve:-search(st(0,4,1,5,2,8,3,6,7),st(0,1,7,5,2,8,3,6,4)),result. search(Begin,End):-retractall(_,mydatabase), assert(closed(0,Begin,0)),assert(open(Begin,0)),

昆明理工大学—数值分析各年考试题及答案

昆明理工大学数值分析考试题 (07) 一.填空(每空3分,共30分) 1. 设A 0.231x =是真值0.229T x =的近似值,则A x 有 位有效数字。 2. 若74()631f x x x x =+++,则017[2,2,...2]f = ,018[2,2,...2]f = 。 3. A=1031?? ? ?-?? ,则1 A = ; A ∞ = ; 2 A = 2()cond A = 。 4. 求方程()x f x =根的牛顿迭代格式是 。 5.设105%x =± ,则求函数()f x =的相对误差限为 。 6.A=2101202a a ?? ? ? ??? ,为使其可分解为T L L (L 为下三角阵,主对角线元素>0),a 的取值范 围应为 。 7.用最小二乘法拟合三点A(0,1),B(1,3),C(2,2)的直线是 。 (注意:以上填空题答案标明题号答在答题纸上,答在试卷上的不给予评分。) 二.推导与计算 (一)对下表构造f(x)的不超过3次的插值多项式,并建立插值误差公式。(12分) (二)已知()x x =Φ和()x 'Φ满足∣()x 'Φ-3∣<1。请利用()x Φ构造一个收敛的简单迭代函数()x ψ,使1(),0,1,......k k x x k +=ψ=收敛。(8分)

(三)利用复化梯形公式计算2 1 x I e dx -=?,使其误差限为60.510-?,应将区间[0,1] 等份。(8分) (四)设A= 1001005a b b a ?????????? ,detA ≠0,推导用a ,b 表示解方程组AX=f 的Seidel(G-S) 迭代法收敛的充分必要条件。(10分) (五)确定节点及系数,建立如下 GAUSS 型求积公式 1 11220 ()()dx A f x A f x ≈+? 。(10分) (六)对微分方程初值问题'00(,) ()y f x y y x y ?=?=? (1) 用数值积分法推导如下数值算法: 1111(4)3 n n n n n h y y f f f +-+-=+ ++,其中(,)i i i f f x y =,(1,,1)i n n n =-+。(8分) (2) 试构造形如 1011011(),n n n n n y a y a y h b f b f +--=+++ 的线形二步显格式差分格式,其中111(,),(,)n n n n n n f f x y f f x y ---==。试确定系数0101,,,a a b b ,使 差分格式的阶尽可能高,写出其局部截断误差主项,并指明方法是多少阶。(14分) (考试时间2小时30分钟)

A星算法求八数码问题实验报告

人工智能实验报告 实验名称:八数码问题 姓名:xx 学号:2012210xx xx计算机学院 2014年1月14日

一.实验目的 掌握A*的思想,启发式搜索,来求解在代价最小的情况下将九宫格从一个状态转为另状态的路径。 二.实验内容 给定九宫格的初始状态,要求在有限步的操作内,使其转化为目标状态,且所得到的解是代价最小解(即移动的步数最少)并打印出求解路径。例如 2 8 3 1 6 4 7 0 5 2 8 3 1 6 4 7 0 5 三、A*算法思想: 1、思想: A*算法是一种静态路网中求解最短路最有效的直接搜索方法。估价值与实际值越接近,估价函数取得就越好 2、原理: 估价函数公式表示为: f(n)=g(n)+h(n), 其中 f(n) 是从初始点经由节点n到目标点的估价函数,g(n) 是在状态空间中从初始节点到n节点的实际代价,h(n) 是从n到目标节点最佳路径的估计代价。保证找到最短路径(最优解的)条件,关键在于估价函数h(n)的选取:估价值h(n)<= n到目标节点的距离实际值,这种情况下,搜索的点数多,搜索范围大,效率低。但能得到最优解。并且如果h(n)=d(n),即距离估计h(n)等于最短距离,那么搜索将严格沿着最短路径进行此时的搜索效率是最高的。如果估价值>实际值,搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。

四、算法流程: 是 是,输出路径 否,生成n 的所有子状态 Heuristic_Search(启发式搜索) While (未拓展表不为空?) 从未拓展表中删除第一个状态n N 为目标状态? Case:此子状态 不在拓展表和 未拓展表中 Case:此子状态在未拓展表中 Case:此子状态在拓展表 计算该子状态的估价函数值; 记录比已有的路径更短 的路径 记录比已有的路径更短的路径 返回

八数码问题实验报告讲解

《八数码问题》实验报告 一、实验目的: 熟练掌握启发式搜索A *算法。 二、实验内容: 使用启发式搜索算法求解8数码问题。编制程序实现求解8数码问题A *算法,采用估价函数 ()()()()w n f n d n p n ??=+??? , 其中:()d n 是搜索树中结点n 的深度;()w n 为结点n 的数据库中错放的棋子个数;()p n 为结点n 的数据库中每个棋子与其目标位置之间的距离总和。 三、实验原理: 1. 问题描述: 八数码问题也称为九宫问题。在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格(以数字0来表示),与空格相邻的棋子可以移到空格中。 要求解决的问题是:给出一个初始状态和一个目标状态,找出一种从初始转变成目标状态的移动棋子步数最少的移动步骤。 所谓问题的一个状态就是棋子在棋盘上的一种摆法。解八数码问题实际上就是找出从初始状态到达目标状态所经过的一系列中间过渡状态。 2. 原理描述: 启发式搜索 (1)原理 启发式搜索就是在状态空间中的搜索对每一个搜索的位置进行评估,得到最好的位置,再从这个位置进行搜索直到目标。这样可以省略大量无谓的搜索路径,提高了效率。在启发式搜索中,对位置的估价是十分重要的。采用了不同的估价可以有不同的效果。 (2)估价函数

计算一个节点的估价函数,可以分成两个部分: 1、 已经付出的代价(起始节点到当前节点); 2、 将要付出的代价(当前节点到目标节点)。 节点n 的估价函数)(n f 定义为从初始节点、经过n 、到达目标节点的路径的最小代价 的估计值,即)(* n f = )(* n g + )(* n h 。 )(*n g 是从初始节点到达当前节点n 的实际代价; )(*n h 是从节点n 到目标节点的最佳路径的估计代价。 )(*n g 所占的比重越大,越趋向于宽度优先或等代价搜索;反之,)(*n h 的比重越大, 表示启发性能就越强。 (3)算法描述: ① 把起始节点S 放到OPEN 表中,并计算节点S 的)(S f ; ② 如果OPEN 是空表,则失败退出,无解; ③ 从OPEN 表中选择一个f 值最小的节点i 。如果有几个节点值相同,当其中有一个 为目标节点时,则选择此目标节点;否则就选择其中任一个节点作为节点i ; ④ 把节点i 从 OPEN 表中移出,并把它放入 CLOSED 的已扩展节点表中; ⑤ 如果i 是个目标节点,则成功退出,求得一个解; ⑥ 扩展节点i ,生成其全部后继节点。对于i 的每一个后继节点j : 计算)(j f ;如果j 既不在OPEN 表中,又不在CLOCED 表中,则用估价函数f 把 它添入OPEN 表中。从j 加一指向其父节点i 的指针,以便一旦找到目标节点时记住一个解答路径;如果j 已在OPEN 表或CLOSED 表中,则比较刚刚对j 计算过的f 和前面计算过的该节点在表中的f 值。如果新的f 较小,则 (I)以此新值取代旧值。 (II)从j 指向i ,而不是指向他的父节点。 (III)如果节点j 在CLOSED 表中,则把它移回OPEN 表中。 ⑦ 转向②,即GOTO ②。 (3)算法流程图:

研究生数值分析试题

昆明理工大学2010级硕士研究生考试试卷 (注:考试时间150分钟;所有答案,包括填空题答案一律答在答题纸上,否则不予记分。) 一、 填空(每空2分,共24分) 1.近似数490.00的有效数字有 位,其相对误差限为 。 2.设7 4 ()431f x x x x =+++,则017[2,2,......2]f = ,018 [2,2,......2]f = 。 3.设4()2,[1,1]f x x x =∈-,()f x 的三次最佳一致逼近多项式为 。 4.1234A ??=??-??,1A = ,A ∞= ,2A = 。 5.210121012A -????=-????-?? ,其条件数2()Cond A = 。 6.2101202A a a ????=?????? ,为使分解T A L L =?成立(L 是对角线元素为正的下三角阵),a 的取 值范围应是 。 7.给定方程组121 122 ,x ax b a ax x b -=?? -+=?为实数。当a 满足 且02ω 时,SOR 迭代法收敛。 8.对于初值问题/ 2 100()2,(0)1y y x x y =--+=,要使用欧拉法求解的数值计算稳定,应限定步长h 的范围是 。 二、 推导计算 (15分)

(小数点后至少保留5位)。(15分) 3.确定高斯型求积公式 01 1010 ()()(),(0,1)f x d x A f x A f x x x ≈+ ∈? 的节点01,x x 及积分系数01,A A 。(15分) 三、 证明 1. 在线性方程组AX b =中,111a a A a a a a ?? ??=?????? 。证明当112a - 时高斯-塞德尔法 收敛,而雅可比法只在11 22 a - 时才收敛。 (10分) 2. 给定初值02 0, x a ≠以及迭代公式 1(2) ,(0,1,2...., 0) k k k x x a x k a +=-=≠ 证明该迭代公式是二阶收敛的。(7分) 3. 试证明线性二步法 212(1)[(3)(31)]4 n n n n n h y b y by b f b f ++++--=+++ 当1b ≠-时,方法是二阶,当1b =-时,方法是三阶的。(14分)

人工智能试验-八数码难题

昆明理工大学信息工程与自动化学院学生实验报告 (2012 —2013 学年第 1 学期) 课程名称:人工智能开课实验室:信自楼442 2012 年10月 24日 一、上机目的及内容 1.上机内容 用确定性推理算法求解教材65-66页介绍的八数码难题。 2.上机目的 (1)复习程序设计和数据结构课程的相关知识,实现课程间的平滑过渡; (2)掌握并实现在小规模状态空间中进行图搜索的方法; (3)理解并掌握图搜索的技术要点。 二、实验原理及基本技术路线图(方框原理图或程序流程图) (1)设计并实现程序,求解出正确的解答路径; (2)对所设计的算法采用大O符号进行时间复杂性和空间复杂性分析; (3)对一般图搜索的技术要点和技术难点进行评述性分析。 问题描述: 在3×3组成的九宫格棋盘上,摆有八个将牌,每一个将牌都刻有1-8八个数码中的某一个数码。棋盘中留有一个空格,允许其周围的某一个将牌向空格移动,这样通过移动将牌就可以 不断改变将牌的布局。这种游戏求解的问题是:给定一种初始的将牌布局或结构(称初始状 态)和一个目标的布局(称目标状态),问如何移动将牌,实现从初始状态到目标状态的转变。 初始状态:8个数字将牌和空格在九宫格棋盘上的所有格局组成了问题的状态空间。其中,状态空间中的任一种状态都可以作为初始状态。 后继函数: 通过移动空格(上、下、左、右)和周围的任一棋子一次,到达新的合法状态。 目标测试: 比较当前状态和目标状态的格局是否一致。 路径消耗: 每一步的耗散值为1,因此整个路径的耗散值是从起始状态到目标状态的棋子移动的总步数。

三、所用仪器、材料(设备名称、型号、规格等或使用软件) 1台PC及VISUAL C++6.0软件 四、实验方法、步骤(或:程序代码或操作过程) 数据结构 static int target[9]={1,2,3,8,0,4,7,6,5}; 全局静态变量,表示目标状态class eight_num { private: int num[9]; 定义八数码的初始状态 int not_in_position_num; 定义不在正确位置八数码的个数 int deapth; 定义了搜索的深度 int eva_function; 评价函数的值,每次选取最小的进行扩展public:

2019年云南昆明理工大学数值分析考研真题

2019年云南昆明理工大学数值分析考研真题 一、判断题:(10题,每题2分,合计20分) 1. 有一种广为流传的观点认为,现代计算机是无所不能的,数学家们已经摆脱了与问题的数值解有关的麻烦,研究新的求解方法已经不再重要了。 ( ) 2. 问题求解的方法越多,越难从中作出合适的选择。 ( ) 3. 我国南宋数学家秦九韶提出的多项式嵌套算法比西方早500多年,该算法能大大减少运算次数。 ( ) 4. 误差的定量分析是一个困难的问题。 ( ) 5. 无论问题是否病态,只要算法稳定都得到好的近似值。 ( ) 6. 高斯求积公式系数都是正数,故计算总是稳定的。 ( ) 7. 求Ax =b 的最速下降法是收敛最快的方法。 ( ) 8. 非线性方程(或方程组)的解通常不唯一。 ( ) 9. 牛顿法是不动点迭代的一个特例。 ( ) 10. 实矩阵的特征值一定是实的。 ( ) 二、填空题:(10题,每题4分,合计40分) 1. 对于定积分105n n x I dx x = +?,采用递推关系115n n I I n -=-对数值稳定性而言是 。 2. 用二分法求方程()55 4.2720f x x x ≡-+=在区间[1 , 1.3]上的根,要使误差不超过10 - 5,二分次数k 至少为 。 3. 已知方程()x x ?=中的函数()x ?满足()31x ?'-<,利用()x ?递推关系构造一个收敛的简单迭代函数()x φ= ,使迭代格式()1k k x x φ+=(k = 0 , 1 , …)收敛。 4. 设序列{}k x 收敛于*x ,*k k e x x =-,当12 lim 0k k k e c e +→∞=≠时,该序列是 收敛的。

人工智能实验八数码问题的求解策略

人工智能上机实验二八数码问题的求解策略1、广度优先算法程序截图: 2、最佳优先算法程序截图:

(接上图) 3、程序代码: ①广度优先算法: (defun init-search (start goal) (declare (special *open*)) (declare (special *closed*)) (declare (special *moves*)) (declare (special *start*)) (declare (special *goal*)) (let (tuple) (setq tuple (cons start '(nil)) ) (setq *open* (list tuple) ) (setq *closed* nil ) (setq *start* start) (setq *goal* goal) (setq *moves* '(blank-left blank-up blank-right blank-down)) (breadth-first-search))) (defun breadth-first-search () (declare (special *open*)) (declare (special *closed*)) (declare (special *goal*)) (declare (special *moves*)) (let (state tuple children path) (cond ((null *open*) 'FAIL!) (t (setq tuple (car *open*) ) (setq state (car tuple) ) (setq *open* (cdr *open*) ) (setq *closed* (cons tuple *closed*)) (cond ((equal state *goal*) (setq path (get-path-from *goal*)) (setq path (reverse path)) (print-path path)

2012数值分析试卷答案

昆明理工大学2012级硕士研究生试卷 科目: 数值分析 考试时间: 出题教师: 集体 考生姓名: 专业: 学号: 考试要求:考试时间150分钟;填空题答案依顺序依次写在答题纸上,填在试卷卷面上的不予计分;可带计算器。 一、 填空题(每空2分,共40分) 1.设*0.231x =是真值0.228x =的近似值,则*x 有 位有效数字,*x 的相对误差限 为 。 2.设 133)(47+++=x x x x f ,则=]2,,2,2[710 f ,=]2,,2,2[810 f 。 3. 过点)0,2(),0,1(-和)3,1(的二次拉格朗日插值函数为 )(2x L = , 并计 算=)0(2L 。 4.设 32()3245f x x x x =+-+在[]1,1-上的最佳二次逼近多项式为 , 最佳二次平方逼近多项式为 。 5.高斯求积公式 )()()(1101 0x f A x f A dx x f x +≈? 的系数0A = , 1A = ,节点0x = , 1x = 。 6.方程组 b Ax =,,U L D A --=建立迭代公式f Bx x k k +=+)()1(,写出雅可比迭代法和 高斯-赛德尔迭代法的迭代矩阵, =Jacobi B ,=-Seidel Gauss B 。 7.0 0100A ??? =? ???,其条件数2()Cond A = 。 8.设?? ? ???=2113A ,计算矩阵A 的范数,1||||A = , 2||||A = 。

9.求方程 ()x f x =根的牛顿迭代格式是 。 10.对矩阵??? ? ? ??=513252321A 作LU 分解,其L=________________, U= __________________。 二、计算题(每题10分,共50分) 1. 求一个次数不高于4次的多项式P (x ), 使它满足:1)1(,0)0(,0)0('===p p p ,1)1(,'=p ,1)2(=p 并写出其余项表达式(要求有推导过程)。 2. 若用复合梯形公式计算积分 dx e x ? 1 ,问区间[0, 1]应分成多少等分才能使截断误差不超过 5102 1 -?? 若改用复合辛普森公式,要达到同样的精度区间[0, 1]应该分成多少等份? 由下表数据,用复合辛普森公式计算该积分的近似值。 3. 线性方程组b Ax =,其中???? ??????=18.04.08.014.04.04.01A ,T b ]3,2,1[=,(1)建立雅可比迭代法和 高斯-赛德尔迭代法的分量形式。(2)问雅可比迭代法和高斯-赛德尔迭代法都收敛吗 ? 4. 已知如下实验数据4,,1,0),,( =i y x i i , 用最小二乘法求形如x a a y 10+=的经验公式,并 计算最小二乘法的误差。 5. 用改进的欧拉公式(预估-校正方法),解初值问题0)0(,10022=+=y y x dx ,取步长,1.0=h 计算到2.0=x (保留到小数点后四位) 。 三、证明题(共10分) 1. 如果 A 是对称正定矩阵,则A 可唯一地写成T LL A =,其中L 是具有正对角元的下三角 阵。

相关文档
相关文档 最新文档