大连理工大学《人工智能》大作业题目及要求6.docx

上传人:b****0 文档编号:5798 上传时间:2022-09-30 格式:DOCX 页数:23 大小:525.72KB
下载 相关 举报
大连理工大学《人工智能》大作业题目及要求6.docx_第1页
第1页 / 共23页
大连理工大学《人工智能》大作业题目及要求6.docx_第2页
第2页 / 共23页
大连理工大学《人工智能》大作业题目及要求6.docx_第3页
第3页 / 共23页
大连理工大学《人工智能》大作业题目及要求6.docx_第4页
第4页 / 共23页
大连理工大学《人工智能》大作业题目及要求6.docx_第5页
第5页 / 共23页
点击查看更多>>
下载资源
资源描述

大连理工大学《人工智能》大作业题目及要求6.docx

《大连理工大学《人工智能》大作业题目及要求6.docx》由会员分享,可在线阅读,更多相关《大连理工大学《人工智能》大作业题目及要求6.docx(23页珍藏版)》请在冰豆网上搜索。

大连理工大学《人工智能》大作业题目及要求6.docx

题目:

《人工智能》课程设计--农夫过河

1.谈谈你对本课程学习过程中的心得体会与建议?

通过对本学科的学习使我对人工智能有了进一步的理解与认识,让我知道了何用计算机来模拟人类智能,如何用计算机实现诸如问题求解、规划推理、模式识别、知识工程、自然语言处理、机器学习等只有人类才具备的智能,使得计算机更好的为人类服务。

这是一门极富挑战的科学,是一门包含十分广泛的科学,它由不同的领域组成,如机器学习,计算机视觉等等,总的来说人工智能研究的一个主要目标是使机器能够胜任一些通常需要人类智能才能完成的复杂工

题目:

农夫过河问题

内容:

有一农夫要将自己的羊、菜和狼等3件物品需运过河。

有一个农夫带一只狼、一只羊和一篮菜过河。

假设农夫每次只能带一样东西过河,考虑安全,无农夫看管时,狼和羊不能在一起,羊和菜篮不能在一起.试设计求解该问题的状态空间,并画出状态空间图.

一、问题分析和任务定义

6

根据对象的状态分为过河

(1)和不过河(0),此对象集合就构成了一个状态空间。

问题就是在这个状态空间内搜索一条从开始状态到结束状态的安全路径。

显然,其初始状态为四对象都不过河,结束状态为四对象全部过河。

这里利用图的广度优先算法思想处理,并采用队列存储,灵活运用二进制的特点完美解决问题。

对于农夫,狼,羊,菜组成一个4位二进制代码,即4位二进制数分别代表了农夫、狼、菜和羊,状态空间为16,初始状态为(0000),目标为(1111)。

解决问题的方法是,首先将初始状态(0000)入队(第一层),再将由初始状态(0000)可达到的所有安全状态入队(第二层),能由已有的安全状态到达的安全且不重复的所有状态入队(第三层),依次如此直到状态(1111)为止。

对当前对象是否安全的判断,若当农夫与羊不在一起时,狼与羊或羊与菜在一起是不安全的,其他情况是安全的。

二、概要设计和数据结构的选择

求解这个问题的最简单的方法是一步一步进行试探,每一步都搜索所有可能的选择,对前一步合适的选择再考虑下一步的各种方案。

用计算机实现上述求解的搜索过程可以采用两种不同的策略:

一种是广度优先(breadth_first)搜索,另一种是深度优先(depth_first)。

此处采用广度优先算法。

广度优先的含义就是在搜索过程中总是首先搜索下面一步的所有可能状态,然后再进一步考虑更后面的各种情况。

要实现广度优先

搜索,一般都采用队列要模拟农夫过河问题,首先需要选择一个对问题中每个角色的位置进行描述的方法。

一个很方便的办法是用四位二进制数顺序分别表示农夫、狼、菜和羊的位置。

例如用0表示农夫或者某东西在河的南岸,1表示在河的北岸。

因此整数5(其二进制表示为0101)表示农夫和菜在河的南岸,而狼和羊在北岸。

农夫、狼、羊、菜

Loca

农夫、狼、羊、

Loca

tion

tion

0000

0

1000

8

表1物品的所有位置状态

0001

1

1001

9

0010

2

1010

10

0011

3

1011

11

0100

4

1100

12

0101

5

1101

13

0110

6

1110

14

0111

7

1111

15

⑴数据结构的选择:

本程序采用队列处理。

typedefstructnode

CreateQ

safe

location

main

enQueue

DFS_path

click

printf

0000

重复

0001

重复

1011

重复

1011

安全

0010

安全

1110

安全

0110

安全

1001

安全

0011

不安全

1010

不安全

1111

过河成功

0100

安全

1101

重复

初始状态

0000

0001

安全

1101

安全

0001

重复

1110

安全

0110

安全

1010

不安全

0101

不安全

1100

不安全

1100

不安全

1001

安全

0000

重复

0001

1000 重复

不安全

开始

创建队列

Ox00入队

队空?

访

问结束?

N

取队头赋给location

for(1~8;movers左移)

Y

movers与

农夫同侧

N

ID=开始

ID=下一步

Y

newlocation=

location=15

已点开始?

Y

N

带着movers移位

根据location的值按

位置分别输出四物

Safe?

访问?

N

N

Y

Location=0?

Y newlocation入队

visited[newlocation]=location

过河成功

location=

visited[location]

结束

7

8

9

10

11

12

数据结构与算法.北京:

中国铁道出版社,2007年6月。

[2]严蔚敏,吴伟民.数据结构(C语言版).清华大学出版社。

[3]网站CSDN八、附录#include""#include<>#include<>#include""#include""#include<>#include<>

BOOLWINAPIMain_Proc(HWNDhWnd,UINTuMsg,WPARAMwParam,LPARAMlParam)

{

switch(uMsg)

{

HANDLE_MSG(hWnd,WM_INITDIALOG,Main_OnInitDialog);

13

HANDLE_MSG(hWnd,WM_COMMAND,Main_OnCommand);HANDLE_MSG(hWnd,WM_CLOSE,Main_OnClose);

}

returnFALSE;

}

BOOLMain_OnInitDialog(HWNDhwnd,HWNDhwndFocus,LPARAMlParam)

{

returnTRUE;

}

constintmaxlen=20; //定义maxlen的长度

typedefstructnode //顺序队列类型定义

{

intf,r; //定义头尾指针

intdata[maxlen];

}SeqQueue;

voidInitQueue(SeqQueue*Q) //置空队列

{

Q->r=0;

Q->f=0;

}

intisEmptyQueue_seq(SeqQueue*Q) //判断队列是否为空

23

{

return(Q->f==Q->r);

}

voidenQueue_seq(HWNDhwnd,SeqQueue*Q,intx)//入队

{

if((Q->r+1)%maxlen==Q->f)

MessageBox(hwnd,TEXT("队列已满!

"),TEXT("警告"),MB_OK);else

{

Q->data[Q->r]=x;

Q->r=(Q->r+1)%maxlen;

}

}

voiddeQueue_seq(HWNDhwnd,SeqQueue*Q) //出队

{

if(Q->f==Q->r)

MessageBox(hwnd,TEXT("队列已空!

"),TEXT("警告"),MB_OK);else

Q->f=(Q->f+1)%maxlen;

}

intfrontQueue_seq(HWNDhwnd,SeqQueue*Q) //取队头元素

{

if(Q->f==Q->r)

{

MessageBox(hwnd,TEXT("队列已空!

"),TEXT("警告"),MB_OK);return0;

}

else

return(Q->data[Q->f]);

}

//ox01:

0000

0001

rabbit

//ox02:

0000

0010

cabbage

//ox04:

0000

0100

fox

//ox08:

0000

1000

farmer

intfarmer(intlocation) //判断农夫的位置

{

return(0!

=(location&0x08));

}

intfox(intlocation) //判断狼的位置

{

return(0!

=(location&0x04));

}

intcabbage(intlocation) //判断菜的位置

{

return(0!

=(location&0x02));

}

intrabbit(intlocation) //判断羊的位置

{

return(0!

=(location&0x01));

}

intsafe(intlocation) //安全状态的判断函数

{

if((rabbit(location)==cabbage(location))&&(rabbi

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1