至文网络大当家(EmilMatthew)

当老大,就该以德服人,这一点灰常灰常重要... ...

秦盛ID:EmilMatthew
392288次访问,排名120好友6人,关注者16
想发财.
EmilMatthew的文章
原创 267 篇
翻译 4 篇
转载 85 篇
评论 327 篇
EmilMatthew的公告

〖My Site〗


品味文化,感悟生活

请点一下,感谢!



我是一个快乐的赌徒,因为我掷出去的每把骰子,都是自己的,玩的都是真性情。


年轻的朋友们,你还记得自己曾经最真的梦吗?如果有,那不妨去追寻它,实现它,即使努力后失败了,多年之后,回首往事,你必会因为自己当年的那份激情与执著而感动。因为:青春无价... ...



〖宣言〗

前途是光明的

道路是曲折的


〖Matthew语录〗

如果你想表达自己在某一行做得很牛了,可以这样表达:某某事,那是门艺术。

一个真正出名的人从不关心倒底有多少人认识自己,而总是盘算着:怎么才能上街不被人认出来!

找投资人的时候,你要像挑选伴侣一样谨慎;挑选伴侣时,你还是要像找投资人时一样谨慎。God!


〖时事一句话〗

1.中国股市将在2000点启稳,09年的事了.


〖求助〗

本人欲订明朝天启年间边关龙门客栈上房一间,请认识金镶玉老板的人帮我个忙,谢 谢!


〖祈福〗

祝季羡林老先生在301医院身体健康,心情愉快!

祝李敖大师精神矍铄,风采不逊当年,多出新作!

遥祝Bertrand Rusell爷爷在天堂依旧幸福人生!

遥祝Edsger W.Dijkstra爷爷在天堂依然享受最短路径的乐趣!


    〖强烈推荐〗

   ACM图灵奖演讲集

        〖推荐〗

     0.个人简介

武侠风    新版

     1.1A*算法实践

     1.2A*最优解提取算法

     2.夜间图像增强(1)

     3.三国知识问答

  本站相关源码下载


公益广告


GOOGLE Adsense 广告位

      〖最近看的书〗

    Essential AS3


      〖最近听的歌〗

    贾鹏芳.旅愁


      〖最近看的电影〗

    暂时没有...

      〖准备看的电影〗

    甜蜜的事业











最近评论
EmilMatthew:是这样的,因为来苏州炒房的人不多,而且,苏州这样的小TOWN,说实在,很难炒出什么名堂来。不过,哪种超豪华的园林别院式的高端房产(500W-1000W以上的),倒是苏州房地产业独有的特色;)
imyaker:不过传说苏州房价不高
EmilMatthew:CSDN的博客太让偶失望了,到现在还没解决吃换行的问题,为什么呀?
EmilMatthew:不是吧,还没好~~~~
psnccs:WoW Gold
文章分类
收藏
相册
宋慧乔
我所崇拜的科学家们
我所喜爱的歌手
05大师有大智慧
Alan Kay(Smalltalk,OOP)
BERTRAND RUSSELL
Donald E. Knuth(Art of Algorithm)
Edsger W. Dijkstra(Programming & Algorithm Design,Shortest Path)
John McCarthy(人工智能)
李敖
06闲情,感悟
苏州古城的历史
苏州杂志
读者论坛
赵云庙
07天籁之音
[周华健,李度]难以抗拒
[成龙,苏慧伦]在我生命中的每一天
[成龙]壮志在我胸
[灌篮高手]直到世界的尽头
Somewhere out there
somke gets in your eyes
When You Believe
野风[新龙门客栈片尾曲,林忆莲]
08苏州中学
苏中主页
09算法,数据结构,优化
ACM/ICPC的司令部
Dictionary of Algo&DS
IOI选手优秀论文
Lucky猫的ACM园地
UVA在线答题系统
中国人工智能网
中国数据挖掘网
中国网格信息中转站
中国运筹学协会
信息学初学者之家
信息学奥林匹克基地
北大ACM站
数据结构自考网
浙大ACM站
10科学,论文
Citeseer
Scientific American
Tex中文站
yesize资料坊
上海网上天文台
中国学术期刊网
中国工程院
中国水利期刊
中国知网
中国科学院
大众科普网
奇迹文库
科研中国
集智俱乐部
11名校计算机科学院巡礼
(UIUC)伊利诺伊香槟分校
Carnegie Mellon(卡梅基隆)
Mit[麻省理工学院]
Princeton[普灵斯顿大学]
purdue[普度大学]
Stanford[斯坦福大学]
中国科学技术大学
交通大学
北京大学
南京大学
复旦大学
浙江大学
清华大学
12应用数学,建模
Math.com
中国数学建模
中国统计网
数学中国
数学常用工具FAQ
13ComputerScience
《计算机教育》期刊网站
acm来了
李开复学生网
15综合科学
《科学》杂志
从欧氏几何到微分几何
16数值计算
Pi的小站
17朋友的链接
Nemon
大漠穷秋
18EnglishLearning
沪江英语
20图形学
The Chaos Games
VRML用户手册
中国虚拟现实开发者
中国计算机图形学教学研究会
分形屏道
分形艺术
机器视觉在线
虚拟无忌
21操作系统
Bochs摸拟环境
ChinaLinux
Linux/BSD/UNIX文档
Linux_Kernel
中国UNIX技术联盟
帮助Linux爱好者
永远的UNIX
22ActionScript_Flash
[Flasher]Dengjie
[开源的AS2编译器]Mtasc
FlashASM
RobertPenner
ultrashock
X-Woods
闪吧音乐盒
23C/C++
C++ Home
C++FAQ-LITE
C-C++ User Journal
CPlusPlus.com
C语言之家
GCC Compiler
GCC.GNU
SGI-STL
VCHelp[CN DEV]
VC知识库
24GameDev
CSDN游戏开发站
GamaSutra
GameAI
GameDev.NET
Gamerers
vbgamer
25JAVA技术
JAVA.SUN
中文JAVA技术网
26编程技术
[MSDN Eng]
[MSDN 中文版]
ASCII Table
SourceForge
UML.ORG
中国程序员(CSDN)
文件格式汇编
程序员联合开发网
问专家
28物理模拟与仿真
中国仿真互动
流体中文网
29网络安全
绿盟论坛
30环保
中国环境监测
南水北调网
国家环保总局
江苏环保网
31可爱的事物
叮铛论坛
32设计,排版
5D多媒体
BlueIdea
印科网
33影视,音乐,电台
上海文广新闻传媒
阿拉上海人
34优秀个人BLOG
fisher_jiang的专栏
gzfqh的专栏
ScienceStudy
刘爱贵的个人主页
大肚能容天下剑
寒蝉退士
梦想风暴
煮石
男儿当自强
男单618
编程夜未眠
记得忘记@博客
35专栏
抗战胜利60年(sina)
抗战胜利60年(yahoo)
50电子游戏
Raine街机模拟器
WAR3中文网
专业射击游戏联盟
地精研究院
51常用软件
flashfxp
GreenBrowser
小巧好用的编辑器SciTEFlash
强力抓屏
金山在线词典
52网上书店
DearBook
当当网
53硬件DIY
52硬件
电脑报论坛
存档
订阅我的博客
XML聚合  FeedSky
订阅到鲜果
订阅到Google
订阅到抓虾
订阅到BlogLines
订阅到Yahoo
订阅到GouGou
订阅到飞鸽
订阅到Rojo
订阅到newsgator
订阅到netvibes

原创 启发式搜索算法引论------A*算法理论与实践收藏

新一篇: A*算法最优解提取算法 | 旧一篇: Speech:Intorduction to Heuristics Algorithm------A* Algorithm

  启发式搜索算法引论------A*算法理论与实践

            EmilMatthew (EmilMatthew@126.com)      

[  类别  ]算法实践 ,人工智能

[推荐指数]★★★★★

[  摘要  ]本文介绍了启发式算法中一种重要而有效的算法------A*算法的理论,并给出了寻路问题的交互式实现。

[ 关键词 ] A*,启发式算法,最优路径,交互式,AS2

 

Introduction to Heuristics Search------

A* Algorithm Principle and Practice

[Classify] Algorithm Implementation ,  Artificial Intelligence

[  Level ] ★★★★★

[Abstract] This article introduces an important and effective heuristics algorithm ------ A* algorithm with its theory and also gives out its interactive implementation of path finding problem.

[Key Words] A* , Heuristics Algorithm , Best Path Finding , Interactive , AS2

 

 

[1历史回顾]

       P. E. Hart , N. J. Nilsson B. Raphael共同发表了一篇在启发式搜索方面有深远影响力的论文:

“P. E. Hart, N. J. Nilsson, and B. Raphael. A formal basis for the heuristic determination of minimum cost paths in graphs. IEEE Trans. Syst. Sci. and Cybernetics, SSC-4(2):100-107, 1968”。从此,一种精巧、高效的算法------A*算法横空出世了,并在相关领域得到了广泛的应用。

                      

                                  Peter E. Hart                 Nils J. Nilsson

 

[2DFSBFS中来]

   A*算法的思想来源并不是什么高深莫测的东西,事实上,它与我们所熟悉的另外两种搜索策略:DFS(深度优先Deep First Search)和 BFS(广度优先Breadth First Search)有着自然而紧密的联系。

       首先要提一下搜索树的概念,一个可以搜索出某个可行解的问题,如“农夫、白菜、羊、狼”和“八皇后”等,虽然从表面上看上去和“树”这种结构无关,但是整个搜索过程中的可能试探点所行成的搜索空间总可以对应到一颗搜索树上去。所以,将各类形式上不同的搜索问题抽象并统一成为搜索树的形式,为算法的设计与分析带来巨大的方便。

 

下面,让我们通过两个Flash演示来回顾一下DFSBFS的算法思想:

       DFS算法思想演示:

                         

      

 BFS算法思想演示

                         

      

 

      重点要在这里说明是:

       DFSBFS在展开子结点时均属于盲目型搜索,也就是说,它不会选择哪个结点在下一次搜索中更优而去跳转到该结点进行下一步的搜索。在运气不好的情形中,均需要试探完整个解集空间, 显然,只能适用于问题规模不大的搜索问题中。

       那么,作为启发式算法中的A*算法,又比它们高效在哪里呢?

       首先要来谈一下什么是启发式算法。所谓启发式搜索,与DFSBFS这类盲目型搜索最大的不同,就在于当前搜索结点往下选择下一步结点时,可以通过一个启发函数来进行选择,选择代价最少的结点作为下一步搜索结点而跳转其上(遇到有一个以上代价最少的结点,不妨选距离当前搜索点最近一次展开的搜索点进行下一步搜索)。一个经过仔细设计的启发函数,往往在很快的时间内就可得到一个搜索问题的最优解,对于NP问题,亦可在多项式时间内得到一个较优解。

       A*算法,作为启发式算法中很重要的一种,被广泛应用在最优路径求解和一些策略设计的问题中。而A*算法最为核心的部分,就在于它的一个估值函数的设计上:

f(n)=g(n)+h(n)

       其中f(n)是每个可能试探点的估值,它有两部分组成:一部分为g(n),它表示从起始搜索点到当前点的代价(通常用某结点在搜索树中的深度来表示)。另一部分,即h(n),它表示启发式搜索中最为重要的一部分,即当前结点到目标结点的估值,h(n)设计的好坏,直接影响着具有此种启发式函数的启发式算法的是否能称为A*算法。

       一种具有f(n)=g(n)+h(n)策略的启发式算法能成为A*算法的充分条件是:

1)      搜索树上存在着从起始点到终了点的最优路径。

2)      问题域是有限的。

       3)所有结点的子结点的搜索代价值>0

       4h(n)=<h*(n) h*(n)为实际问题的代价值)。

       当此四个条件都满足时,一个具有f(n)=g(n)+h(n)策略的启发式算法能成为A*算法,并一定能找到最优解。([1]P89给出了相关的证明)

对于一个搜索问题,显然,条件1,2,3都是很容易满足的,而

条件4) h(n)<=h*(n)是需要精心设计的,由于h*(n)显然是无法知道的,

所以,一个满足条件4)的启发策略h(n)就来的难能可贵了。不过,对于图的最优路径搜索和八数码问题,有些相关策略h(n)不仅很好理解,而且已经在理论上证明是满足条件4)的,从而为这个算法的推广起到了决定性的作用。不过h(n)距离h*(n)的呈度不能过大,否则h(n)就没有过强的区分能力,算法效率并不会很高。对一个好的h(n)的评价是:h(n)h*(n)的下界之下,并且尽量接近h*(n).

       当然,估值函数的设计也就就仅仅是f(n)=g(n)+h(n)一种,另外的估值函数“变种”如:f(n)=w*g(n)+(1-w)*h(n) f(n)=g(n)+h(n)+h(n-1)针对不同的具体问题亦会有不同的效果。

 

[3A*算法的核心过程]

让我们先来通过两个Flash演示,来看一下A*算法在具体应用时的搜索树是如何展开的。

            

                                                A* Search搜索树1

 

 

                                             

A* Search搜索树2

 

通过演示,我们可以看出:A*算法最为核心的过程,就在每次选择下一个当前搜索点时,是从所有已探知的但未搜索过点中(可能是不同层,亦可不在同一条支路上),选取f值最小的结点进行展开。而所有“已探知的但未搜索过点”可以通过一个按f值升序的队列(即优先队列)进行排列。这样,在整体的搜索过程中,只要按照类似广度优先的算法框架,从优先队列中弹出队首元素(f值),对其可能子结点计算ghf值,直到优先队列为空(无解)或找到终止点为止。

       A*算法与广度优先和深度优先的联系就在于,当g(n)=0时,该算法类似于DFS,当h(n)=0时,该算法类似于BFS , 这一点,可以通过上面的A*搜索树的具体过程中将h(n)设为0或将g(n)设为0而得到。

 

       A*算法实现框架:

       重要数据解释:

       Open Table  :存放所有已探知的但未搜索过点的优先队列。

       Closed Table :存在搜索过的点的数组,提取最优路径时有用。

Start Node   :起始点。

Target Node  :终止点。

C Node      :当前点。

 

       算法框架如下:

1.Init start node , add it to open table

While not reach target node && open table is unNull

       2.a) Get the head node in open table->c node

       2.b) Finding all c node’s possible child node.

       2.c) Calculate each child node’s f value.

       2.d) Remove c node from open table , add it to closed table.

        2.e) Add all c node’s child nodes to open table in an undescend sequence.

Wend

3.Ouput Search Result

      

       算法的实现部分参附录1(C Version),附录2(AS2 Version)

       提取最优路径的算法并不复杂,虽然在CLOSE表中会有许多无效的搜索点,但是最优路径上各结点的下标一定是按照CLOSE表中下标的升序排列的。因此,只要在CLOSE表中,将下标从终止点向起始点移动,若CLOSE[i+1]CLOSE[i]没有关联,则剔除CLOSE[i]