Archive

Posts Tagged ‘AI’

行为树的疑问

April 13th, 2015 No comments

关于行为树的实现,我在网上看到几个实现版本都对节点规划了running状态,表示节点的动作未执行完毕,每次执行时从上次未执行完毕的节点开始执行而跳过之前已经执行完毕的节点。

问题在于,处于同一selector节点下的子节点,位置越靠前的节点优先级是越高的,如果因为running恢复机制而跳过了已经执行完毕的节点,岂不是无法实现“打断”现有逻辑的需求?

我想问,节点running状态的引入是为了解决什么问题?为什么不每次都top-down执行所有节点?

http://www.zhihu.com/question/29486474

1. 行为树肯定要有 RUNNING状态的,否则你长时间做一件事情很难描述呀,比如你先做“走过去”,再做“采矿”再做“返回”,一颗行为树就表达完了。每件事情都是持续的,如果没有RUNNING,那其实就更像一颗“决策树”而非“行为树”了。

2. 假设你有三层状态机,行为树也只会用在最后一层,头两层都是一些“确定的动作”,不需要行为树来弄,比如“跑过去”,“采矿”这些分解动作,本来变化也不多,如果这都要行为树来弄的话,你的开发反而会很累。

3. 行为树是“树形逻辑”,“树形状态变迁”,但是有些时候逻辑不是树形的,比如就是个纯粹的是有向图的,这种情况下非要用行为树的话,要打比较多Patch

4. 针对你说的“停止”,问题,状态机/行为树,肯定要可以随时打断安排新任务的,具体的做法可能是,update的时候传入一个事件(比如时钟,或者结束),就像tcp的状态机,时钟和网络包都是它的输入,如果不能处理输入,那你做出来的东西只会自顾自的在屏幕上动来动去罢了。

5. 针对实现停止,有三种做法,一种是节点前判断,一种是行为树跑完后,都要跑一个通用的状态机;第二种是增加RESET整棵树的操作;第三种是通用状态机来处理任务改变的消息,一旦改变就复位树,或者调用一颗新的树,比如你把“巡逻”,“逃避”,“进攻”,写成了三颗不同的行为树,相当于一个“高级状态”来用。

PS:由于国内单机游戏凋零,网游类型单一,早年国内说 AI 都在说寻路,而这两年说 AI 大家都在说行为树。行为树是好用的,但是最近两年有些滥用了。它不是银弹,不是什么问题都可以扔给行为树让它来解决的。

Categories: 人工智能 Tags:

游戏中AI常用工具分析

April 9th, 2015 No comments

BehaviorTree:国内很多正式商用项目确实用了,不管RTS,还是RPG,而且用的还行,毕竟写AI一大半时间在调试上,有图形化的界面,调试起来更方便点,有的项目策划可以直接来写AI。值得花时间封装的东西,你做出一套来,以后其他项目都可以用,但是两个人一个多月的时间是最起码的,一个人写一个GUI编辑器,另一个人写 BehaviorTree的运行时,用你们熟悉的语言来写。包括若干基类,运行跟踪,状态单步,以及可以脱离游戏环境的调试方式。如果找到称手的AI框架,拿过来, 比如你可以评估下 U3D的 BehaviorTree的库和编辑器是否可以,能否集成到你的项目?我自己没有用过,我们用自己之前的一个实现。

NaviMesh:大部分情况最好不用,现在国内大部分游戏都是显示3D,但是内部数据还是2D的,比如地图,还是用的格子,在这种情况下,引入NaviMesh会逼迫你客户端使用全3D数据结构,并且逼迫你服务端从2D计算升级到3D计算,主要是 NaviMesh实现起来起码也要一个多月,然后要调试很久。确实很优秀,但是不要为了用它来增加整体项目复杂度,我同事之前实现过 NaviMesh,但是仅仅在试验项目里用了,正式线上产品开发时,我们还是选择用纯2D地图,上传统寻路。

Read more…

Categories: 人工智能 Tags:

TINY-GOBANG 最精简的五子棋人机对战

November 8th, 2012 10 comments

国庆没事,想看看最少多少行可以写一个人机对战起来游戏,于是有了这个Python版五子棋人机对战,仅仅几百行。

http://www.skywind.me/mw/images/7/7f/Gobang.7z

https://github.com/skywind3000/gobang

下面是代码(点击More展开)

Read more…

Categories: 人工智能, 游戏开发 Tags:

体育竞技游戏的团队AI

August 5th, 2011 1 comment

很多人问游戏AI该怎么做?随着游戏类型的多元化,非 MMO或者卡牌的游戏越来越多,对AI的需求也越来越强了。而市面上关于 AI的书,网上找得到的文章,也都流于一些只言片语的认识,理论化的套路,和一些简单的 DEMO,离真正的项目差距甚远,无法前后衔接成一条线,更无法真正落地到编码。

国内真正做过游戏AI的少之又少,东拉西扯的人很多,真正做过项目的人很少,因为国内主要以MMO为主,RTS比较少,体育竞技类游戏更少,而从AI的难度上来看,应该是:MMO < FPS < RTS < 体育竞技。作为实际开发过AI的人,给大家科普一下,什么叫做硬派AI。

硬派游戏AI,不是虚无缥缈的神经网络,用神经网络其实是一个黑洞,把问题一脚踢给计算机,认为我只要训练它,它就能解决一切问题的懒人想法。更不是遗传算法和模糊逻辑,你想想以前8位机,16位机上就能有比较激烈对抗的足球游戏、篮球游戏,那么差的处理器能做这些计算么?

硬派游戏AI,就是状态机和行为树。状态机是基本功,行为树可选(早年AI没行为树这东西,大家都是hard code的)。大部分人说到这里也就没了,各位读完还是无法写代码。因为没有把最核心的三个问题讲清楚,即:分层状态机决策支持系统、以及团队角色分配。下面以我之前做的篮球AI为例,简单叙述一下:

 

何为分层状态机?

每个人物身上,有三层状态机:基础层状态机、行为层状态机、角色层状态机。每一层状态机解决一个层次的复杂度,并对上层提供接口,上层状态机通过设置下层状态机的目标实现更复杂的逻辑。

  • 基础状态机:直接控制角色动画和绘制、提供基础的动作实现,为上层提供支持。
  • 行为状态机:实现分解动作,躲避跑、直线移动、原地站立、要球、传球、射球、追球、打人、跳。
  • 角色状态机:实现更复杂的逻辑,比如防射球、篮板等都是由N次直线运动+跳跃或者打人完成。 image

每一层状态机都是通过为下一层状态机设定目标来实现控制(目标设定后,下层状态机将自动工作,上层不用关心动画到底播到哪了,现在到底是跑是跳),从而为上层提供更加高级拟人化的行为,所有状态机固定频率更新(如每秒10次),用于判断状态变迁和检查底层目标完成情况。最高层的角色状态机的工作由团队AI来掌控,即角色分配的工作。而行为状态机以上的状态抉择,比如回防,到底是跑到哪一点,射球,到底在哪里起跳,路径是怎样的,则由决策支持系统提供支持。

Read more…

Categories: 人工智能, 游戏开发 Tags: ,

[游戏演示] ActionScript 鼠标手势识别

January 5th, 2009 No comments

学习ActionScript3,画一星期写了个DEMO:

网页地址:http://www.skywind.me/weapon

关于路径搜索算法的实用性优化

September 30th, 2002 No comments

关于路径搜索算法的实用性优化
UESTC 20013080 林 伟 2002.9.12

 

介绍:本文阐述对著名的路径搜索算法A*算法的重要改进,使之更实用于大规模,高效率,多阻塞,模糊求解的任务中。希望本文起一个抛砖引玉的作用,使读者能举一反三。

Read more…