人工智能实验算法分析文档.docx

  1. 1、本文档共30页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多

人工智能各算法实验分析

及指导

撰写时间:2012年6月15日

实验一 A*算法实验

一、实验目的:

熟悉和掌握启发式搜索的定义、估价函数和算法过程,并利用A*算法求解N数码难题,理解求解流程和搜索顺序。

二、实验原理:

A*算法是一种有序搜索算法,其特点在于对估价函数的定义上。对于一般的有序搜索,总是选择f值最小的节点作为扩展节点。因此,f是根据需要找到一条最小代价路径的观点来估算节点的,所以,可考虑每个节点n的估价函数值为

两个分量:从起始节点到节点n的代价以及从节点n到达目标节点的代价。三、实验环境:

Windows操作系统,C语言或Prolog语言。四、实验内容:

分别以8数码和15数码为例实际求解A*算法。

画出A*算法求解框图。

分析估价函数对搜索算法的影响。

分析A*算法的特点。

六、实验报告要求:

A*算法流程图和算法框图。

试分析估价函数的值对搜索算法速度的影响。

根据A*算法分析启发式搜索的特点。

提交程序清单。

知识点归纳

搜索策略的知识点主要可以分为六块内容来进行讲解:

搜索的基本概念

状态空间的盲目搜索

状态空间的启发式搜索

与/或树的盲目搜索

与/或树的启发式搜索

博弈树的启发式搜索

α-β 剪枝技术

很多问题都可以用到人工智能中的搜索策略来进行问题求解,比如迷宫问题、博弈问题、8皇后问题、旅行商问题、排课问题、背包问题等等。

对于本实验所要求解的8数码问题,需要掌握的知识点主要有几下这些:

一般图搜索算法流程

广度优先和深度优先搜索

代价树搜索

启发信息和评估函数

A算法

A*算法

算法流程

初始化Open表和Closed表。

把图搜索初始化节点放入Open表中。

Open若非空,取出表头的节点x。

若x就是目标节点,返回搜索成功。

将该节点x从Open表中删除并放入Closed表中。

根据图信息产生x的孩子节点y1、y2、??yn。

标记x为yi的父节点。

若yi从未在Open表和Closed表中出现过,根据评估函数计算yi的评估值并放入Open表中。

若yi在Open表中出现过且当前yi的评估值较小,更新Open表中该节点的评估值并重置该节点的父节点为x。

若yi在Closed表中出现过且当前yi的评估值较小,更新Closed表中该节点的评估值并重置该节点的父节点未x,同时将其从Closed表中删除并重新移入Open表。

若x还有子节点yi+1,重复循环8、9、10三个步骤。

若x没有子节点了,将Open表中已有的节点根据相应的搜索策略进行排序,

然后回到步骤3。

若Open表已空,也没有搜索成功,则返回搜索失败,不存在该路径。

算法伪代码

A*算法搜索过程中设置两个表:Open和Closed。Open表保存了所有已生成而未考察的节点,Closed表中记录已访问过的节点。算法中有一步是根据估价函数重排Open表。这样循环中的每一步只考虑Open表中状态最好的节点。

A*算法伪码描述如下:

[Copytoclipboard][-]

CODE:

酝t.扛_5eaEch{l

句en=[起始节点];

Closed=[];

while (Open表非空}

从Open中取得—个节点正并从OP氐I表中删棕o

辽 {X是目标节点l

求得路径P虹H;

迡回路径P釭H;

foE{每一个X的子节点订

if 仅不在0P邸表衵CLO宝表中]I

求Y的估价值;

并将Y插入OP邸表中;

II还设有排序

吐seif 仅在0芘N表中}

if (Y的估价值小千OP皿表的估价值}

更祈OP邸表中的估价值;

吐seIIY在CLO五表中

if (Y的估价值小千CLO亚表的估价值,

更祈CLO亚表中的估价值;

从CLO五表中移出节点,并桢入0诧N表中;

将X节点插入CLO宝表中;

按照估价值将0印双表中的节点排序;

}IIendfoE

}//endwhile

}IIend f皿G

算法分析

对于步骤1,Open表和Closed表只是数据结构上的一种形式,至于在写代码时到底是使用栈式存储结构还是队列式存储结构没有严格要求,需要根据具体问题具体分析用哪一种数据结构,最好是能够选择算法效率更高的。

对于步骤2,一般而言,这里的初始节点代表的是一个状态,也

文档评论(0)

tianya189 + 关注
官方认证
内容提供者

该用户很懒,什么也没介绍

认证主体阳新县融易互联网技术工作室
IP属地上海
统一社会信用代码/组织机构代码
92420222MA4ELHM75D

1亿VIP精品文档

相关文档