文档库 最新最全的文档下载
当前位置:文档库 › 人工智能课程设计

人工智能课程设计

人工智能课程设计
人工智能课程设计

滑块问题求解系统

一、设计任务

用智能搜索算法中的盲目搜索和启发式搜索这两类基本方法设计八数码问题的求解系统。所谓八数码问题是指这样一种游戏:将分别标有数字1,2,3,…,8 的八块正方形数码牌任意地放在一块3×3 的数码盘上.放牌时要求不能重叠.于是,在3×3 的数码盘上出现了一个空格. 现在要求按照每次只能将与空格相邻的数码牌与空格交换的原则,将任意摆放的数码盘逐步摆成某种特殊的排列.如下图表示了一个具体的八数码问题求解.

二、设计环境及使用说明

设计环境主要采用VC++开发环境。

三、系统已实现的功能

用广度优先搜索算法和两种A*搜索算法实现八数码问题的求解系统。

四、算法思想及分析

1、广度优先搜索算法

算法思想:

这是一种盲目搜索算法。算法主要思想是从初始结点开始依次沿其上下左右四个方向扩展结点,并逐一检查这些后继结点是否为目标结点,若不等于目标结点则把该后继结点插入到数组末尾。然后取数组中未扩展的第一个结点重复以上操作,直到得到目标结点为止或在限定步数以内未得到解。

数据结构:

算法当中的结点用结构体实现,

typedef struct{

int num[9]; //八个数码用一个一维数组来存储。

char expension; //记录是否可以扩展,Y代表可以扩展,N代表不可以。

char bandirect; //表示不可以执行的操作,'L'代表不能左移,'R'代表不能右

移,'U'代表不能上移,'D'代表不能下移,'C'代表可以任

意移动。

int father; //记录父节点的下标。

}Node;

扩展的结点存储在数组里:

Node node[MAXSIZE]; //将搜索过的状态存储于该数组中。

算法当中遇到的问题和解决方法:

1)如何去表达八个数码的位置和每个结点状态的表示

用一维或二维数组去表示八个数码的位置关系,每个结点包含了一个一维数组

(用来表示八个数码的位置关系),可扩展标记(用来标识一个结点是否被扩

展过,避免重复扩展),限制移动方向的标记(避免一个结点在一个方向的重

复扩展),记录父节点的指针(父节点下标)。

2)如何以最简洁的方式表达一个结点在其四个方向的扩展

设定一个数组用以存储该结点在每个方位是否可扩展。操作一个结点时先根据

空格的位置判断该结点可在哪些方向移动并在数组相应位置1.然后用一个for 循环来解决不同方向移动时的相同操作代码的合并和不同操作代码的拆分处理。

部分关键代码:

int move(int tmp) //将空格进行移动操作。

{

int tempNum;

int i,j;

int dir[4]={0};

for(j=0;j<9;j++) //判断空格的位置。

if(node[tmp].num[j]==0)

break;

//判断有哪几个方向可以移动

//如果空格不在第一列的位置并且该结点可以往左移动则标记此结点可以往左方向移动。以下类似

if (j!=0 && j!=3 && j!=6 && node[tmp].bandirect!='L') dir[0]=1;

if (j!=0 && j!=1 && j!=2 && node[tmp].bandirect!='U') dir[1]=1;

if (j!=2 && j!=5 && j!=8 && node[tmp].bandirect!='R') dir[2]=1;

if (j!=6 && j!=7 && j!=8 && node[tmp].bandirect!='D') dir[3]=1;

//遍历某个结点的四个方向进行扩展后继结点

for(i=0;i<4;i++)

{

if (dir[i])

{

//复制原来的结点,防止被改变

for(int k=0;k<9;k++)

node[temp].num[k]=node[tmp].num[k];

//不同方向移动的不同处理

if(i==0) {//向左移动

tempNum=node[temp].num[j-1];

node[temp].num[j-1]=0;node[n].bandirect='R';

}

else if(i==1) {//向上移动

tempNum=node[temp].num[j-3];

node[temp].num[j-3]=0;node[n].bandirect='D';

}

else if (i==2) {//向右移动

tempNum=node[temp].num[j+1];

node[temp].num[j+1]=0;node[n].bandirect='L';

}

else { //向下移动

tempNum=node[temp].num[j+3];

node[temp].num[j+3]=0; node[n].bandirect='U';

}

//向各方向移动的相同处理

node[temp].num[j]=tempNum;

node[tmp].expension='N';

//存储移动后的结点,从中间结点temp复制

for(int kk=0;kk<9;kk++)

node[n].num[kk]=node[temp].num[kk];

node[n].expension='Y';

node[n].father=temp;

if(same(n)) //判断node[n]是否为最终想得到的状态。

{

printResult();

printf(">>>>>>>>>>>>>搜索成功<<<<<<<<<<<<<<\n");

exit(1);

}

n++;

}

}

return 1;

}

结果图示及分析

2、A*算法

算法思想:

A*算法基本上与广度优先算法相同,但是在扩展出一个结点后,要计算它的估价函数,并根据估价函数对待扩展的结点排序,从而保证每次扩展的结点都是估价函数最小的结点。第一个启发函数定义为“不在位”数码的个数W(n)。显然从当前结点移动到目标结点至少要移动W(n)步才能达到目标,显然有W(n)<=h*(n)。第二个启发函数定义为每个数与其目标位置之间的距离的总和p(n)。同样能断定至少要移动p(n)步才能达到目标,因此有p(n)<=h*(n)。两个算法过程类似,主要是在启发函数的计算过程不一样而已。

搜索过程:(搜索采用广度搜索方式,利用待处理队列辅助,逐层搜索(跳过劣质节点))

1、把初始数码组压入队列;

2、从队列中取出一个数码组节点;

3、扩展子节点,即从上下左右四个方向移动空格,生成相应子节点:

4、对子节点数码组作评估,是否为优越节点,即其评估值是否小于等于其父节点加

一,是则将其压入队,否则抛弃。

5、判断压入队的子节点数码组(优越点)的评估值,为零则表示搜索完成,退出搜

索;

6、跳到步骤(2);

数据结构:

算法当中的结点用结构体实现:

typedef struct node //八数码结构体

{

int num[N][N];//数码组

int evalue;//评估值,差距

int bandirect;//所屏蔽方向,防止往回推到上一状态,1上2下3左4右

struct node *parent;//父节点

}Node;

扩展的结点存储在队列里:Node *que[MAX];//队列,用来存放扩展的结点。

算法当中遇到的问题和解决方法:

1)结点的状态表示

每个结点包含了一个二维数组(表示八个数码的位置关系)、每个结点的评估值、移动方向标记(避免一个结点在各方向的重复扩展)、父节点。

2)如何表达结点在四个方向的扩展

采用switch结构根据空格位置判断可以移动的方位并存储待移动后的位置。用fo r循环遍历一个结点的四个方位。

部分关键代码:

1)第一个估值函数的计算:不在位的数码个数

int Evaluate(Node * The_Node,Node * End_Node)

{

int value=0;//不在位数字的个数

int i,j;

for(i=0;i

{

for(j=0;j

{

if(The_Node->num[i][j]!=End_Node->num[i][j])//遍历数码组比较差距

value++;

}

}

The_Node->evalue=value;

return value

}

2) 第二个估值函数的计算:每一个数码和目标位置之间距离总和

int Evaluate(Node * The_Node,Node * End_Node)

{

int total_value=0;

int value=0;

int i,j;

for(i=0;i

{

for(j=0;j

{

switch(The_Node->num[i][j])

{

//距离计算:用该数码的所处位置与目标结点的横纵坐标绝对值之差

case 1: value=i+j;break;

case 2: value=i+abs(j-1);break;

case 3: value=i+abs(j-2);break;

case 4: value=abs(i-1)+abs(j-2);break;

case 5: value=abs(i-2)+abs(j-2);break;

case 6: value=abs(i-2)+abs(j-1);break;

case 7: value=abs(i-2)+j;break;

case 8: value=abs(i-1)+j;break;

case 0: value=0;break;

};

total_value+=value;//所有距离相加

}

}

The_Node->evalue=total_value;

return total_value;

}

3)搜索过程:

while(rear!=front)//队不空

{ front++;//出队

g1=que[front];

for(i=1;i<=4;i++)//分别从四个方向推导出新子节点

{

Direct=i;

if(Direct==g1->bandirect)//跳过屏蔽方向

continue;

g2=Move(g1,Direct,1);//移动数码

if(g2!=g1)//数码是否可以移动

{

Evaluate(g2,End);//对新节点评估

if(g2->evalue<=g1->evalue+1)//是否为优越节点

{

g2->parent=g1;

switch(Direct)//设置屏蔽方向,防止往回推

{

case 1: g2->bandirect=2;break;

case 2: g2->bandirect=1;break;

case 3: g2->bandirect=4;break;

case 4: g2->bandirect=3;break;

}rear++;

que[rear]=g2;//存储节点到待处理队

if(g2->evalue==0)//为0则,搜索完成

{ g=g2;

i=5;

}

} else {

free(g2);//劣质节点抛弃

g2=NULL;}

}

}

界面图示:

人工智能实验报告大全

人工智能实验报告大 全

人工智能课内实验报告 (8次) 学院:自动化学院 班级:智能1501 姓名:刘少鹏(34) 学号: 06153034 目录 课内实验1:猴子摘香蕉问题的VC编程实现 (1) 课内实验2:编程实现简单动物识别系统的知识表示 (5)

课内实验3:盲目搜索求解8数码问题 (18) 课内实验4:回溯算法求解四皇后问题 (33) 课内实验5:编程实现一字棋游戏 (37) 课内实验6:字句集消解实验 (46) 课内实验7:简单动物识别系统的产生式推理 (66) 课内实验8:编程实现D-S证据推理算法 (78)

人工智能课内实验报告实验1:猴子摘香蕉问题的VC编程实现 学院:自动化学院 班级:智能1501 姓名:刘少鹏(33) 学号: 06153034 日期: 2017-3-8 10:15-12:00

实验1:猴子摘香蕉问题的VC编程实现 一、实验目的 (1)熟悉谓词逻辑表示法; (2)掌握人工智能谓词逻辑中的经典例子——猴子摘香蕉问题的编程实现。 二、编程环境 VC语言 三、问题描述 房子里有一只猴子(即机器人),位于a处。在c处上方的天花板上有一串香蕉,猴子想吃,但摘不到。房间的b处还有一个箱子,如果猴子站到箱子上,就可以摸着天花板。如图1所示,对于上述问题,可以通过谓词逻辑表示法来描述知识。要求通过VC语言编程实现猴子摘香蕉问题的求解过程。 图1 猴子摘香蕉问题

四、源代码 #include unsigned int i; void Monkey_Go_Box(unsigned char x, unsigned char y) { printf("Step %d:monkey从%c走到%c\n", ++i, x, y);//x表示猴子的位置,y为箱子的位置 } void Monkey_Move_Box(char x, char y) { printf("Step %d:monkey把箱子从%c运到%c\n", ++i, x, y);//x表示箱子的位置,y为香蕉的位置 } void Monkey_On_Box() { printf("Step %d:monkey爬上箱子\n", ++i); } void Monkey_Get_Banana() { printf("Step %d:monkey摘到香蕉\n", ++i); } void main() { unsigned char Monkey, Box, Banana; printf("********智能1501班**********\n"); printf("********06153034************\n"); printf("********刘少鹏**************\n"); printf("请用a b c来表示猴子箱子香蕉的位置\n"); printf("Monkey\tbox\tbanana\n"); scanf("%c", &Monkey); getchar(); printf("\t"); scanf("%c", &Box); getchar(); printf("\t\t"); scanf("%c", &Banana); getchar(); printf("\n操作步骤如下\n"); if (Monkey != Box) { Monkey_Go_Box(Monkey, Box); } if (Box != Banana)

人工智能课程设计报告--动物识别系统

计算机科学与技术学院 《人工智能》课程设计报告设计题目:动物识别系统 设计人员:学号: 学号: 学号: 学号: 学号: 学号: 指导教师: 2015年7月

目录 目录 (1) 摘要 (2) Abstract (2) 一、专家系统基本知识 (3) 1.1专家系统实际应用 (3) 1.2专家系统的开发 (3) 二、设计基本思路 (4) 2.1知识库 (4) ....................................................................................................... 错误!未定义书签。 2.1.2 知识库建立 (4) 2.1.3 知识库获取 (5) 2.2 数据库 (6) ....................................................................................................... 错误!未定义书签。 ....................................................................................................... 错误!未定义书签。 三、推理机构 (7) 3.1推理机介绍 (7) 3.1.1 推理机作用原理 (7) ....................................................................................................... 错误!未定义书签。 3.2 正向推理 (7) 3.2.1 正向推理基本思想 (7) 3.2.2 正向推理示意图 (8) 3.2.3 正向推理机所要具有功能 (8) 3.3反向推理 (8) ....................................................................................................... 错误!未定义书签。 3.3.2 反向推理示意图 (8) ....................................................................................................... 错误!未定义书签。 四、实例系统实现 (9)

《人工智能导论》试卷

一、填空: 1.人工智能的研究途径有(1)、(2)和行为模拟。 2.任意列举人工智能的四个应用性领域(3)、(4)、(5)、(6)。 3.人工智能的基本技术包括(7)、(8)、(9)归纳技术、联想技术。 4.谓词逻辑是一种表达能力很强的形式语言,其真值的特点和命题逻辑的区别是 (10)。 5.谓词逻辑中,重言式(tautlogy)的值是(11)。 6.设P是谓词公式,对于P的任何论域,存在P为真的情况,则称P为(12)。 7.在著名的医疗专家系统MYCIN中规定,若证据A的可信度CF(A)=0,则意味 着13 ,CF(A)=-1,则意味着(14),CF(A)=1,则意味着(15)。 8.谓词公式G是不可满足的,当且仅当对所有的解释(16)。 9.谓词公式与其子句集的关系是(17)。 10.利用归结原理证明定理时,若得到的归结式为(18),则结论成立。 11.若C1=┐P∨Q,C2=P∨┐Q,则C1和C2的归结式R(C1,C2)= (19)。 12.若C1=P(x) ∨Q(x),C2=┐P(a) ∨R(y),则C1和C2的归结式R(C1,C2)= (20)。 13.有谓词公式G,置换δ,则G·ε= (21),δ·ε= (22)。 14.有子句集S={P(x),P(y)},其MGU= (23)。 15.在归结原理中,几种常见的归结策略并且具有完备性的是(24),(25),(26)。 16.状态图启发式搜索算法的特点是(27)。 17.广度优先搜索算法中,OPEN表的数据结构实际是一个(28),深度优先搜索算 法中,OPEN表的数据结构实际是一个(29)。 18.产生式系统有三部分组成(30),(31)和推理机。其中推理可分为(32)和 (33)。 19.专家系统的结构包含人机界面、(34),(35),(36),(37)和解 释模块。

人工智能实验报告

《人工智能》课外实践报告 项目名称:剪枝法五子棋 所在班级: 2013级软件工程一班 小组成员:李晓宁、白明辉、刘小晶、袁成飞、程小兰、李喜林 指导教师:薛笑荣 起止时间: 2016-5-10——2016-6-18

项目基本信息 一、系统分析 1.1背景

1.1.1 设计背景 智力小游戏作为人们日常休闲娱乐的工具已经深入人们的生活,五子棋更成为了智力游戏的经典,它是基于AI的αβ剪枝法和极小极大值算法实现的人工智能游戏,让人们能和计算机进行对弈。能使人们在与电脑进行对弈的过程中学习五子棋,陶冶情操。并且推进人们对AI的关注和兴趣。 1.1.2可行性分析 通过研究,本游戏的可行性有以下三方面作保障 (1)技术可行性 本游戏采用Windows xp等等系统作为操作平台,使用人工智能进行算法设计,利用剪枝法进行编写,大大减少了内存容量,而且不用使用数据库,便可操作,方便可行,因此在技术上是可行的。 (2)经济可行性 开发软件:SublimText (3)操作可行性 该游戏运行所需配置低、用户操作界面友好,具有较强的操作可行性。 1.2数据需求 五子棋需要设计如下的数据字段和数据表: 1.2.1 估值函数:

估值函数通常是为了评价棋型的状态,根据实现定义的一个棋局估值表,对双方的棋局形态进行计算,根据得到的估值来判断应该采用的走法。棋局估值表是根据当前的棋局形势,定义一个分值来反映其优势程度,来对整个棋局形势进行评价。本程序采用的估值如下: 状态眠二假活三眠三活二冲四假活三活三活四连五 分值 2 4 5 8 12 15 40 90 200 一般来说,我们采用的是15×15的棋盘,棋盘的每一条线称为一路,包括行、列和斜线,4个方向,其中行列有30路,两条对角线共有58路,整个棋盘的路数为88路。考虑到五子棋必须要五子相连才可以获胜,这样对于斜线,可以减少8路,即有效的棋盘路数为72路。对于每一路来说,第i路的估分为E(i)=Ec(i)-Ep(i),其中Ec(i)为计算机的i路估分,Ep(i)为玩家的i路估分。棋局整个形势的估值情况通过对各路估分的累加进行判断,即估值函数: 72 F(n)= Σ E(i) i=1 1.2.2 极小极大值算法: 极大极小搜索算法就是在博弈树在寻找最优解的一个过程,这主要是一个对各个子结点进行比较取舍的过程,定义一个估值函数F(n)来分别计算各个终结点的分值,通过双方的分值来对棋局形势进行分析判断。以甲乙两人下棋为例,甲为max,乙为min。当甲走棋时,自然在博弈树中寻找最大点的走法,轮到乙时,则寻找最小点的走法,如此反复,这就是一个极大极小搜索过程,以此来寻找对机器的最佳走法。

人工智能课程设计报告-罗马尼亚度假问题

人工智能课程设计报告-罗马尼亚度假 问题 1

2

3 2020年5月29日 课 程 :人工智能课程设计报告 班 级: 姓 名: 学 号: 指导教师:赵曼 11月

人工智能课程设计报告 课程背景 人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,能够设想,未来人工智能带来的科技产品,将会是人类智慧的”容器”。 人工智能是对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。 人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些一般需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种”复杂工作”的理解是不同的。 人工智能是计算机学科的一个分支,二十世纪七十年代以来被称为世界三大尖端技术之一(空间技术、能源技术、人工智能)。也被认为是二十一世纪三大尖端技术(基因工程、纳米科学、人工智能)之一。这是因为近三十年来它获得了迅 速的发展,在很多学科领域都获得了广泛应用,并取得了丰硕的成果,人工智能已逐 - 1 - 2020年5月29日

《人工智能导论》课程研究总结

《人工智能导论》课程研究总结题目:BP神经网络的非线性函数拟合 班级: 姓名: 学号: 年月日

本次作业我负责程序的编写,过程如下 Matlab软件中包含Matlab神经网络工具箱。它是以人工神经网络理论为基础,用Matlab语言构造出了该理论所涉及的公式运算、矩阵操作和方程求解等大部分子程序以用于神经网络的设计和训练。用户只需根据自己的需要调用相关的子程序,即可以完成包括网络结构设计、权值初始化、网络训练及结果输出等在内的一系列工作,免除编写复杂庞大程序的困扰。目前,Matlab神经网络工具包包括的网络有感知器、线性网络、BP神经网络、径向基网络、自组织网络和回归网络等。BP神经网络主要用到newff、sim和train3个神经网络函数,各函数解释如下。 1、newff:BP神经网络参数设置函数 函数功能:构建一个BP神经网络。 函数形式:net = newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF) P:输入数据矩阵。 T:输出数据矩阵。 S:隐含层结点数。 TF:结点传递函数,包括硬限幅传递函数hardlim,对称硬限幅传递函数hardlims,线性传递函数pureline,正切S型传递函数tansig,对数S型传递函数logsig。 BTF:训练函数,包括梯度下降BP算法训练函数traingd,动量反传的梯度下降BP算法训练函数traingdm,动态自适应学习率的梯度下降BP算法训练函数traingda,动量反传和动态自适应学习率的梯度下降BP算法训练函数traingdx,Levenberg_Marquardt的BP算法训练函数trainlm。 BLF:网络学习函数,包括BP学习规格learngd,带动量项的BP学习规则learngdm。 PF:性能分析函数,包括均值绝对误差性能分析函数mae,均方差性能分析函数mse。 IPF:输入处理函数。 OPF:输出处理函数。 DDF:验证数据划分函数。 一般在使用过程中设置前面6个参数,后面4个参数采用系统默认参数。 2、train:BP神经网络训练函数 函数功能:用训练数据训练BP神经网络。 函数形式:[net,tr] = train(NET,X,T,Pi,Ai) NET:待训练网络。

(人工智能)人工智能导论试卷库

(人工智能)人工智能导论 试卷库

人工智能试卷(B) 试题部分: 壹、选择题(15小题,共15分) 1、97年5月,著名的“人机大战”,最终计算机以3.5比2.5的总比分将世界国际象棋棋王卡斯帕罗夫击败,这台计算机被称为() A)深蓝B)IBMC)深思D)蓝天 2、下列不于人工智能系统的知识包含的4个要素中 A)事实B)规则C)控制和元知识D)关系 3、谓词逻辑下,子句,C1=L∨C1‘,C2=?L∨C2‘,若σ是互补文字的(最壹般)合壹置换,则其归结式C=() A)C1’σ∨C2’σB)C1’∨C2’C)C1’σ∧C2’σD)C1’∧C2’ 4、或图通常称为 A)框架网络B)语义图C)博亦图D)状态图 5、不属于人工智能的学派是 A)符号主义B)机会主义C)行为主义D)连接主义。 6、人工智能的含义最早由壹位科学家于1950年提出,且且同时提出壹个机器智能的测试模型,请问这个科学家是 A)明斯基B).扎德C)图林D)冯.诺依曼 7、要想让机器具有智能,必须让机器具有知识。因此,于人工智能中有壹个研究领域,主要研究计算机如何自动获取知识和技能,实现自我完善,这门研究分支学科叫()。 A)专家系统B)机器学习C)神经网络D)模式识别 8、下列哪部分不是专家系统的组成部分() A.)用户B)综合数据库C)推理机D)知识库

9、产生式系统的推理不包括() A)正向推理B)逆向推理C)双向推理D)简单推理 10、C(B|A)表示于规则A->B中,证据A为真的作用下结论B为真的 A)可信度B)信度C)信任增长度D)概率 11、AI的英文缩写是 A)AutomaticIntelligenceB)ArtificalIntelligence C)AutomaticeInformationD)ArtificalInformation 12、反演归结(消解)证明定理时,若当前归结式是()时,则定理得证。 A)永真式B)包孕式(subsumed)C)空子句 13、于公式中?y?xp(x,y)),存于量词是于全称量词的辖域内,我们允许所存于的x可能依赖于y值。令这种依赖关系明显地由函数所定义,它把每个y值映射到存于的那个x。这种函数叫做() A.依赖函数 B.Skolem函数 C.决定函数 D.多元函数 14、子句~P∨Q和P经过消解以后,得到() A.P B.Q C.~P D.P∨Q 15、如果问题存于最优解,则下面几种搜索算法中,()必然能够得到该最优解。

(完整word版)哈工大人工智能导论实验报告

人工智能导论实验报告 学院:计算机科学与技术学院 专业:计算机科学与技术 2016.12.20

目录 人工智能导论实验报告 (1) 一、简介(对该实验背景,方法以及目的的理解) (3) 1. 实验背景 (3) 2. 实验方法 (3) 3. 实验目的 (3) 二、方法(对每个问题的分析及解决问题的方法) (4) Q1: Depth First Search (4) Q2: Breadth First Search (4) Q3: Uniform Cost Search (5) Q4: A* Search (6) Q5: Corners Problem: Representation (6) Q6: Corners Problem: Heuristic (6) Q7: Eating All The Dots: Heuristic (7) Q8: Suboptimal Search (7) 三、实验结果(解决每个问题的结果) (7) Q1: Depth First Search (7) Q2: Breadth First Search (9) Q3: Uniform Cost Search (10) Q4: A* Search (12) Q5: Corners Problem: Representation (13) Q6: Corners Problem: Heuristic (14) Q7: Eating All The Dots: Heuristic (14) Q8: Suboptimal Search (15) 自动评分 (15) 四、总结及讨论(对该实验的总结以及任何该实验的启发) (15)

人工智能期末试题及答案完整版

人工智能期末试题及答案 完整版 Prepared on 21 November 2021

xx学校 2012—2013学年度第二学期期末试卷考试课程:《人工智能》考核类型:考试A卷 考试形式:开卷出卷教师: 考试专业:考试班级: 一单项选择题(每小题2分,共10分) 1.首次提出“人工智能”是在(D )年 2. 人工智能应用研究的两个最重要最广泛领域为:B A.专家系统、自动规划 B. 专家系统、机器学习 C. 机器学习、智能控制 D. 机器学习、自然语言理解 3. 下列不是知识表示法的是 A 。 A:计算机表示法B:“与/或”图表示法 C:状态空间表示法D:产生式规则表示法 4. 下列关于不确定性知识描述错误的是 C 。 A:不确定性知识是不可以精确表示的 B:专家知识通常属于不确定性知识 C:不确定性知识是经过处理过的知识 D:不确定性知识的事实与结论的关系不是简单的“是”或“不是”。 5. 下图是一个迷宫,S0是入口,S g是出口,把入口作为初始节点,出口作为目标节点,通道作为分支,画出从入口S0出发,寻找出口Sg的状态树。根据深度优先搜索方法搜索的路径是 C 。 A:s0-s4-s5-s6-s9-sg B:s0-s4-s1-s2-s3-s6-s9-sg C:s0-s4-s1-s2-s3-s5-s6-s8-s9-sg D:s0-s4-s7-s5-s6-s9-sg 二填空题(每空2分,共20分) 1.目前人工智能的主要学派有三家:符号主义、进化主义和连接主义。 2. 问题的状态空间包含三种说明的集合,初始状态集合S、操作符集合F以及目标状态集合G 。 3、启发式搜索中,利用一些线索来帮助足迹选择搜索方向,这些线索称为启发式(Heuristic)信息。

人工智能实验报告

计算机科学与技术1341901301 敏 实验一:知识表示方法 一、实验目的 状态空间表示法是人工智能领域最基本的知识表示方法之一,也是进一步学习状态空间搜索策略的基础,本实验通过牧师与野人渡河的问题,强化学生对知识表示的了解和应用,为人工智能后续环节的课程奠定基础。 二、问题描述 有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表示目的岸)。 要求:写出算法的设计思想和源程序,并以图形用户界面实现人机交互,进行输入和输出结果,如: Please input n: 2 Please input c: 2 Successed or Failed?: Successed Optimal Procedure: 221->110->211->010->021->000 四、算法描述 (1)算法基本思想的文字描述;

人工智能课程设计报告-n皇后问题解读

人工智能课程设计报告 课班姓学程:人工智能课程设计报告级 : 名: 号: 指导教师:赵曼 2015年11月

人工智能课程设计报告 人工智能课程设计报告 课程背景 人工智能(Artificial Intelligence),英文缩写为AI。它是研究、开发用于模拟、延伸和扩展人的智能的理论、方法、技术及应用系统的一门新的技术科学。人工智能是计算机科学的一个分支,它企图了解智能的实质,并生产出一种新的能以人类智能相似的方式做出反应的智能机器,该领域的研究包括机器人、语言识别、图像识别、自然语言处理和专家系统等。人工智能从诞生以来,理论和技术日益成熟,应用领域也不断扩大,可以设想,未来人工智能带来的科技产品,将会是人类智慧的“容器”。 人工智能是对人的意识、思维的信息过程的模拟。人工智能不是人的智能,但能像人那样思考、也可能超过人的智能。 人工智能是一门极富挑战性的科学,从事这项工作的人必须懂得计算机知识,心理学和哲学。人工智能是包括十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的说来,人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工作。但不同的时代、不同的人对这种“复杂工作”的理解是不同的。 人工智能是计算机学科的一个分支,二十世纪七十年代以来被称为世界三大尖端技术之一(空间技术、能源技术、人工智能)。也被认为是二十一世纪三大尖端技术(基因工程、纳米科学、人工智能)之一。这是因为近三十年来它获得了迅速的发展,在很多学科领域都获得了广泛应用,并取得了丰硕的成果,人工智能已逐步成为一个独立的分支,无论在理论和实践上都已自成一个系统。 人工智能是研究使计算机来模拟人的某些思维过程和智能行为(如学习、推理、思考、规划等)的学科,主要包括计算机实现智能的原理、制造类似于人脑智能的计算机,使计算机能实现更高层次的应用。人工智能将涉及到计算机科学、心理学、哲学和语言学等学科。可以说几乎是自然科学和社会科学的所有学科,其范围已远远超出了计算机科学的范畴,人工智能与思维科学的关系是实践和理论的关系,人工智能是处于思维科学的技术应用层次,是它的一个应用分支。从思维观点看,人工智能不仅限于逻辑思维,要考虑形象思维、灵感思维才能促进人工智能的突破性的发展,数学常被认为是多种学科的基础科学,数学也进入语言、思维领域,人工智能学科也必须借用数学工具,数学不仅在标准逻辑、模糊数学等范围发挥作用,数学进入人工智能学科,它们将互相促进而更快地发展。

三子棋c代码

三子棋问题 一目的 运用所学课程的知识来研究、解决一些具有一定综合性问题的专业课题。通过课程设计提高学生综合运用所学知识来解决实际问题及进行科学实验或技术设计的初步能力。 二需求分析 1、该程序主要为设计简单的三子棋游戏; 2、三子棋问题即在3 * 3的二维数组上下棋,只要有棋子在行、列或对角线连成一线即取得胜利。 3、可实现玩家与电脑对弈。 三概要设计 1、主函数模块 int main() { do{ 开始新的对弈; }while(玩家选择停止游戏); return 0; } 2、调用函数模块 ①int chess(); /*函数功能:开始对弈 函数参数:无 函数返回值:return 0*/ { 初始化棋局; 选择玩家或电脑先行; do{ //开始下棋 输出当前棋局; if(该玩家走棋) { do{

玩家输出走棋位置; 检查走棋位置的合法性; }while(玩家输入合法的位置); } else if(电脑走棋) { 调用函数使电脑走棋 } 判断是否有一方胜出; }while(有一方胜出或平局); printf("最终棋局:\n"); 输出最终棋局; if(平局) 输出平局; } ②int check(char *chess,char sign); /*函数功能:使用了指针,判断位置可行则走棋,不可行则返回值为1 函数参数:使用指针传递棋局,以及欲走棋的位置 函数返回值:0代表可以走棋,1代表不可走棋 */ { 判断走棋位置是否合法; 不合法则返回1; 否则返回0; } ③int judge(char *chess); /*函数功能:判断是否有胜出 函数参数:当前棋局 函数返回值:0代表未有胜出,1代表玩家胜出,2代表电脑胜出*/ { for(行检查) { if(某行三子连线) { if(连线棋子为‘O’) 玩家胜出; else 电脑胜出; } } for(列检查)//思想同上 if(对角三字连线检查)//思想同上

人工智能导论试卷 (2)

课程名称人工智能导论考试日期2007-6-14 考生姓名学号专业或类别 题号一二三四总分累分人 签名题分100 得分 考生注意事项:1、本试卷共8 页,请查看试卷中是否有缺页。 2、考试结束后,考生不得将试卷、答题纸和草稿纸带出考场。 一、填空题(每空1分,共20分) 得分评卷人 1. 人工智能三大学派是符号主义,连接主义,行为主义、和。 2. 在知识表示方法中,与谓词逻辑表示为ISA(LIMING ,MAN)等效的语义网络形式 为。 3.状态空间表示法的两个基本概念是和。状态,操作符 4. 产生式系统由3个部分组成:一个总数据库、一套规则,一个控制策略 、。 5. ANN中文意义是人工神经元网络 。 6. 反向传播(back-propagation,BP)算法过程是从输出节点开始, 将误差信号沿原来的连接通路返回,通过修改各层神经元的连接权值,使误差信号减至最小 ,所以称为“反向传播”。 7. 消解反演证明定理时,若当前归结式是空子句 ,则定理得证。 8. 子句和P经过消解以后,得到 Q 。 9.基于规则的正向演绎系统,其规则形式为,其中前项要满足的条件是。→W或L1∨L2→W,L为单文字

2006~2007学年第2学期考试A卷

13. 设E 1=P(a,v,f(g(y))),E 2 =P(z,f(a),f(u)),则E 1 和E 2 的mgu(最一般合一)为 。 14. 进化策略是在父矢量x i ,i=1,2,……p中,通过加入一个零均方差的高斯随机变量以及预先选择x的标准偏差来产生子代矢量x。 二、选择题(每小题2分,共20分) 得分评卷人 1. 在图搜索中,选择最有希望的节点作为下一个要扩展的节点,这种搜索方法叫做( ) A. 宽度搜索 B. 深度搜索 C. 有序搜索 D. 广义搜索 2. 下列人工神经网络属于反馈网络的是() A. Hopfield网 B. BP网络 C. 多层感知器 D. LVQ网络 3. 使用一组槽来描述事件的发生序列,这种知识表示法叫做( ) A. 语义网络法 B. 过程表示法 C. 剧本表示法 D. 框架表示法 4. 产生式系统的推理不包括( ) A. 正向推理 B. 逆向推理 C. 双向推理 D. 简单推理 5. 启发式搜索是寻求问题()解的一种方法 A. 最优 B. 一般 C. 满意 D. 最坏 6. 语义网络表达知识时,有向弧AKO链、ISA链表达节点知识的() A. 无悖性 B. 可扩充性 C. 继承性 D. 完整性 7. 下面表达式对中()是能够合一的。 A. P(q(f(v)),g(u))和P(x,x) B. P(x,f(x))和P(y,y) C. P(y,y,B)和P(z,x,z) D. P(f(A),x),P(x,A)

人工智能导论1-4章作业

《人工智能导论》作业(1-4章) 1.人工智能有哪几个主要的学派?各学派的基本理论框架和主要研究方向有何不同?2.用谓词逻辑方法表述下面问题积木世界的问题。 (定义谓词、描述状态、定义操作、给出操作序列) 3.请给出下列描述的语义网络表示: 1)11月5日,NBA常规赛火箭主场对阵小牛,火箭107-76大胜小牛。 2)张老师从9月至12月给自动化专业学生教授《自动控制原理》。李老师从10至12月 给计算机专业学生教授《操作系统原理》。 3)树和草都是植物;树和草都有根和叶;水草是草,生活在水中;果树是树,会结果; 苹果树是果树,结苹果。 4.请用相应谓词公式描述下列语句: 1)有的人喜欢足球、有的人喜欢篮球;有的人既喜欢足球又喜欢篮球。 2)喜欢编程的同学都喜欢计算机。 3)不是每个自控系的学生都喜欢编程。 4)有一个裁缝,他给所有不自己做衣服的人做衣服。 5)如果星期六不下雨,汤姆就会去爬山。 5.什么是谓词公式的解释?对于公式?x ?y (P(x)→Q(f(x),y)) D={1,2,3} 分别给出使公式为真和假的一种解释。 6.什么是合一?求出下面公式的最一般合一: P(f(y), y, x) P(x, f(a),z)。 7.把下面谓词公式化为子句集 ?x ?y (P(x,y)∨Q(x,y))→R(x,y)) ?x (P(x) →?y(P(y)∧R(x,y))

?x (P(x)∧?y(P(y) →R(x,y))) 8.证明下面各题中,G是否是F的逻辑结论? F1: ?x (P(x) →?y(Q(y)→L(x,y))) F2: ?x (P(x)∧?y(R(y) →L(x,y))) G: ?x (R(x) →~Q(x)) F1: ?z (~B(z)→?y(D(z,y)∧C(y))) F2: ?x (E(x)∧A(x)∧?y (D(x,y) →E(y))) F3: ?y(E(y) →~B(y)) G: ?z (E(z) ∧C(z)) 9.已知:John, Mike, Sam是高山俱乐部成员。 高山俱乐部成员都是滑雪运动员或登山运动员(也可以都是)。 登山运动员不喜欢雨。 滑雪运动员都喜欢雪。 凡是Mike喜欢的,John就不喜欢。 凡是Mike 不喜欢的,John就喜欢。 Mike喜欢雨和雪。 问:高山俱乐部是否有一个成员,他是登山运动员,但不是滑雪运动员?如果有,他是谁?10.为什么说归结式是其亲本子句的逻辑结论? 11.何为完备的归结策略?有哪些归结策略是完备的? 12.何谓搜索?有哪些常用的搜索方法?盲目搜索与启发式搜索的根本区别是什么?13.用状态空间法表示问题时,什么是问题的解?什么是最优解?在图搜索算法中,OPEN 表和CLOSED表的作用是什么?f(x)有何不同含义? 14.宽度优先搜索和深度优先搜索有何不同?在何种情况下,宽度优先搜索优于深度优先搜索,何种情况反之? 15.什么是启发式搜索,g(x)与h(x)各有什么作用?A*算法的限制条件是什么?

《人工智能导论》课程研究总结

《人工智能导论》课程研究总结 题目:BP神经网络的非线性函数拟合 班级: 姓名: 学号: 年月日 本次作业我负责程序的编写,过程如下 Matlab软件中包含Matlab神经网络工具箱。它是以人工神经网络理论为基础,用Matlab语言构造出了该理论所涉及的公式运算、矩阵操作和方程求解等大部分子程序以用于神经网络的设计和训练。用户只需根据自己的需要调用相关的子程序,即可以完成包括网络结构设计、权值初始化、网络训练及结果输出等在内的一系列工作,免除编写复杂庞大程序的困扰。目前,Matlab神经网络工具包包括的网络有感知器、线性网络、BP神经网络、径向基网络、自组织网络和回归网络等。BP神经网络主要用到newff、sim和train3个神经网络函数,各函数解释如下。 1、newff:BP神经网络参数设置函数 函数功能:构建一个BP神经网络。 函数形式:net = newff(P,T,S,TF,BTF,BLF,PF,IPF,OPF,DDF) P:输入数据矩阵。 T:输出数据矩阵。 S:隐含层结点数。 TF:结点传递函数,包括硬限幅传递函数hardlim,对称硬限幅传递函数hardlims,线性传递函数pureline,正切S型传递函数tansig,对数S型传递函数logsig。 BTF:训练函数,包括梯度下降BP算法训练函数traingd,动量反传的梯度下降BP算法训练函数traingdm,动态自适应学习率的梯度下降BP算法训练函数traingda,动量反传和动态自适应学习率的梯度下降BP算法训练函数traingdx,Levenberg_Marquardt的BP算法训练函数trainlm。 BLF:网络学习函数,包括BP学习规格learngd,带动量项的BP学习规则learngdm。 PF:性能分析函数,包括均值绝对误差性能分析函数mae,均方差性能分析函数mse。IPF:输入处理函数。 OPF:输出处理函数。 DDF:验证数据划分函数。 一般在使用过程中设置前面6个参数,后面4个参数采用系统默认参数。 2、train:BP神经网络训练函数 函数功能:用训练数据训练BP神经网络。 函数形式:[net,tr] = train(NET,X,T,Pi,Ai) NET:待训练网络。 X:输入数据。 T:输出数据。 Pi:初始化输入层条件。 Ai:初始化输出层条件。 net:训练好的网络。 tr:训练过程记录。

《人工智能导论》试卷A(答案)

2006~2007学年第2学期考试A 卷 参考答案 一、1. 符号主义,连接主义,行为主义 3.状态,操作符 4.一套规则,一个控制策略 5.人工神经元网络 6.将误差信号沿原来的连接通路返回,通过修改各层神经元的连接权值,使误差信号减至最小 7.空子句 8.Q 9. L→W 或L1∨L2→W,L 为单文字 10.继承,匹配 11.图灵 12. 13. 14. 零均方差的高斯随机 二、CBCDCCADAB 三、1. (1)自然语言理解 (2)人工神经元网络 数据库智能检索 智能控制 专家咨询系统 智能调度和指挥 定理机器证明 智能决策支持系统 博弈 知识发现和数据发掘 机器人学 分布式人工智能 自动程序设计 组合调度问题 感知问题 2.

3.构成:略 特征:(1)能较好的模拟人的形象思维。 (2)具有大规模并行协同处理能力。 (3)具有较强的学习能力。 (4)具有较强的容错能力和联想能力。 (5)是一个大规模自组织、自适应的非线性动力系统。 4.遗传算法是一种随机搜索算法。该算法将优化问题看作是自然界生物的进化过程。模拟大自然生物进化的遗传规律来达到寻优的目的。 5.设A(x):想出国留学 P(x):欲穷千里目 Q(x):更上一层楼 (1)?x(~A(x)) (2)(?x)(Q(x) P(x)) 四、1. 得到的解路径为:S-B-F-J-T 2.启发式搜索图:

状态空间图:

3.

4.证明: R1:所有不贫穷且聪明的人都快乐:?x(~Poor(x)∧Smart(x)→Happy (x)) R2:那些读书的人是聪明的:?x(read(x)→Smart(x)) R3:约翰能读书且不贫穷:read(John)∧ ~Poor(John) R4:快乐的人过着幸福的生活:?x(Happy(x)→Blest(x)) 结论:约翰过着幸福的生活的否定:~ Blest(John) 将上述谓词公式转化为子句集并进行归结如下: 由R1可得子句: Poor(x)∨~Smart(x)∨Happy(x) 由R2可得子句: ~read(y)∨Smart(y) 由R3可得子句: read(John) ~Poor(John) 由R4可得子句: ~ Happy(z)∨Blest(z) 由结论的否定可得子句: ~ Blest(John) 根据以上6条子句,归结如下: ~ Happy(John)⑤⑥ John/z Poor(John)∨~Smart(John)⑦① John/x ~Smart(John)⑧④ ~ read(John)⑨② John/y □⑩③ 由上可得原命题成立。

人工智能导论实验

人工智能导论 实验报告 姓名:蔡鹏 学号:1130310726 实验一

一、实验内容 有如下序列,试把所有黑色格移到所有白色格的右边,黄色格代表空格,黑色格和白色格可以和距离不超过三的空格交换。 二、实验代码 #include #include #include #define N 10 #define inf 9999 int g=999; void tree_gener(struct node *fn,struct node *root); struct node { char seq[7]; int f,g,n; struct node *sn[N]; }; struct stack { int num; struct node *n[50]; }; void Enstack(struct node *sn,struct stack *S) { S->n[S->num]=sn; S->num++; } struct node *Destack(struct stack *S) { S->num--; return S->n[S->num]; } void find_min_f(struct node *root) { int i; struct node *n,*min; struct stack S; S.num=0; min=root;

Enstack(root,&S); while(S.num!=0) { n=Destack(&S); if(n->f < min->f) { min=n; } for(i=0;in;i++) { Enstack(n->sn[i],&S); } } tree_gener(min,root); if(g>min->g) { printf("seq:%c %c %c %c %c %c %c | g:%d \n",min->seq[0],min->seq[1],min->seq[2],min->seq[3],min->seq[4],min->seq[5],min->seq[6],min->g); } g=min->g; } void swap(struct node *sn,struct node *fn,int n,int m) { int i; for(i=0;i<7;i++) { sn->seq[i]=fn->seq[i]; } sn->seq[n]=fn->seq[m]; sn->seq[m]=fn->seq[n]; } int calcu_h(char seq[]) { int m=0,n=0,i; for(i=0;i<7;i++) { if(seq[i]=='B') { m++; } if(seq[i]=='W')

人工智能深度优先算法课程设计报告

人工智能课程报告 题目: 深 度 优 先 算 法 班级:XXXXXXXXXXX 学号:XXXXXXXXXXX 姓名:XXXXXXXXXXX

【摘要】结合生活中解决搜索问题所常用的思考方法与解题方法,从深度优先探讨了提高程序效率的适用技巧。 【关键词】1搜索顺序;2搜索对象;3搜索优化; 一、深度优先搜索的优化技巧 我们在做事情的时候,经常遇到这类问题——给出约束条件,求一种满足约束条件的方案,这类问题我们叫它“约束满足”问题。对于约束满足问题,我们通常可以从搜索的顺序和搜索的对象入手,进而提高程序的效率。 二、搜索的顺序及对象: 在解决约束满足问题的时候,问题给出的约束条件越强,对于搜索就越有利。之所以深度优先搜索的效率在很大程度上优于穷举,就是因为它在搜索过程中很好的利用了题目中的约束条件进行优化,达到提高程序效率的目的。 显然,在同样的一棵搜索树中,越在接近根接点的位置利用约束条件优化效果就越好。如何在搜索中最大化的利用题目的约束条件为我们提供剪枝的依据,是提高深度优先搜索效率的一个很重要的地方。而不同的搜索顺序和搜索对象就直接影响到我们对于题目约束条件的运用。 三、搜索特点 1.由于深度搜索过程中有保留已扩展节点,则不致于重复构造不必要的子树系统。 2.深度优先搜索并不是以最快的方式搜索到解,因为若目标节点在第i层的某处,必须等到该节点左边所有子树系统搜索完毕之后,才会访问到该节点,因此,搜索效率还取决于目标节点在解答树中的位置。

3.由于要存储所有已被扩展节点,所以需要的内存空间往往比较大。 4.深度优先搜索所求得的是仅仅是目前第一条从起点至目标节点的树枝路径,而不是所有通向目标节点的树枝节点的路径中最短的路径。 5.适用范围:适用于求解一条从初始节点至目标节点的可能路径的试题。若要存储所有解答路径,可以再建立其它空间,用来存储每个已求得的解。若要求得最优解,必须记下达到目前目标的路径和相应的路程值,并与前面已记录的值进行比较,保留其中最优解,等全部搜索完成后,把保留的最优解输出。 四、算法数据结构描述 深度优先搜索时,最关键的是结点扩展(OPEN)表的生成,它是一个栈,用于存放目前搜索到待扩展的结点,当结点到达深度界限或结点不能再扩展时,栈顶结点出栈,放入CLOSE表(存放已扩展节点),继续生成新的结点入栈OPEN 表,直到搜索到目标结点或OPEN栈空为止。 具体算法如下: ①把起始结点S放到非扩展结点OPEN表中(后进先出的堆栈),如果此结点为一目标结点,则得到一个解。 ②如果OPEN为一空表,则搜索失败退出。 ③取OPEN表最前面(栈顶)的结点,并把它放入CLOSED的扩展结点表中,并冠以顺序编号n。 ④如果结点n的深度等于最大深度,则转向2。 ⑤否则,扩展结点n,产生其全部子结点,把它们放入OPEN表的前头(入栈),并配上指向n的返回指针;如果没有后裔,则转向2。 ⑥如果后继结点中有任一个为目标结点,则求得一个解,成功退出;否则,转向2。

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