- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
-刘浩-实验
人工智能导论
实验一 A*算法Python实现
实验环境:
Python(英语发音:/ˈpaɪθən/), 是一种面向对象、解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年。Python语法简洁而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够把用其他语言制作的各种模块(尤其是C/C++)很轻松地联结在一起。常见的一种应用情形是,使用Python快速生成程序的原型(有时甚至是程序的最终界面),然后对其中有特别要求的部分,用更合适的语言改写,比如3D游戏中的图形渲染模块,性能要求特别高,就可以用C++重写。
实验目的:
了解和掌握Python语言的使用方法,并能利用它解决实际应用中所遇到的问题;同时实现经典的A*算法,加深对它的印象,并巩固对人工智能领域中最重要的方面“搜索”的理解。
实验内容:
利用python语言实现经典的A*算法,其中A*(A-Star)算法是一种静态路网中求解最短路最有效的直接搜索方法。估价值与实际值越接近,估价函数取得就越好。
它的原理在于A*[1] (A-Star)算法是一种静态路网中求解最短路最有效的直接搜索方法。
注意是最有效的直接搜索算法。之后涌现了很多预处理算法(ALT,CH,HL等等),在线查询效率是A*算法的数千甚至上万倍。
公式表示为: 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)等于最短距离,那么搜索将严格沿着最短路径进行, 此时的搜索效率是最高的。
如果 估价值实际值,搜索的点数少,搜索范围小,效率高,但不能保证得到最优解。
实验步骤:
1.算法的基本描述
采用数组的方式来进行A*查找
首先定义Map类,作为障碍迷宫的地图,里头会根据地图的大小,生成四个跟地图大小一致的列表:
self._nodeparentx = [] 节点的父节点X信息
self._nodeparenty = [] 节点的父节点Y信息
self._nodegcost = [] 节点的权值g
self._nodehcost = [] 节点的估算开销h
而地图本身则是一个一维列表即self._maze = []
于是,python自身对小整数的优化,就导致我们的算法的优化
本算法采用起点,终点同时搜索的办法:
起点使用A*搜索;
终点采用波纹扩散搜索 ,也就是说随便找一个点,只要不在close列表,就扩展其相邻节点,直到无路可寻或找到起点搜索过来的节点为止;
一旦起点终点的搜索路径相遇,表示实际上已经有一条不是最优的路径了,直接返回该路径,对于一般的大面积零星障碍地图,A*肯定比终点算法快;如果从终点的搜索更快,说明该地图障碍密集,因此,这里不考虑再去用A*搜索剩余路径了,返回起点路径 + 终点路径的集合
在 本代码中,就是写了个例子,其障碍图几乎就是一个从上到下,又从下到上,仅余一个格子让其通过的这么一个极度疏密的迷宫
2.算法的实现
# -*- coding: utf-8 -*-
from time import time
# A*地图可达数据管理接口。
class AMap:
def __init__(self, width, height, maze):
self._width = width
self._height = height
self._mask = -1
self._maze = maze # 直接指向内存结构
self._nodeparentx = []
self._nodeparenty = []
self._nodegcost = []
self._nodehcost = []
self._size = width * height
for i in range(self._size):
self._nodeparentx.append(-1)
self._nodeparenty.append(-1)
self._nodegcost.append(0)
se
您可能关注的文档
- --线性代数(本科)a卷.doc
- --空间向量的线性运算.doc
- --线性代数试卷b.doc
- --美国大型it企业智能电网.doc
- --自动控制原理b.doc
- --角函数定义.doc
- --讲复习平面向量新课程.doc
- --皇御资产早评联储加息未定金银低位反弹.doc
- --词种与词根a.doc
- --角变换与解角形平面向量.doc
- 泰山学院设计相关.pdf
- 概率实验样品点样本空间4lecture2-prob 1讲座2 Prob.pdf
- 课件检验报告kj400f-d06ac4558 cest.pdf
- hdmi产品20066yilou liu代表历史功能customer presentation客户ww2606.pptx
- 金属产品报价单.pdf
- a家庭区域车队性能可靠性由p fleet brief.pdf
- 机器人操作说明一步-irc5工作室跟踪返回信息区r18 gettingstarted degetstarted.pdf
- 人教版语文级其它灯光课件.pptx
- 有效圣萨尔瓦多国际mslp.pdf
- 人教版八级下册英语unit6样品课件份section a 1.pdf
文档评论(0)