A*算法大牛进,高分!!

问题描述

A*算法大牛进,高分!!

A*算法中为什么当h>=h*时,不能保证找到最优解,求大神解答。

解决方案

搜索算法的区别是如何重排open表,关键是如何编码状态和定义状态的值。对搜索过程中任意状态s,A*算法以g(s)+h(s)重排open表,也就是说g(s)+h(s)是排列open中状态的依据,其中g(s)是初始状态到s的消耗,h(s)是s到目标状态的估计。我重排open用的是c++的优先队列,扩展状态s得到新的状态ns,如果ns没访问过则直接将ns及其节点加入open。如果ns已经访问过(在open或close中),则更新ns的g(s)和h(s),由于无法直接在优先队列中进行更新,所以需要在外部用全局数组记录各个状态的g值,当某个状态的g值要改变时重新加入包含这个状态的节点,这样有冗余但不影响正确性,也是优先队列优化dijkstra算法的方法。关于启发函数h(s),h(s)越大则占g(s)+h(s)的比重越大,程序的速度也越快,当h(s)总小于实际到最终状态的消耗时,算法是能确定找到最优解的,否则能找到解但不一定能找到最优解(总消耗最少)。http://blog.csdn.net/b2b160/article/details/4057781

解决方案二:

假设最优路径是a->b->c,非最优路径a->c,当a被从open表中取出,他先将c,b放入open表,只需要证明b能在c之前被从open中取出(这样经过b的最优路径就不会被跳过了),这是显而易见的,因为最优路径经过b,而且hb->c。

先看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*算法并没有这一限制,所以不能保证得到最优解。

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),这也是作者们的分歧所在。但我现在认为也许这一条件已经隐含在其它条件中,我再想一想,也欢迎各位继续讨论。

推荐:http://bbs.csdn.net/topics/70416815

希望可以帮助到你。

时间: 2024-10-30 17:39:00

A*算法大牛进,高分!!的相关文章

A*算法大牛进,高分。

问题描述 A*算法大牛进,高分. 1.如果h(n)经常都比从n移动到目标的实际代价小(或者相等),则A*保证能找到一条最短路径.h(n)越小,A*扩展的结点越多,运行就得越慢. 2.如果h(n)有时比从n移动到目标的实际代价高,则A*不能保证找到一条最短路径,但它运行得更快. 为什么??????????????????? 解决方案 设open中有x,y两个点,全局最优路径中有x->y,等效证明x在y点前被取出:g(x)+h(x)<=g(x)+h*(x)<=g*(y)<=g(y)&l

祝福:新春新年大吉大利。问鼎天下,谁与争锋。非递归非交换非转数组非无序全排列组合算法,诚邀比、测、评。

问题描述 或许有人觉得口气好大?自信足证!1.就该算法我所提出的几点比测评,不要空口无凭,要有力证据.2.比测评越全面越详细,有文字或图片,高分就归你了.3.我的想法不怕被人知道,我这个算法想得之最,该不会被认为是井蛙或夜郎.4.如有比我更高效用时更短的代码,大分数给你了,不含用我算法优化或改进的,或用不同编译器进行比测的.5.能优化我的算法的得高分,依据优化质量与重点酌情.6.排列组合只需一半的规律,因为反转数,如123456789的反转数就是987654321,的确所有排列组合中都可以找到对

用DeepMind教AI玩游戏?一文为你讲清原理!

DeepMind到底是如何教AI玩游戏的?这篇在Medium上获得1700个赞的文章,把里面的原理讲清楚了.   谷歌的DeepMind是世界一流的AI研究团队,其研发的AlphaGo在2016年备受瞩目的人机大战中击败了韩国围棋冠军李世石(Lee Sedol),一战成名.AlphaGo背后的关键技术就是深度强化学习(Deep Reinforcement Learning).   这篇论文讲了些什么? 这得从4年前说起. 彼时,DeepMind开发了一个AI程序,它能玩Atari公司70年代推出

c语言-这一步执行了多少次?求解释

问题描述 这一步执行了多少次?求解释 @算法大牛:设n为正整数.试确定下列各程序段中前置以记号@的语句的频度设n为正整数.试确定下列各程序段中前置以记号@的语句的频度: for(i=1; i<=n; i++) { for(j=1; j<=i; j++) { for(k=1; k<=j; k++) @ x += delta; } 答案是 (5) 1+(1+2)+(1+2+3)+...+(1+2+3+...+n), 看不懂,求解释?谢谢 解决方案 n=1时, 第一次外循环 整个循环体执行1次

在人才竞争上,国内明星公司都使用哪些手段抢 AI 人才

2016 年起,明星科技公司对 AI 人才的渴求程度空前提高. 去年年底,卡耐基梅隆大学计算机科学院院长 Andrew Moore 教授在美国参议院听证会上说到,"基于我个人经验,一名计算机领域的 AI 专家对于企业的价值,至少为 500-1000 万美元.为了争夺这些少数的人才,正在开展竞标大战." 李开复从硅谷考察归来指出:"做深度学习的人工智能博士生,现在一毕业就能拿到 200 到 300 万美金的年收入的 offer,这是有史以来没有发生过的." 为何如此值

王亟亟的Python学习之路(六)-递归,迭代,列表生成式

转载请注明出处:王亟亟的大牛之路 最近事情比较多,也没什么时间学习.(借口,明明在偷懒) 难得空下来,就继续把文章写下去.(玩手游时间更多) 在贴今天要写的内容之前还是先说一下某些概念!(概念还是很重要的,虽然更重要的是理解) 什么是递归?(维基来的) 白话的理解就是某函数自己调用自己 大牛的分析: 递归的基本思想是把规模大的问题转化为规模小的相似的子问题来解决.在函数实现时,因为解决大问题的方法和解决小问题的方法往往是同一个方法,所以就产生了函数调用它自身的情况.另外这个解决问题的函数必须有明

人工智能历经风雨二十载 AI专用芯片成蓝海

正如20年前多媒体应用及3D游戏蓬勃发展倒逼显卡硬件升级一样,互联网大数据的兴起对超算芯片提出了新的需求. 事实上,AI界的泰斗,加拿大多伦多大学的Hiton教授早在2006年就提出了深度学习的概念,浅层学习算法更是早在上世纪80年代就为学术界所广泛认可.之所以最近几年该领域应用才逐渐升温,是因为AI的发展离不开两方面的支持,大数据和计算资源. 一.从"深蓝"到"AlphaGO",人工智能走过二十年 距离1996年"深蓝"大战卡斯帕罗夫整整20年

普通程序员如何入门AI

毫无疑问,人工智能是目前整个互联网领域最火的行业,随着AlphaGo战胜世界围棋冠军,以及各种无人驾驶.智能家居项目的布道,人们已经意识到了AI就是下一个风口.当然,程序员是我见过对于新技术最敏感的一个人群,举一个例子:当TensorFlow刚刚面世的时候,几乎所有搞大数据的同学一见面就开始交流这方面的内容,仿佛所有人一夜之间成了"TFboys"(tensorflow_boys).我觉得之所以程序员对于新技术很敏感有两个原因,其一是技术这碗饭会逼着你不停地去学习,不然很快会被淘汰:其二

一个程序员的四年经历反思(转)

  悟已往之不谏 四年过去了,人去团空.但是那年的人那年的事,记忆犹新.那年,在邹老师的指导下,我从一个人战斗,学会了怎么和团队合作.从那以后,我基本上都是在和别人合作.真切地感受了Team的重要性. 另外一件让我印象深刻的事情就是写博客.我当时把写博客当作一个任务.每天绞尽脑汁的想写什么东西能吸引眼球.也写了一些华而不实的文章,博来一些访问量.感谢博客园这个平台,让我能在本科学习阶段就站到舞台上. 如今,我也开始带小弟,经常跟他说的一句话就是,把学到的东西写下来.过去的四年,我基本上都在和别人