最新标注
热门标注
历史更新
站点地图
RSS
Home
CrazyCoder
»
原创
»
it评论
»
it业界
»
互联网
»
精品软件
开发语言
»
网络编程
编程综合
嵌入式开发
算法
英文资料
汇编语言
PowerBuilder
p2p技术
验证码识别
DotNet
Java教程
C语言教程
C 教程
Delphi教程
VB教程
QQ协议开发
项目管理
»
数据库
»
Web开发
»
Python
Css教程
XML教程
网页特效
PhotoShop教程
Illustrator教程
CorelDraw教程
Ruby教程
CorelDraw教程
网站安全
开发平台-工具
Web
PHP教程
Flash教程
Ajax教程
Javascript教程
Html教程
Dreamweaver
Asp教程
技术综合
»
软件测试
办公软件
QQ相关
Windows
网络技术
游戏开发
软件工程
软件教程
编程思想
游戏开发
外挂开发
OpenApi
AutoCad
广告设计
3D设计
平面设计相关
移动手机开发
服务器
»
Linux
Unix/FreeBsd
web服务器
服务器技术
安全
博文摘选
»
翻译
首页
»
游戏开发
» a算法:初识A*算法
Rss订阅
a算法:初识A*算法
on 2008-12-14
in
游戏开发
|
0 Comment
写这篇文章
初衷是应
个网友
要求
当然我也发现现在有关人工智能
中文站点实在太少
我在这里抛砖引玉
希望大家都来热心
参和
还是说正题
我先拿A*算法开刀
是
A*在游戏中有它很典型
使用方法
是人工智能在游戏中
代表
A*算法在人工智能中是
种典型
启发式搜索算法
为了说清楚A*算法
我看还是先说说何谓启发式算法
、何谓启发式搜索算法
在说它的前先提提状态空间搜索
状态空间搜索
如果按专业点
说法就是将问题求解过程表现为从
状态到目标状态寻找这个路径
过程
通俗点说
就是在解
个问题时
找到
条解题
过程可以从求解
开始到问题
结果(好象并不通俗哦)
由于求解问题
过程中分枝有很多
主要是求解过程中求解条件
不确定性
不完备性造成
使得求解
路径很多这就构成了
个图
我们说这个图就是状态空间
问题
求解实际上就是在这个图中找到
条路径可以从开始到结果
这个寻找
过程就是状态空间搜索
常用
状态空间搜索有深度优先和广度优先
广度优先是从
状态
层
层向下找
直到找到目标为止
深度优先是按照
定
顺序前查找完
个分支
再查找另
个分支
以至找到目标为止
这两种算法在数据结构书中都有描述
可以参看这些书得到更详细
解释
前面说
广度和深度优先搜索有
个很大
缺陷就是他们都是在
个给定
状态空间中穷举
这在状态空间不大
情况下是很合适
算法
可是当状态空间十分大
且不预测
情况下就不可取了
他
效率实在太低
甚至不可完成
在这里就要用到启发式搜索了
启发式搜索就是在状态空间中
搜索对每
个搜索
位置进行评估
得到最好
位置
再从这个位置进行搜索直到目标
这样可以省略大量无畏
搜索路径
提到了效率
在启发式搜索中
对位置
估价是十分重要
采用了区别
估价可以有区别
效果
我们先看看估价是如何表示
启发中
估价是用估价
表示
如:
f(n) = g(n) + h(n)
其中f(n)是节点n
估价
g(n)实在状态空间中从
节点到n节点
实际代价
h(n)是从n到目标节点最佳路径
估计代价
在这里主要是h(n)体现了搜索
启发信息
g(n)是已知
如果说详细点
g(n)代表了搜索
广度
优先趋势
但是当h(n)>>g(n)时
可以省略g(n),而提高效率
这些就深了
不懂也不影响啦!我们继续看看何谓A*算法
2、初识A*算法
启发式搜索其实有很多
算法
比如:局部择优搜索法、最好优先搜索法等等
当然A*也是
这些算法都使用了启发
但在具体
选取最佳搜索节点时
策略区别
象局部择优搜索法
就是在搜索
过程中选取“最佳节点”后舍弃其他
兄弟节点
父亲节点
而
直得搜索下去
这种搜索
结果很明显
由于舍弃了其他
节点
可能也把最好
节点都舍弃了
求解
最佳节点只是在该阶段
最佳并不
定是全局
最佳
最好优先就聪明多了
他在搜索时
便没有舍弃节点(除非该节点是死节点)
在每
步
估价中都把当前
节点和以前
节点
估价值比较得到
个“最佳
节点”
这样可以有效
防止“最佳节点”
丢失
那么A*算法又是
种什么样
算法呢?其实A*算法也是
种最好优先
算法
只不过要加上
些约束条件罢了
由于在
些问题求解时
我们希望能够求解出状态空间搜索
最短路径
也就是用最快
思路方法求解问题
A*就是干这种事情
!我们先下个定义
如果
个估价
可以找出最短
路径
我们称的为可采纳性
A*算法是
个可采纳
最好优先算法
A*算法
估价
可表示为:
f\'(n) = g\'(n) + h\'(n)
这里
f\'(n)是估价
g\'(n)是起点到终点
最短路径值
h\'(n)是n到目标
最断路经
启发值
由于这个f\'(n)其实是无法预先知道
所以我们用前面
估价
f(n)做近似
g(n)代替g\'(n)
但g(n)>=g\'(n)才可(大多数情况下都是满足
可以不用考虑)
h(n)代替h\'(n)
但h(n)<=h\'(n)才可(这
点特别
重要)
可以证明应用这样
估价
是可以找到最短路径
也就是可采纳
我们说应用这种估价
最好优先算法就是A*算法
哈!你懂了吗?肯定没懂!接着看!
举
个例子
其实广度优先算法就是A*算法
特例
其中g(n)是节点所在
层数
h(n)=0
这种h(n)肯定小于h\'(n)
所以由前述可知广度优先算法是
种可采纳
实际也是
当然它是
种最臭
A*算法
再说
个问题
就是有关h(n)启发
信息性
h(n)
信息性通俗点说其实就是在估计
个节点
值时
约束条件
如果信息越多或约束条件越多则排除
节点就越多
估价
越好或说这个算法越好
这就是为什么广度优先算法
那么臭
原因了
谁叫它
h(n)=0
点启发信息都没有
但在游戏开发中由于实时性
问题
h(n)
信息越多
它
计算量就越大
耗费
时间就越多
就应该适当
减小h(n)
信息
即减小约束条件
但算法
准确性就差了
这里就有
个平衡
问题
可难了
这就看你
了!
好了我
话也说得差不多了
我想你肯定是
头
雾水了
其实这是写给懂A*算法
同志看
哈哈!你还是找
本人工智能
书仔细看看吧!我这几百字是不足以将A*算法讲清楚
只是起到抛砖引玉
作用
希望大家热情参和嘛!
预知A*算法
应用
请看姊妹篇
深入A*算法
Tags:
a算法是什么
a算法代码
a算法
延伸阅读
2008-12-14
--
点灯游戏:点灯游戏算法实现代码
2009-2-12
--
a算法:深入A*算法
最新评论
发表评论
昵称
评论
验证码
点击图片更换
赞助商广告
随机更新
clrvia,初读CLR Via C# 之 堆栈
域名被屏蔽,直接将某个域名从 Google 搜索结果里屏蔽的功能扩展到全球
受益匪浅,苹果北大开店引争议:影响学习氛围 或双方受益
【总结】简单易用的linux命令行清单
视频播放长度,获得视频时间总长度的另一种方法
豆瓣融资,豆瓣获千万美元融资是否表明社区网站依然还在春天
博客园,给博客园的忠告——做事态度决定用户忠诚度
Direct3D轮回:文字显示及FPS效率统计
最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用28
新浪微博提升安,中国互联网城邦竞争力报告:腾讯领跑 新浪提升
受益匪浅,苹果北大开店引争议:影响学习氛围 或双方受益
工作流,大哥你需求里说只要工作流引擎组件,怎么真正需要的东西....悲剧了,客户需求无止境.........
新浪微博提升安,中国互联网城邦竞争力报告:腾讯领跑 新浪提升
中电信10月或率先开售iPhone 5 经销商接受预订
打印机获取状态,获取Web打印的实际打印次数
wifi上网,台北公交车也可以免费Wi-Fi上网了
颠覆笑傲江湖,微软对 Windows 颠覆性改造,隆重推出 Windows 8 开发人员预览版
中电信10月或率先开售iPhone 5 经销商接受预订
JQuery表格插件之Datatables
《财富》:雅虎衰退不可逆转,巴茨已是最佳掌门
颠覆笑傲江湖,微软对 Windows 颠覆性改造,隆重推出 Windows 8 开发人员预览版
博客园,给博客园的忠告——做事态度决定用户忠诚度
matlab卸载,安装与卸载MATLAB的一点经验(zhuan)(...
公安局报案,百度就“拉拉网”涉嫌欺诈向公安工商部门报案
google搜索,Google推出飞行搜索
青海首家上市公司,巨鲸或成首家上市音乐概念公司 CEO曾称尽快IPO
垂直电商,垂直搜索是电商的催化剂而不是扒钱利器
c语言中的,C语言中自增的疑惑
google飞行,Google推出飞行搜索
青海首家上市公司,巨鲸或成首家上市音乐概念公司 CEO曾称尽快IPO
热门标注
优干申请理由
(1)
优秀班干申请理由
(1)
shell题目
(1)
接口中的变量
(1)
批处理中的变量
(1)
vb中的变量
(1)
类中的静态变量
(1)
php变量范围
(1)
jammer6
(1)
jammer下载
(1)
我想学编程
(1)
数控编程专业
(1)
编程专业
(1)
国际分工
(1)
社会分工
(1)
并行测试
(1)
怎样创造语言环境
(1)
语言创造的背景
(1)
创造力研究
(1)
外星人研究
(1)
最近更新
梦幻诛仙》两次增开新服瞬满
10月22日19:00时再次加开3组新服
arp绑定脚本:绑定HGE到AngelScript脚本系统
游戏开发流程:游戏开发制作流程
MD2关键帧动画实现思路方法
通用编程器:游戏引擎中的通用编程技术
3dgameengine:3D Engine 的设计架构
运动模糊:简单的运动模糊效果实现思路方法
qq游戏外挂:通过游戏策划阶段防治游戏外挂
坐标转换:3D坐标转换成屏幕坐标的思路方法
外挂制作实例:游戏外挂制作例子包含代码
setstreamsource:SetStreamSource函数和数据流的使用
depthoffield:景深效果(Depth of Field) 的实现思路方法
角色扮演游戏引擎的设计原理
hge使用:HGE使用GDI绘制中文字体
如何成为一个程序员:想成为一个游戏程序员需要有以下资料
游戏设计的十条戒律
1万游戏开发专业人员难满足10万需求
扫雷游戏vb代码:模拟实现扫雷游戏代码
界面设计:界面流程控制模式设计
最新标注
优干申请理由
(1)
优秀班干申请理由
(1)
shell题目
(1)
接口中的变量
(1)
批处理中的变量
(1)
vb中的变量
(1)
类中的静态变量
(1)
php变量范围
(1)
jammer6
(1)
jammer下载
(1)
我想学编程
(1)
数控编程专业
(1)
编程专业
(1)
国际分工
(1)
社会分工
(1)
并行测试
(1)
怎样创造语言环境
(1)
语言创造的背景
(1)
创造力研究
(1)
外星人研究
(1)
最新评论