文档库 最新最全的文档下载
当前位置:文档库 › 人工智能实验指导书42+12学时

人工智能实验指导书42+12学时

人工智能实验指导书42+12学时
人工智能实验指导书42+12学时

人工智能实验指导书

适用专业:计算机科学与技术

制定人:应用教研室

目录

实验一熟悉实验环境 (1)

实验二 N!及Fibonacci序列问题 (4)

实验三梵塔问题 (5)

实验四渡河问题 (8)

实验一熟悉实验环境(2学时)

一、实验目的

1、了解PROLOG解释器;

2、了解PROLOG语言中常量、变量的表示方法;

3、了解利用PROLOG进行事实库、规则库的编写方法;

二、实验要求

1、熟悉Prolog运行环境,包括硬件与软件环境;

2、学习示例程序,分析其功能;

3、写出Example 1、Example 11、Example 15示例程序的功能;

4、利用PROLOG进行事实库、规则库的编写,并在此基础上进行简单的询问;

三、实验设备

网络计算机,Turbo prolog教学软件。

四、实验内容及步骤

一)实验内容:

1、熟悉Turbo prolog的运行环境,包括所用的机器的硬件与软件环境。

2、学习使用Turbo prolog,包括进入Prolog主程序、编辑源程序、修改环境目录、退出等基本操作。

3、学习Turbo prolog的简单程序结构,掌握分析问题、询问解释技巧。

4、了解PROLOG语言中常量、变量的表示方法;

5、利用PROLOG进行事实库、规则库的编写,并在此基础上进行简单的询问;

二)实验步骤:

1、启动Windows 98/2000操作环境。

2、打开目录:c:\pre_soft\appsdos\cai\prolog,执行prolog应用程序,启动Turbo prolog,并按空格键(SPACE)集成开发环境。

3、选择Setup项,打开下拉菜单,选择Directories项,将工作目录修改为:c:\pre_soft\appsdos\cai\prolog,按Esc键退出,选择Save Configuration 项,保存修改。

4、选择Files项,打开下拉菜单,选择Load项,选择要打开的示例程序,选择Example 1示例程序,再选择Edit项,可以进行编辑源程序。

5、编辑之后,可以选择Run项,执行程序,可以在Dialog窗口进行询问,即外部目标的执行,并分析程序之功能。

6、仿前例,运行Example 11、Example 15,分析程序功能。

7、退出,选择Quit项,可以退出Turbo Prolog程序,返回到Windows2000环境。

五、源程序

Example 1:

domains

person, activity = symbol

predicates

likes(person,activity)

clauses

likes(ellen,tennis).

likes(john,football).

likes(tom,baseball).

likes(eric,swimming).

likes(mark,tennis).

likes(bill,X) if likes(tom,X).

Example 11:

domains

namelist = name*

name = symbol

predicates

member(name,namelist).

clauses

member(Name,[Name|_]).

member(Name,[_|Tail]) if member(Name,Tail).

Example 15:

domains

name = symbol

predicates

father(name,name)

everybody

clauses

father(leonard,katherine).

father(carl,jason).

father(carl,marilyn).

everybody if

father(X,Y),

write(X," is ",Y,"'s father\n") and fail.

实验二 N!及Fibonacci序列问题(3学时)

一、实验目的

掌握Turbo prolog软件编程使用方法;

掌握Prolog程序的各域段含义;

初步学习分析、运用递归方法解决问题。

二、实验设备

网络计算机,Turbo prolog教学软件。

三、实验内容及步骤

一)Fibonacci序列问题描述:

数字的Fibonacci序列是个正整数序列,序列头两个数均为1,其余数为其前两个数相加得到,该序列排列如下:

1,1,2,3,5,8,13,21,34,55……

Fibonacci序列通式为:

F

1

=1

F

2

=1

F n =F

n-1

+F

n-2

二)实验内容:

1、进一步熟悉Turbo prolog的运行环境,程序调试的方法;

2、初步掌握递归原理,了解问题递归的详细过程。

3、理解递归停止条件对整个递归过程的作用。

4、写出求N!及Fibonacci序列问题的Prolog程序。

三)实验步骤:

1、启动prolog编辑环境,编辑求N!及Fibonacci序列源程序;

2、运行程序,分析结果;

3、尝试修改程序达到同样的目的。

实验三梵塔问题(3学时)

一、实验目的

1、掌握PROLOG编制递归程序的方法:边界条件与递归部分的设计;

2、掌握Prolog程序的各域段含义;

3、学会分析、运用递归方法解决问题。

二、实验要求

1、分析汉诺塔问题,找出问题本身存在的递归性,编制程序;

2、显示汉诺塔问题中圆盘的移动次序;

3、归纳出圆盘数目与移动步骤之间的数学关系;

4、分析递归问题的实质。

三、实验设备

网络计算机,Turbo prolog教学软件。

四、实验内容及步骤

一)问题描述:

如上图,目的是把左边的所有盘子移到右边的杆子上。一次只能移动一个盘子,你可以使用中间的杆子作为临时存放盘子的地方。在移动的过程中,小盘子必须放在大盘子之上。

二)分析问题:

如果盘子只有两三个,是很容易解决的。但是随着盘子数目的增加,问题就变得非常难解了。

事实上,已经通过数学证明过了,最少的移动次数是21 n,n为盘子的数目。

最早提出这个问题的人设定的盘子数目为64,这就是说需要

64-=18446744073709551615次移动,假设计算机每秒钟能够计算10,000,000 21

(一千万)次,那也需要58494年,所以你千万不要试图使用此程序来解较大的数。

让我们来看看如何用递归来解决这个问题:

如果只有一个盘子,直接移过去就行了,这是递归的边界条件。

如果要移动N个盘子,就要分三步走:

1、把N-1个盘子移动到中间的杆子上(把右边的杆子作为临时存放盘子的位置)。

2、把最后一个盘子直接移到右边的杆子上。

3、最后把中间杆子上的盘子移到右边的杆子上(把左边的杆子作为临时存放盘子的位置)。

上面第一、三步用到了递归。我们看到,通过递归把N个盘子的问题变成了

两个N-1个盘子的问题。如此下去,最后就变成了21-n个一个盘子的问题了,这

也就是说问题被解决了。

三)实验内容:

1、分析汉诺塔问题,找出问题本身存在的递归性。

2、分析递归原理,熟悉问题递归的详细过程。

3、编写求梵塔问题的Prolog程序。

4、显示汉诺塔问题中圆盘的移动次序。

5、更改圆盘数量,了解问题解决的递归过程。

四)实验步骤:

1、启动prolog编辑环境,编辑hanoi源程序;

2、运行程序,分析结果;

3、重复比较圆盘数目,根据其求解过程得到圆盘数量与步骤数目之间的规律。归纳并理解问题递归的实质。

实验四渡河问题(4学时)

一、实验目的

1、进一步掌握PROLOG编制递归程序的方法;

2、理解谓词在程序中的作用。

二、实验要求

1、分析该问题的实质以及其中存在的递归作用;

2、利用列表数据结构编写出渡河问题的程序;

3、理解列表数据结构的作用。

三、实验设备

网络计算机,Turbo prolog教学软件。

四、实验内容及步骤

一)问题描述:

农夫、狼、山羊和蔬菜过河问题。一个农夫带着一条狼、一头山羊和一篮蔬菜过河,但只有一条小船,并且每次只能让农夫带一样东西过河。农夫在场的情况下一切相安无事,一旦农夫不在,狼会吃羊,羊会吃蔬菜。问聪明的农夫如何解决过河问题。

二)分析问题及编写程序

这个问题还可以扩展为N1个牧师和N2个野人,而船一次可以装下M个人的情况。我们使用Prolog解决上面的问题。

这是个典型的状态图搜索问题,所以我们首先需要解决的问题就是使用Prolog的数据结构表达两岸的状态,以及对这些状态可能的操作。我们用下面的复合结构来表达问题的某个状态。

((左岸牧师数,左岸野人数),(右岸牧师数,右岸野人数),船的位置) 上面的结构中,船的位置为0表示船在左岸,为1表示在右岸。一开始,所有的人都在左岸。

所以初始状态如下:

((3,3),(0,0),0)

而我们的目标状态则是:

((0,0),(3,3),1)

当然,这里只是为了方便起见,才使用了上面的结构,实际上是没有必要包括右岸的人数的,因为可以通过左岸的人数算出右岸的人数来。不过我们这里所选用的数据结构也有其优点,它可以是程序更加容易理解。

船上所能够载人的状态就是可能的操作。用谓词move/2表示。

move(1,0).表示船上有一位牧师,没有野人。

move(0,1).

move(0,2).

move(2,0).

move(1,1).

有了上面的表达状态的数据结构以及移动的方法,我们还需要判断状态是否合法。下面的legal1就是完成这个任务。

legal((X,Y,_)):- %X为左岸状态,Y为右岸状态。

legal1(X), %分别判断两岸的状态是否合法。

legal1(Y).

legal1((X,Y)):-

X=:=0,Y>=0,!. %牧师人数为0,野人的人数大于0,合法。

legal1((X,Y)):-

Y=:=0,X>=0,!. %野人人数为0,牧师的人数大于0,合法。

legal1((X,Y)):-

X>=Y,X>=0,Y>=0. %牧师数大于或等于野人数,且都大于0,合法。

下面是使用legal/1的几个例子:

?- legal(((3,3),(0,0),1)).

yes

?- legal(((0,3),(3,0),1)).

yes

?- legal(((2,3),(1,0),0)).

no

legal1只判断牧师与野人的人数是否会造成牧师受到伤害,而不判断左右岸的人数之和是否正确。所以((2,1),(1,1),0)也是合法的状态。不过不用担心,在我们后面的程序中会避免这种情况出现的。

下面的update/3谓词能够完成把合理的移动作用的某个状态上,从而到达新的状态。

update((X,Y,0),Move,Statu1):- %船在左岸时

(A,B)=X,

(C,D)=Y,

(E,F)=Move,

C1 is C+E,

D1 is D+F,

A1 is A-E,

B1 is B-F,

Statu1=((A1,B1),(C1,D1),1).

update((X,Y,1),Move,Statu1):- %船在右岸时

(A,B)=X,

(C,D)=Y,

(E,F)=Move,

C1 is C-E,

D1 is D-F,

A1 is A+E,

B1 is B+F,

Statu1=((A1,B1),(C1,D1),0).

?- update(((3,3),(0,0),0),(1,1),X).

X = (2,2),(1,1),1 ;

no

?- update(((0,0),(3,3),0),(1,1),X).

X = (-1,-1),(4,4),1 ;

no

?- update(((1,2),(2,3),1),(3,4),X).

X = (4,6),(-1,-1),0 ;

no

注意update只是简单地进行加减运算,它并不判断所得的新的状态是否合法。

有了以上的三个谓词move/2,update/3,legal/1我们就可以很容易的做出判断两个合法的状态相邻的谓词,当然,此谓词也可以用来寻找某个状态的相邻状态。

connect(Statu,Statu1):-

move(X,Y),

update(Statu,(X,Y),Statu1),

legal(Statu1).

这是非常符合逻辑的谓词。我们来看看功能:

?- connect(((3,3),(0,0),0),X).

X = (2,2),(1,1),1 ; 一个野人与一个牧师过河

X = (3,2),(0,1),1 ; 一个野人过河

X = (3,1),(0,2),1 ; 两个野人过河

no

再使用典型的深度搜索方法就可以找到答案了:

findroad(X,X,L,L).% 递归的边界条件。

findroad(X,Y,L,L1):- % L为储存的路由表。

connect(X,Z),

not(member(Z,L)), % X所连接的节点Z不在已经储存的路由表中。 findroad(Z,Y,[Z|L],L1).

?- findroad(((0,0),(3,3),1),((3,3),(0,0),0),[((0,0),(3,3),1) ],L).

L = [((3,3),(0,0),0),

((3,1),(0,2),1),

((3,2),(0,1),0),

((3,0),(0,3),1),

((3,1),(0,2),0),

((1,1),(2,2),1),

((2,2),(1,1),0),

((0,2),(3,1),1),

((0,3),(3,0),0),

((0,1),(3,2),1),

((1,1),(2,2),0),

((0,0),(3,3),1)]

yes

findroad/4的第三个参数是初始路由表,在此我们把终点状态放到其中,上面的findroad是从终点向起点寻找,由于是对称的,这并不影响结果。

使用广度搜索也能完成相同的任务:

findroad([],X,X).

findroad(Moves,State,Crit):-

findroad(PrMoves,State,NextState),

not(member(NextState,PrMoves)),

connect(NextState,Crit),

append(PrMoves,[NextState],Moves).

?- findroad(L,((3,3),(0,0),0),((0,0),(3,3),1)).

L=[((3 , 3) , (0 , 0) , 0),

((2 , 2) , (1 , 1) , 1),

((3 , 2) , (0 , 1) , 0),

((3 , 0) , (0 , 3) , 1),

((3 , 1) , (0 , 2) , 0),

((1 , 1) , (2 , 2) , 1),

((2 , 2) , (1 , 1) , 0),

((0 , 2) , (3 , 1) , 1),

((0 , 3) , (3 , 0) , 0),

((0 , 1) , (3 , 2) , 1),

((0 , 2) , (3 , 1) , 0)]

好了,到此为止过河问题已经基本上解决了。不过为了能够使用本程序分析一般情况,即牧师与野人的人数和船的载客量为其它值的情况,我们来稍微改写一下这个程序。谓词insert_move(N),动态地向内存中加入船的载客量为N 时,船上载客的所有可能情况。我们可以试试借用谓词leagal(X,Y)来实现:

insert_move(N):-

X+Y is N,

legal(X,Y),

asserta(move(X,Y)).

上面的asserta/1谓词把它的参数作为子句加入到内存中。这个程序看似简洁,其实错了,为什么呢?因为 X+Y is N 有无穷组解。所以要用以下方法:

get_integer(L,H,X):-L>H,!,fail.

get_integer(L,H,L).

get_integer(L,H,X):-L1 is L+1,get_integer(L1,H,X).

insert_move(N):-

insert_move0(N),

insert_move1(N).

insert_move0(0). %野人或牧师有一方人数为0,则另一方的人数可以是0--N.

insert_move0(N):-

asserta(move(N,0)),

asserta(move(0,N)),

N1 is N-1,

insert_move0(N1).

insert_move1(N):-%人数都不为0时,则野人的人数不能多于牧师的人数,并且总人数不能多于N.

get_integer(1,N,X),

get_integer(X,N,Y),

X+Y=

asserta(move(Y,X)),

fail.

insert_move1(_).

来试一下功能。

?- insert_move(3).

yes

?- move(X,Y).

X = 2

Y = 1 ;

X = 1

Y = 1 ;

X = 0

Y = 1 ;

X = 1

Y = 0 ;

X = 0

Y = 2 ;

X = 2

Y = 0 ;

X = 0

Y = 3 ;

X = 3

Y = 0 ;

no

谓词insert_statu(N1,N2),动态地加入初始状态与目标状态,当然是N个牧师与N个野人的情况。

insert_statu(N1,N2):-

asserta(inistatu(((N1,N2),(0,0),0))),

asserta(desstatu(((0,0),(N1,N2),1))).

下面的谓词用来从内存中删除以上的动态信息。

el_move:-

retract(move(X,Y)),

fail.

del_move.

del_stat:-

retract(inistatu(X)),

retract(desstatu(Y)),!.

del_stat.

这些谓词的第二个子句是为了保证谓词永远能够成功,以免再调用它们时出现问题。

最后我们再分别编写使用广度搜索与深度搜索的主程序。

widesolve(N1,N2,M):-

del_move,

del_stat,

insert_move(M),

insert_statu1,(N1,N2),

inistatu(X),

desstatu(Y),

!,

findroad(L,X,Y),

writelist(L),

nl.

deepsolve(N1,N2,M):-

del_move,

del_stat,

insert_move(M),

insert_statu(N1,N2),

inistatu(X),

desstatu(Y), !,

findroad(Y,X,[Y],L),

writelist(L),

nl.

第一个参数为野人与牧师的人数,第二个参数为船的最大载人量。它们分别调用findroad/3(广度搜索)findroad/4(深度搜索)来完成搜索任务。(在Prolog 中参数数目不同的谓词,是不同的谓词)

我们在深度搜索中加入的截断,因为我们想通过deepsolve判断问题是否有解,而通过widesolve寻找出最优解,这是因为广度搜索先总是找出最短路径。

游戏人工智能实验报告记录四

游戏人工智能实验报告记录四

————————————————————————————————作者:————————————————————————————————日期:

实验四有限状态机实验 实验报告 一、实验目的 通过蚂蚁世界实验掌握游戏中追有限状态机算法 二、实验仪器 Windows7系统 Microsoft Visual Studio2015 三、实验原理及过程 1)制作菜单 设置参数:点击会弹出对话框,设置一些参数,红、黑蚂蚁的家会在地图上标记出来 运行:设置好参数后点击运行,毒药、食物、水会在地图上随机显示 下一步:2只红蚂蚁和2只黑蚂蚁会随机出现在地图上,窗口右方还会出现红、黑蚂蚁当前数量的统计 不断按下一步,有限状态机就会不断运行,使蚁群产生变化 2)添加加速键

资源视图中下方 选择ID和键值

3)新建头文件def.h 在AntView.cpp中加入#include"def.h" 与本实验有关的数据大都是在这里定义的 int flag=0; #define kForage 1 #define kGoHome 2 #define kThirsty 3 #define kDead 4 #define kMaxEntities 200 class ai_Entity{ public: int type; int state; int row; int col; ai_Entity(); ~ai_Entity() {} void New (int theType,int theState,int theRow,int theCol); void Forage(); void GoHome(); void Thirsty(); void Dead();

《人工智能及其应用》(蔡自兴)课后习题答案第3章

第三章搜索推理技术 3-1什么是图搜索过程?其中,重排OPEN表意味着什么,重排的原则是什么? 图搜索的一般过程如下: (1) 建立一个搜索图G(初始只含有起始节点S),把S放到未扩展节点表中(OPEN表)中。 (2) 建立一个已扩展节点表(CLOSED表),其初始为空表。 (3) LOOP:若OPEN表是空表,则失败退出。 (4) 选择OPEN表上的第一个节点,把它从OPEN表移出并放进CLOSED表中。称此节点为节 点n,它是CLOSED表中节点的编号 (5) 若n为一目标节点,则有解并成功退出。此解是追踪图G中沿着指针从n到S这条路径 而得到的(指针将在第7步中设置) (6) 扩展节点n,生成不是n的祖先的那些后继节点的集合M。将M添入图G中。 (7) 对那些未曾在G中出现过的(既未曾在OPEN表上或CLOSED表上出现过的)M成员设置一 个通向n的指针,并将它们加进OPEN表。 对已经在OPEN或CLOSED表上的每个M成员,确定是否需要更改通到n的指针方向。 对已在CLOSED表上的每个M成员,确定是否需要更改图G中通向它的每个后裔节点的指针方向。 (8) 按某一任意方式或按某个探试值,重排OPEN表。 (9) GO LOOP。 重排OPEN表意味着,在第(6)步中,将优先扩展哪个节点,不同的排序标准对应着不同的搜索策略。 重排的原则当视具体需求而定,不同的原则对应着不同的搜索策略,如果想尽快地找到一个解,则应当将最有可能达到目标节点的那些节点排在OPEN表的前面部分,如果想找到代价最小的解,则应当按代价从小到大的顺序重排OPEN表。 3-2 试举例比较各种搜索方法的效率。

人工智能实验报告大全

人工智能实验报告大 全

人工智能课内实验报告 (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)

《人工智能及其应用》实验指导书Word版

《人工智能及其应用》 实验指导书 浙江工业大学计算机科学与技术学院—人工智能课程组 2011年9月

前言 本实验是为了配合《人工智能及其应用》课程的理论学习而专门设置的。本实验的目的是巩固和加强人工智能的基本原理和方法,并为今后进一步学习更高级课程和信息智能化技术的研究与系统开发奠定良好的基础。 全书共分为八个实验:1.产生式系统实验;2.模糊推理系统实验;3.A*算法求解8数码问题实验;4.A*算法求解迷宫问题实验;5.遗传算法求解函数最值问题实验;6.遗传算法求解TSP问题实验;7.基于神经网络的模式识别实验;8.基于神经网络的优化计算实验。每个实验包括有:实验目的、实验内容、实验条件、实验要求、实验步骤和实验报告等六个项目。 本实验指导书包括两个部分。第一个部分是介绍实验的教学大纲;第二部分是介绍八个实验的内容。 由于编者水平有限,本实验指导书的错误和不足在所难免,欢迎批评指正。 人工智能课程组 2011年9月

目录 实验教学大纲 (1) 实验一产生式系统实验 (3) 实验二模糊推理系统实验 (5) 实验三A*算法实验I (9) 实验四A*算法实验II (12) 实验五遗传算法实验I (14) 实验六遗传算法实验II (18) 实验七基于神经网络的模式识别实验 (20) 实验八基于神经网络的优化计算实验 (24)

实验教学大纲 一、学时:16学时,一般安排在第9周至第16周。 二、主要仪器设备及运行环境:PC机、Visual C++ 6.0、Matlab 7.0。 三、实验项目及教学安排 序号实验名称实验 平台实验内容学 时 类型教学 要求 1产生式系统应用VC++设计知识库,实现系统识别或 分类等。 2设计课内 2模糊推理系统应用Matlab1)设计洗衣机的模糊控制器; 2)设计两车追赶的模糊控制 器。 2验证课内 3A*算法应用I VC++设计与实现求解N数码问题的 A*算法。 2综合课内4A*算法应用II VC++设计与实现求解迷宫问题的A* 算法。 2综合课内5遗传算法应用I Matlab1)求某一函数的最小值; 2)求某一函数的最大值。 2验证课内6遗传算法应用II VC++设计与实现求解不同城市规模 的TSP问题的遗传算法。 2综合课内 7基于神经网络的模式识别Matlab1)基于BP神经网络的数字识 别设计; 2)基于离散Hopfiel神经网络 的联想记忆设计。 2验证课内 8基于神经网络的 优化计算 VC++设计与实现求解TSP问题的连2综合课内 四、实验成绩评定 实验课成绩单独按五分制评定。凡实验成绩不及格者,该门课程就不及格。学生的实验成绩应以平时考查为主,一般应占课程总成绩的50%,其平时成绩又要以实验实际操作的优劣作为主要考核依据。对于实验课成绩,无论采取何种方式进行考核,都必须按实验课的目的要求,以实际实验工作能力的强弱作为评定成绩的主要依据。

人工智能实验报告大全

人工智能课内实验报告 (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) {

人工智能及其应用总结

人工智能及其应用总结 1、感知能力、 2、记忆与思维能、 3、学习能力、 4、行为能力(表达能力)人工智能的研究内容:知识表示、机器感知、机器思维、机器学习、机器行为人工智能的研究目标:近期目标:使现有的电子数字计算机更聪明、更有用,使它不仅能做一般的数值计算及非数值信息的数据处理,而且能运用知识处理问题,能模拟人类的部分智能行为。建造智能机器人代替人类的部分智力劳动。远期目标:用自动机模仿人类的思维过程和智能行为。最终目标:机器智能实现生物智能的各项功能。智能行为:感知、推理、学习、通信和复杂环境下的动作行为知识发现的处理过程:数据挖掘、数据选择、知识评价人工智能的主要学派:符号主义、连接主义和行为主义人工智能的研究途径:心理模拟、生理模拟和行为模拟人工智能的应用领域:智能控制、智能管理、智能决策、智能仿真。人工智能的基本技术:表示、运算、搜索归纳技术、联想技术人工智能(机器智能)、学科和能力:(书)所谓人工智能就是用人工的方法在机器(计算机)上实现的智能,或者说是人们使机器具有类似于人的智能。从学科角度来看:人工智能是计算机科学中涉及研究、设计和应用智能机器的一个分支。它的近期主要目标在于研究用机器来模仿和执行人脑的某些智能功能,并开发相关理论和技术。从能力角度来看:人工智能是智能机器所执行的通常与人类智能有关的功能。对认知

行为进行研究:心理活动的最高层级是思维策略,中间一层是初级信息处理,最低层级是生理过程,与此相应的是计算机程序、语言和硬件。研究认知过程的主要任务是探求高层次思维决策与初级信息处理的关系,并用计算机程序来模拟人的思维策略水平,而用计算机语言模拟人的初级信息处理过程。人工智能新的研究热点:新的研究热点:分布式人工智能与Agent,计算智能与进化计算,数据挖掘与知识发现 (超市市场商品数据分析),人工生命第二章:知识表示方法知识的一般概念:知识是人们在改造客观世界的实践中积累起来的认识和经验知识表示:是研究用机器表示知识的可行性、有效性的一般方法,是一种数据结构与控制结构的统一体,既考虑知识的存储又考虑知识的使用。知识表示的要求:表示能力、可利用性、可实现性、可组织性、可维护性、自然性、可理解性状态空间法的三要素:状态、算符、状态空间方法问题求解技术:问题的表示和求解的方法二种不确定性:关于证据的不确定性和关于结论的不确定性原子公式:由若干谓词符号和项组成问题的状态空间包含三种说明的集合:初始状态集合S、操作符集合以及目标状态集合“我听音乐或者绘画”的谓词表示的析取式LISTEN(I,MUSIC)VDRAW(I,PAINTING)句子变换成子句形式:(x){P(x)→P(x)} (ANY x) { P(x)P(x) } (ANY x) {~P(x)

人工智能实验报告

计算机科学与技术1341901301 陈敏 实验一:知识表示方法 一、实验目的 状态空间表示法是人工智能领域最基本的知识表示方法之一,也是进一步学习状态空间搜索策略的基础,本实验通过牧师与野人渡河的问题,强化学生对知识表示的了解和应用,为人工智能后续环节的课程奠定基础。 二、问题描述 有n个牧师和n个野人准备渡河,但只有一条能容纳c个人的小船,为了防止野人侵犯牧师,要求无论在何处,牧师的人数不得少于野人的人数(除非牧师人数为0),且假定野人与牧师都会划船,试设计一个算法,确定他们能否渡过河去,若能,则给出小船来回次数最少的最佳方案。 三、基本要求 输入:牧师人数(即野人人数):n;小船一次最多载人量:c。 输出:若问题无解,则显示Failed,否则,显示Successed输出一组最佳方案。用三元 组(X 1, X 2 , X 3 )表示渡河过程中的状态。并用箭头连接相邻状态以表示迁移过程:初始状态-> 中间状态->目标状态。 例:当输入n=2,c=2时,输出:221->110->211->010->021->000 其中:X 1表示起始岸上的牧师人数;X 2 表示起始岸上的野人人数;X 3 表示小船现在位置(1表 示起始岸,0表示目的岸)。 要求:写出算法的设计思想和源程序,并以图形用户界面实现人机交互,进行输入和输出结果,如: Please input n: 2 Please input c: 2 Successed or Failed?: Successed Optimal Procedure: 221->110->211->010->021->000 四、算法描述

人工智能实验报告

实验报告 1.对CLIPS和其运行及推理机制进行介绍 CLIPS是一个基于前向推理语言,用标准C语言编写。它具有高移植性、高扩展性、 强大的知识表达能力和编程方式以及低成本等特点。 CLIPS由两部分组成:知识库、推理机。它的基本语法是: (defmodule< module-n ame >[< comme nt >]) CLIPS的基本结构: (1).知识库由事实库(初始事实+初始对象实例)和规则库组成。 事实库: 表示已知的数据或信息,用deftemplat,deffact定义初始事实表FACTLIS,由关系名、后跟 零个或多个槽以及它们的相关值组成,其格式如下: 模板: (deftemplate [] *) :: = | 事实: (deffacts [] *) 当CLIPS系统启动推理时,会把所有用deffact定义的事实自动添加到工作存储器中。常用命令如下:asser:把事实添加到事实库(工作存储器)中retract:删除指定事实 modify :修改自定义模板事实的槽值duplicate :复制事实 clear:删除所有事实 规则库 表示系统推理的有关知识,用defrule命令来定义,由规则头、后跟零个或多个条件元素以 及行为列表组成,其格式如下: (defrule [] * ; =>

人工智能及其应用(蔡自兴)课后答案

第二章知识表示方法 2-1 状态空间法、问题归约法、谓词逻辑法和语义网络法的要点是什么?它们有何本质上的联系及异同点? 答:状态空间法:基于解答空间的问题表示和求解方法,它是以状态和算符为基础来表示和求解问题的。一般用状态空间法来表示下述方法:从某个初始状态开始,每次加一个操作符,递增的建立起操作符的试验序列,直到达到目标状态为止。 问题规约法:已知问题的描述,通过一系列变换把此问题最终变成一个子问题集合:这些子问题的解可以直接得到,从而解决了初始问题。问题规约的实质:从目标(要解决的问题)出发逆向推理,建立子问题以及子问题的子问题,直至最后把出示问题规约为一个平凡的本原问题集合。 谓词逻辑法:采用谓词合式公式和一阶谓词算法。要解决的问题变为一个有待证明的问题,然后采用消解定理和消解反演莱证明一个新语句是从已知的正确语句导出的,从而证明这个新语句也是正确的。 语义网络法:是一种结构化表示方法,它由节点和弧线或链组成。节点用于表示物体、概念和状态,弧线用于表示节点间的关系。语义网络的解答是一个经过推理和匹配而得到的具有明确结果的新的语义网络。语义网络可用于表示多元关系,扩展后可以表示更复杂的问题 2-2 设有3个传教士和3个野人来到河边,打算乘一只船从右岸渡到左岸去。该船的负载能力为两人。在任何时候,如果野人人数超过传教士人数,那么野人就会把传教士吃掉。他们怎样才能用这条船安全地把所有人都渡过河去? 用S i(nC, nY) 表示第i次渡河后,河对岸的状态,nC表示传教士的数目,nY表示野人的数目,由于总人数的确定的,河对岸的状态确定了,河这边的状态也即确定了。考虑到题目的限制条件,要同时保证,河两岸的传教士数目不少于野人数目,故在整个渡河的过程中,允许出现的状态为以下3种情况: 1. nC=0 2. nC=3 3. nC=nY>=0 (当nC不等于0或3) 用d i(dC, dY)表示渡河过程中,对岸状态的变化,dC表示,第i次渡河后,对岸传教士数目的变化,dY表示,第i次渡河后,对岸野人数目的变化。当i为偶数时,dC,dY同时为非负数,表示船驶向对岸,i为奇数时,dC, dY同时为非正数,表示船驶回岸边。

《人工智能及其应用》实验指导书上课讲义

《人工智能及其应用》实验指导书

《人工智能及其应用》 实验指导书 浙江工业大学计算机科学与技术学院—人工智能课程组 2011年9月

前言 本实验是为了配合《人工智能及其应用》课程的理论学习而专门设置的。本实验的目的是巩固和加强人工智能的基本原理和方法,并为今后进一步学习更高级课程和信息智能化技术的研究与系统开发奠定良好的基础。 全书共分为八个实验:1.产生式系统实验;2.模糊推理系统实验;3.A*算法求解8数码问题实验;4.A*算法求解迷宫问题实验;5.遗传算法求解函数最值问题实验;6.遗传算法求解TSP问题实验;7.基于神经网络的模式识别实验;8.基于神经网络的优化计算实验。每个实验包括有:实验目的、实验内容、实验条件、实验要求、实验步骤和实验报告等六个项目。 本实验指导书包括两个部分。第一个部分是介绍实验的教学大纲;第二部分是介绍八个实验的内容。 由于编者水平有限,本实验指导书的错误和不足在所难免,欢迎批评指正。 人工智能课程组 2011年9月

目录 实验教学大纲 (1) 实验一产生式系统实验 (4) 实验二模糊推理系统实验 (6) 实验三 A*算法实验I (11) 实验四 A*算法实验II (14) 实验五遗传算法实验I (16) 实验六遗传算法实验II (21) 实验七基于神经网络的模式识别实验 (24) 实验八基于神经网络的优化计算实验 (28)

实验教学大纲 一、学时:16学时,一般安排在第9周至第16周。 二、主要仪器设备及运行环境:PC机、Visual C++ 6.0、Matlab 7.0。 三、实验项目及教学安排 序号实验名称实验 平台 实验内容学 时 类型教学 要求 1 产生式系统应 用VC++ 设计知识库,实现系统识 别或分类等。 2 设计课内 2 模糊推理系统 应用Matlab 1)设计洗衣机的模糊控制 器; 2)设计两车追赶的模糊控 制器。 2 验证课内 3 A*算法应用I VC++ 设计与实现求解N数码问 题的A*算法。 2 综合课内4 A*算法应用II VC++ 设计与实现求解迷宫问题 的A*算法。 2 综合课内 5 遗传算法应用 I Matlab 1)求某一函数的最小值; 2)求某一函数的最大值。 2 验证课内 6 遗传算法应用 II VC++ 设计与实现求解不同城市 规模的TSP问题的遗传算 法。 2 综合课内 7 基于神经网络 的模式识别Matlab 1)基于BP神经网络的数 字识别设计; 2)基于离散Hopfiel神经 网络的联想记忆设计。 2 验证课内 8 基于神经网络 的优化计算VC++ 设计与实现求解TSP问题 的连续Hopfield神经网 络。 2 综合课内 四、实验成绩评定

人工智能实验报告

人工智能课程项目报告 姓名: 班级:二班

一、实验背景 在新的时代背景下,人工智能这一重要的计算机学科分支,焕发出了他强大的生命力。不仅仅为了完成课程设计,作为计算机专业的学生, 了解他,学习他我认为都是很有必要的。 二、实验目的 识别手写字体0~9 三、实验原理 用K-最近邻算法对数据进行分类。逻辑回归算法(仅分类0和1)四、实验内容 使用knn算法: 1.创建一个1024列矩阵载入训练集每一行存一个训练集 2. 把测试集中的一个文件转化为一个1024列的矩阵。 3.使用knnClassify()进行测试 4.依据k的值,得出结果 使用逻辑回归: 1.创建一个1024列矩阵载入训练集每一行存一个训练集 2. 把测试集中的一个文件转化为一个1024列的矩阵。 3. 使用上式求参数。步长0.07,迭代10次 4.使用参数以及逻辑回归函数对测试数据处理,根据结果判断测试数 据类型。 五、实验结果与分析 5.1 实验环境与工具 Window7旗舰版+ python2.7.10 + numpy(库)+ notepad++(编辑)

Python这一语言的发展是非常迅速的,既然他支持在window下运行就不必去搞虚拟机。 5.2 实验数据集与参数设置 Knn算法: 训练数据1934个,测试数据有946个。

数据包括数字0-9的手写体。每个数字大约有200个样本。 每个样本保持在一个txt文件中。手写体图像本身的大小是32x32的二值图,转换到txt文件保存后,内容也是32x32个数字,0或者1,如下图所 示 建立一个kNN.py脚本文件,文件里面包含三个函数,一个用来生成将每个样本的txt文件转换为对应的一个向量:img2vector(filename):,一个用 来加载整个数据库loadDataSet():,最后就是实现测试。

《人工智能及其应用》实验指导书

《人工智能及其应用》 实验指导书

浙江工业大学计算机科学与技术学院—人工智能课程组 2011年9月

前言 本实验是为了配合《人工智能及其应用》课程的理论学习而专门设置的。本实验的目的是巩固和加强人工智能的基本原理和方法,并为今后进一步学习更高级课程和信息智能化技术的研究与系统开发奠定良好的基础。 全书共分为八个实验:1.产生式系统实验;2.模糊推理系统实验;3.A*算法求解8数码问题实验;4.A*算法求解迷宫问题实验;5.遗传算法求解函数最值问题实验;6.遗传算法求解TSP问题实验;7.基于神经网络的模式识别实验;8.基于神经网络的优化计算实验。每个实验包括有:实验目的、实验内容、实验条件、实验要求、实验步骤和实验报告等六个项目。 本实验指导书包括两个部分。第一个部分是介绍实验的教学大纲;第二部分是介绍八个实验的内容。 由于编者水平有限,本实验指导书的错误和不足在所难免,欢迎批评指正。 人工智能课程组 2011年9月

目录 实验教学大纲 (1) 实验一产生式系统实验 (4) 实验二模糊推理系统实验 (7)

实验三A*算法实验I (13) 实验四A*算法实验II (17) 实验五遗传算法实验I (19) 实验六遗传算法实验II (26) 实验七基于神经网络的模式识别实验 (29) 实验八基于神经网络的优化计算实验 (35)

实验教学大纲 一、学时:16学时,一般安排在第9周至第16周。 二、主要仪器设备及运行环境:PC机、Visual C++ 6.0、Matlab 7.0。 三、实验项目及教学安排 序号实验名称实验 平台实验内容学 时 类型教学 要求 1 产生式系统应用VC++ 设计知识库,实现系统识别或 分类等。 2 设计课内 2 模糊推理系统应 用Matla b 1)设计洗衣机的模糊控制器; 2)设计两车追赶的模糊控制 器。 2 验证课内 3 A*算法应用I VC++ 设计与实现求解N数码问题的 A*算法。 2 综合课内 4 A*算法应用II VC++ 设计与实现求解迷宫问题的A* 算法。 2 综合课内 5 遗传算法应用I Matla b 1)求某一函数的最小值; 2)求某一函数的最大值。 2 验证课内 6 遗传算法应用II VC++ 设计与实现求解不同城市规模 的TSP问题的遗传算法。 2 综合课内7 基于神经网络的Matla1)基于BP神经网络的数字识 2 验证课内

人工智能实验报告

《一人工智能方向实习一》 实习报告 专业:计算机科学与技术 班级:12419013 学号: 姓名: 江苏科技大学计算机学院 2016年3月

实验一数据聚类分析 一、实验目的 编程实现数据聚类的算法。 二、实验内容 k-means聚类算法。 三、实验原理方法和手段 k-means算法接受参数k ;然后将事先输入的 n个数据对象划分为 k个聚类以便使得 所获得的聚类满足:同一聚类中的对象相似度较高 四、实验条件 Matlab2014b 五、实验步骤 (1)初始化k个聚类中心。 (2)计算数据集各数据到中心的距离,选取到中心距离最短的为该数据所属类别。 (3)计算(2)分类后,k个类别的中心(即求聚类平均距离) (4)继续执行(2)(3)直到k个聚类中心不再变化(或者数据集所属类别不再变化) 六、实验代码 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % mai n.m % k-mea ns algorithm % @author matcloud %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% clear; close all ; load fisheriris ; X = [meas(:,3) meas(:,4)]; figure; plot(X(:,1),X(:,2), 'ko' ,'MarkerSize' ,4); title( 'fisheriris dataset' , 'FontSize' ,18, 'Color' , 'red'); [idx,ctrs] = kmea ns(X,3); figure; subplot(1,2,1); plot(X(idx==1,1),X(idx==1,2), 'ro' , 'MarkerSize' ,4); hold on;

昆明理工大学人工智能第二次实验报告

理工大学信息工程与自动化学院学生实验报告 ( 2013 — 2014 学年第 1 学期) 课程名称:人工智能开课实验室:信自楼445 2013 年12月 20日 一、上机目的及容 1.上机容 用确定性推理算法求解教材65-66页介绍的八数码难题。 2.上机目的 (1)复习程序设计和数据结构课程的相关知识,实现课程间的平滑过渡; (2)掌握并实现在小规模状态空间中进行图搜索的方法; (3)理解并掌握图搜索的技术要点。 二、实验原理及基本技术路线图(方框原理图或程序流程图) (1)设计并实现程序,求解出正确的解答路径; (2)对所设计的算法采用大O符号进行时间复杂性和空间复杂性分析; (3)对一般图搜索的技术要点和技术难点进行评述性分析。 三、所用仪器、材料(设备名称、型号、规格等或使用软件) 1台PC及VISUAL C++6.0软件 四、实验方法、步骤(或:程序代码或操作过程)

建立工程后建立5个source Files文件分别为 1.AttributeValue.cpp #include "AttributeValue.h" #include "base.h" AttributeValue::AttributeValue(std::string const& instring) : m_value(instring) { } bool AttributeValue::GetType() { if (m_value == "P") { return true; } else if (m_value == "N") { return false; } else { throw DataErrException(); } } 2.basefun.cpp #include float log2 (float x) { return 1.0 / log10(2) * log10(x); } float calEntropy(float prob) { float sum=0; if (prob == 0 || prob == 1) { return 0; } sum -= prob * log2(prob); sum -= (1 - prob) * log2 ( 1 - prob ); return sum;

人工智能实验报告

****大学 人工智能基础课程实验报告 (2011-2012学年第一学期) 启发式搜索王浩算法 班级: *********** 学号: ********** 姓名: ****** 指导教师: ****** 成绩: 2012年 1 月 10 日

实验一 启发式搜索算法 1. 实验内容: 使用启发式搜索算法求解8数码问题。 ⑴ 编制程序实现求解8数码问题A *算法,采用估价函数 ()()()() w n f n d n p n ??=+???, 其中:()d n 是搜索树中结点n 的深度;()w n 为结点n 的数据库中错放的棋子个数;()p n 为结点n 的数据库中每个棋子与其目标位置之间的距离总和。 ⑵ 分析上述⑴中两种估价函数求解8数码问题的效率差别,给出一个是()p n 的上界的()h n 的定义,并测试使用该估价函数是否使算法失去可采纳性。 2. 实验目的 熟练掌握启发式搜索A *算法及其可采纳性。 3. 实验原理 使用启发式信息知道搜索过程,可以在较大的程度上提高搜索算法的时间效率和空间效率; 启发式搜索的效率在于启发式函数的优劣,在启发式函数构造不好的情况下,甚至在存在解的情形下也可能导致解丢失的现象或者找不到最优解,所以构造一个优秀的启发式函数是前提条件。 4.实验内容 1.问题描述 在一个3*3的九宫格 里有1至8 八个数以及一个空格随机摆放在格子中,如下图: 初始状态 目标状态 现需将图一转化为图二的目标状态,调整的规则为:每次只能将空格与其相邻的一个数字进行交换。实质是要求给出一个合法的移动步骤,实现从初始状态到目标状态的转变。 2.算法分析 (1)解存在性的讨论 对于任意的一个初始状态,是否有解可通过线性代数的有关理论证明。按数组存储后,算出初始状态的逆序数和目标状态的逆序数,若两者的奇偶性一致,则表明有解。 (2)估价函数的确定

人工智能实验报告

人工智能 九宫格重移——搜索 成员:赵春杰 2009210665 羊森 2009210653 黄鑫 2009210 周成兵 2009210664 王素娟 2009210644

1.问题描述: 八数码问题也称为九宫问题。在3×3的棋盘,摆有八个棋子,每个棋子上标有1至8的某一数字,不同棋子上标的数字不相同。棋盘上还有一个空格,与空格相邻的棋子可以移到空格中。要求解决的问题是:给出一个初始状态和一个目标状态,找出一种从初始转变成目标状态的移动棋子步数最少的移动步骤。所谓问题的一个状态就是棋子在棋盘上的一种摆法。棋子移动后,状态就会发生改变。解八数码问题实际上就是找出从初始状态到达目标状态所经过的一系列中间过渡状态。 2.九宫重移有无答案检查(逆序数) 我们把每个9宫格横向展开,如第一个123456789,我们把左边数大于右边数的组数称为这个九宫格的逆序数,显然123456789的逆序数为0;考虑横向平移,那么逆序数的增量为2或0或-2;纵向平移,逆序数的增量为4或0或-4;但147258369的逆序数为奇数。所以147258369是无解的情况。由此也可以类推当将9宫格展开后,如果数据序列的逆序数为奇数,则此数据序列对应的九宫格是无解的。 3.BFS算法 队列: Queue open = new Queue();存放待扩展的节点 List: List closed = new List();存放已被扩展过的节点 ArrayList map = new ArrayList();//存放答案 HashTale: Hashtable table = new Hashtable();构造哈希表以方便查找

人工智能_实验报告

实验一:知识表示方法 一、实验目的 状态空间表示法是人工智能领域最基本的知识表示方法之一,也是进一步学习状态空间搜索策略的基础,本实验通过牧师与野人渡河的问题,强化学生对知识表示的了解和应用,为人工智能后续环节的课程奠定基础。 二、问题描述 有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 四、实验组织运行要求 本实验采用集中授课形式,每个同学独立完成上述实验要求。

五、实验条件 每人一台计算机独立完成实验。 六、实验代码 Main.cpp #include #include"RiverCrossing.h" using namespace std; //主函数 void main() { RiverCrossing::ShowInfo(); int n, c; cout<<"Please input n: "; cin>>n; cout<<"Please input c: "; cin>>c; RiverCrossing riverCrossing(n, c); riverCrossing.solve(); system("pause"); } RiverCrossing.h #pragma once #include //船 class Boat { public: static int c; int pastor;//牧师 int savage;//野人 Boat(int pastor, int savage); }; //河岸状态 class State

人工智能及其应用-概论

《人工智能及其应用》 教学讲义 第一章人工智能概论

第一章人工智能概论 一、人工智能的基本概念 人工智能(Artificial Intelligence,简称AI)这一术语是1956年在美国的Dartmouth大学召开的世界第一次AI会议上由麻省理工学院的青年数学教师John McCarthy提议而使用的。AI这一学科至今已有50多年的历史,在国际上已确认AI是当代高科技的核心之一。 AI是一个广义词,各有说法,很难给出准确的定义或一般性的定义。其基本含义是: AI是用机器(计算机或智能机)来模仿人类的智能行为。 AI也叫机器智能,是研究如何使机器具有认识问题与解决问题的能力,研究如何使机器具有感知功能(如视、听、嗅)、思维功能(如分析、综合、计算、推理、联想、判断、规划、决策)、行为功能(如说、写、画)及学习、记忆等功能。 所以,如果一个计算机系统具有某种学习能力,能够对有关问题给出正确的答案,而使用的方法与人类相似,还能解释系统的智能活动,那么,这种计算机系统便认为具有某种智能。 人工智能用计算机技术的概念和方法对智能进行研究,因此,它从根本上提供了一个全新的理论基础。作为一门学科,人工智能的目的是了解使智能得以实现的原理;作为一门技术,它的最终目的是设计出完全与人类智能相媲美的智能计算机系统。 到目前为止,计算机作为一种最有效的信息处理工具,人们已片刻离不开它。但是,与人脑相比,计算机的智能在许多方面还不及婴幼儿。如果计算机具有一定的智能,能够模拟人类的智能活动,成为人脑的延伸,那么计算机对人类的贡献和作用将产生不可估量的影响,人类将步入智能机器人的时代。 尽管科学家们尚未达到这个目的,但在使计算机更加智能化方面已经取得了很大的进展,许多AI 计算机系统在不少领域实际上已超出了高水平的人类技艺,如计算机可以下出极高水平的象棋,用来诊断某种疾病,用来发现数学概念。 AI是使技术适应于人类的钥匙,是自动化技术向智能技术方向发展的关键,也是揭示人类智能和人脑奥秘的有力工具。 二、人工智能的研究内容 要了解人工智能的研究内容,必须先搞清楚什么是人类的智能。“智能”词源来自拉丁语Legere,字面意思是采集、收集和汇集,并由此进行选择。而Intellegere意思是从中进行选择,进而理解、领悟和认识。 因此,人工智能的研究内容应包括三个方面: 1.知识表达(Knowledge Representation): ——研究如何在机器中表示知识,使知识形式化、模型化,用以建立合适的符号逻辑系统。 2.知识获取(Knowledge Acquisition): ——研究机器如何从各种知识源获取知识。 3.知识处理(Knowledge Inference)或问题求解(Peoblem Solving): ——运用存贮于机器中的知识进行相应知识处理,并推出结论。

人工智能实验报告

人工智能实验报告 实验名称:模糊方法实现电热箱的闭环控制实验 模糊逻辑控制(Fuzzy Logic Control)简称模糊控制(Fuzzy Control),是以模糊集合论、模糊语言变量和模糊逻辑推理为基础的一种计算机数字控制技术。1965年,美国的L.A.Zadeh 创立了模糊集合论;1973年他给出了模糊逻辑控制的定义和相关的定理。1974年,英国的E.H.Mamdani首先用模糊控制语句组成模糊控制器,并把它应用于锅炉和蒸汽机的控制,在实验室获得成功。这一开拓性的工作标志着模糊控制论的诞生。 模糊控制实质上是一种非线性控制,从属于智能控制的范畴。模糊控制的一大特点是既具有系统化的理论,又有着大量实际应用背景。模糊控制的发展最初在西方遇到了较大的阻力;然而在东方尤其是在日本,却得到了迅速而广泛的推广应用。近20多年来,模糊控制不论从理论上还是技术上都有了长足的进步,成为自动控制领域中一个非常活跃而又硕果累累的分支。其典型应用的例子涉及生产和生活的许多方面,例如在家用电器设备中有模糊洗衣机、空调、微波炉、吸尘器、照相机和摄录机等;在工业控制领域中有水净化处理、发酵过程、化学反应釜、水泥窑炉等的模糊控制;在专用系统和其它方面有地铁靠站停车、汽车驾驶、电梯、自动扶梯、蒸汽引擎以及机器人的模糊控制等。 模糊控制是以模糊集合论、模糊语言变量和模糊逻辑推理为基础的微机数字控制。它能模拟人的思维,构成一种非线性控制,以满足复杂的、不确定的过程控制的需要,是一种典型的智能控制。模糊控制系统类似于常规的微机控制系统,如下图所示: 图1 模糊控制系统的构成图 一、实验目的 1. 学习由已知对象建立一个双入单出模糊控制器; 2. 掌握利用模糊控制器实现温度控制的方法。 二、实验原理及内容 模糊控制器最常用的都是二维的,其输入变量有两个(X1,X2),输出变量只有一个(Y)。在实际控制系统中,X1一般取为误差信号,X2一般取误差的变化,由于同时考虑到误差和误差变化的影响,所以才能保证系统稳定,不致于产生振荡。模糊控制系统的方框图如下图所示:

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