社区
数据结构与算法
帖子详情
A*算法能不能保证得到最优解?
NewStarSE
2005-06-25 10:59:43
我在陆汝今(钅今)的书上看到的结论是说保证能得到最优解。但蔡自兴的书上说是不能保证得到最优解。
到底谁对?
...全文
4905
21
打赏
收藏
A*算法能不能保证得到最优解?
我在陆汝今(钅今)的书上看到的结论是说保证能得到最优解。但蔡自兴的书上说是不能保证得到最优解。 到底谁对?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
熊主任
2005-07-26
打赏
举报
回复
看西交那本人工智能证明a*算法能求出最优解地证明时,必须注意有一个假设前提,那就是估价函数是最优的。所以我认为可以这么理解,如果用这个算法在合理的时间内找到合理的解,它就是a*算法,反之就不是。
ZeroGts
2005-07-25
打赏
举报
回复
1
蔡、傅是这么说的:算法要是可采用的,需要满足4个充分条件,除了前面提到的3个条件,还有一个:在目标节点处,需要f(n)≡f*(n),而A*算法并没有这一限制,所以不能保证得到最优解。
由
1、估值函数:f(n)=g(n)+h(n)
3、h(x)≤h*(x),对于任意的节点x都成立
可知在目标节点处有h(x)≤h*(x)=0,h(x)=0,f(n)=g(n)+0=f*(n)。所以f(n)≡f*(n)这个条件是有的。
那么A*可以保证最优解。
zorro09
2005-07-18
打赏
举报
回复
看陆汝钅今的书的人说能。看蔡自兴的书的人说不能。
ZeroGts
2005-07-17
打赏
举报
回复
在适合的环境中正确地使用A*可以保证最优解;
否则就是错误的A*,也就不是A*了。
ensoniq
2005-07-14
打赏
举报
回复
楼主再做点贡献吧,把几个函数的定义重新再明确一下。
另,要否定最优解最有说服力的办法还是举出反例,这个有没有的?
熊主任
2005-07-12
打赏
举报
回复
如果选中了一个好的估价函数,那么就算找不到最优解那也能找到一个相当不错的解,否则很容易退化成深度优先搜索,那么效率和找到的结果可能就都不理想了。
NewStarSE
2005-06-30
打赏
举报
回复
没人了?
NewStarSE
2005-06-29
打赏
举报
回复
TO: ensoniq
f(n)是由g(n)和h(n)两部分构成,而g(n)一般是取的实际发生的耗费,这个值显然有:g(n)≥g*(n),所以通常都不必考虑它。
不过在目标节点处,是不是能保证g(x)≡g*(x)呢?如果等式恒成立,则在目标节点处必有f(n)≡f*(n),那么条件4就是多余的。反之就有f(n)〉f*(n),蔡的考虑就是对的。
写到这里,终于明白了:A*算法并不要求g(x)≡g*(x),这也是作者们的分歧所在。但我现在认为也许这一条件已经隐含在其它条件中,我再想一想,也欢迎各位继续讨论。
thirdapple
2005-06-28
打赏
举报
回复
蔡是对的
NewStarSE
2005-06-28
打赏
举报
回复
看各位的,越看越晕。我干脆把书上的抄下来,请各位发表高见。
先看A*算法的定义(这个应该是公认的):
1、估值函数:f(n)=g(n)+h(n)
g(n)是已经发生的耗费,h(n)是将要发生的耗费的估值
2、f(n)单调非减
3、h(x)≤h*(x),对于任意的节点x都成立
4、从优先队列的队头取出节点
(a)检测该节点是否为目标节点,是,则求得解,返回该节点。
(b)不是目标节点,则根据f(n)的大小展开子节点到优先队列中(还有一些细节,省了)
5、重复第4步,至队列为空
陆是这么说的:由于H*算法是可采用的(即求出的第一个可行解就是最优解),而A*算法只不过是将与H*算法的限制(即h(x)≤h*(x))用于A算法而得到的,所以A*算法也是可采用的,即A*算法保证得到最优解。
蔡、傅是这么说的:算法要是可采用的,需要满足4个充分条件,除了前面提到的3个条件,还有一个:在目标节点处,需要f(n)≡f*(n),而A*算法并没有这一限制,所以不能保证得到最优解。
信谁的呢?
galois_godel
2005-06-28
打赏
举报
回复
看你怎么搜了,你可以搜可行解,这时找到的就不一定是最优解,如果你搜索的最优解,那就可以保证
sun3411
2005-06-28
打赏
举报
回复
决定于h(n)吧
h(n)<=实际该点到目标最近距离
能得到最优解
h(n)==0就是广度优先搜索
h(n)>实际该点到目标最近距离 不能得到最优解 效率较高
ensoniq
2005-06-28
打赏
举报
回复
请教下,目标节点处h(n)和h*(n)难道不是都为0吗?f(n)怎么会不等于f*(n)呢?那么什么情况下第四个条件不成立?
NowCan
2005-06-27
打赏
举报
回复
我记得是有条件的,和启发函数有关。但是具体的忘了。
Tranquillo
2005-06-27
打赏
举报
回复
可以,如果存在
tatbaby
2005-06-27
打赏
举报
回复
如果解存在,保证找到的最优解
这个 王永庆的《人工智能与原理》里面给了证明……不过我没去看他怎么证的。不过前提是,你设计的算法确实是A*算法,哈哈
fireofhell
2005-06-27
打赏
举报
回复
如果存在的话,就可以找到
mathe
2005-06-27
打赏
举报
回复
不能保证
NewStarSE
2005-06-27
打赏
举报
回复
UP
thirdapple
2005-06-27
打赏
举报
回复
我觉得,从A*算法本身而言,只要启发函数能够保证无后效性就可以保证得到最优解
加载更多回复(1)
基于图搜索的规划
算法
之A*家族(二):双向A*
算法
本篇介绍了双向 A*
算法
,双向 A*
算法
等价于在起点与终点分别安放一个 A*
算法
,各自受到启发式函数的引导直到彼此的已探索曲域重叠,然后就返回找到的路径。再次强调,双向 A*
不能
保证
一定能找到
最优解
,但是实际应用中,找到的解不会比
最优解
差很多。双向 A* 以损失一点点的最优性换得了更加均衡的计算成本(更换起点与终点所引起的计算成本的差别)。但是,双向 A*
算法
对时间的把控度还不够强,不同的问题(G\mathbb{G}G不同、xIx_IxI不同、xGx_GxG。.........
启发式搜索
一,启发式搜索 相对于经典搜索,搜索方式只取决于搜索空间的直观结构,和数据之间的直观关系(一般就是朴素的大小关系),启发式
算法
引入了一种基于数据的抽象
【
算法
】A*
算法
与启发函数
写这篇是因为看到国外一篇讲的巨好的关于A*
算法
的文章——Introduction to A*。图文并茂,而且讲了一些A*
算法
的来龙去脉,有些观点也醍醐灌顶啊,所以赶紧来总结一下。 A*
算法
为什么叫这个名这个从wiki上看来的,一开始是57年提出的Dijkstra
算法
,然后64年Nils Nilsson提出了A1
算法
,是一个启发式搜索
算法
,而后又被改进成为A2
算法
,直到68年,被Peter E. Ha
【规划】A*
算法
以及c++实现
A*
算法
A*
算法
的核心在于估价函数的设计上,如下式所示: 其中 称为耗散函数,表示从起始节点 到节点 n 的实际代价; 称为启发函数,表示节点 到目标节点 的估计代价; 表示从起始节点经由节点 到目标节点的估计代价。 同Dijkstra
算法
类似,A*
算法
也维持一个Open表。Open表中节点的优先级是依据 的大小排列的, 值越小,被搜索到的优先级越高。为
保证
能搜索到最...
路径规划A*
算法
A*
算法
是在Dijkstra
算法
上进行改进,毕竟,我们是知道终点和起点的位置信息的,Dijkstra
算法
完全是四面八方全都找,然而我们既然已经知道,比方说重点在起点的北方,那么完全可以直接往北方搜索。所以
算法
综合了Best-First Search和Dijkstra
算法
的优点:在进行启发式搜索提高
算法
效率的同时,可以
保证
找到一条最优路径(基于评估函数)。在此
算法
中,如果以g(n)表示从起点到任意顶点
数据结构与算法
33,026
社区成员
35,336
社区内容
发帖
与我相关
我的任务
数据结构与算法
数据结构与算法相关内容讨论专区
复制链接
扫一扫
分享
社区描述
数据结构与算法相关内容讨论专区
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章