Successfully reported this slideshow.
Upcoming SlideShare
×

# Behavior+tree+ai lite

• Full Name
Comment goes here.

Are you sure you want to Yes No

### Behavior+tree+ai lite

1. 1. Behavior Tree AI AKara akaras@163.com http://blog.csdn.net/akara http://t.sina.com.cn/akaras
2. 2. 目录• 常用方法• Behavior Tree• 原理• 进阶• 应用• 总结
3. 3. 前言
4. 4. 只关于：• 环境中已具有完备的感知信息• 决策式 AI：大量感知信息，做复杂决策 不涉及：•怎么提供 感知信息？ attr / code / XLS / AOI / FSM / search ...•寻径•学习•...
5. 5. • 常用方法• Behavior Tree• 原理• 进阶• 应用• 总结
6. 6. if / else 神器if visible: 优点： if close: 这个可以承受 knife attack elif flank: 缺点： move A：77倍可以承受不？ else: B：可以 gun attack A：...........elif audible: creep
7. 7. 决策树 - Decision Tree优点：单一，层次，自然…缺点：过于单一，过于层次，过于自然…
8. 8. 有限状态机 - Finite State Machine 关键字: 关键字: • State • Transition(Ev/Con) 经典设计: 1P + 3E • Precondition • Enter • Excute • Exit
9. 9. States / Transitions? xaitControl
10. 10. <<FSM Age is OVER>> Alex.J.C• Unorthodox • Not Deliberative• Low-Level • Concurrency Nightmares• Logic is Limited • Scale Poorly• Require Extensions • Labor Intensive• Hard to Standardize • Industry is Moving Onhttp://aigamedev.com/open/articles/fsm-age-is-over/难分解 / 低通用 / 难扩展 / 无层次 / 可预测 (FuSM)
11. 11. 分层有限状态机 - Hierarchical Finite State Machine 关键字: SuperState 关键字: <<Statecharts: A Visual Formalism for Complex Systems>> by D.Harel 1987
12. 12. 分层有限状态机 - Hierarchical Finite State Machine其实它很好: Data driven, Probabilistic HFSM
13. 13. 理想的AI决策结构 ?理想的AI AI决策结构
14. 14. • 常用方法• Behavior Tree• 原理• 进阶• 应用• 总结
16. 16. GDC2005Scalable decision-making BTs: Prioritized-list + Sequential + Seq-Looping + Probabilistic + One-off
17. 17. V1.5 of Halo BT AIHalo guys incredibly helpful and open with sharing detailed / pros / cons, this owes much to them.
18. 18. GDC2007Weve spent 5 years living with BTsAnd have learned how to optimize them
19. 19. BTs are a GREAT tool for decision taking:Easier to Use, More info, Less Resource,Rapid iteration, Coordinating AI easily
20. 20. 800 NPCs full 24 hour schedules governingtheir daily life , Each NPC is running a BT— no dummy FSMs
21. 21. Behavior Tree• 2001: R.Geoff.Dromey 雏形• 2003: Halo2使用(HFSM Like)• 2005: Halo3改进• 2006: Spore再改进• 2007: Crysis / Crysis 2 协作式AI / BT Notation v1.0• 2008-2009: AiGameDev (Alex.J.C) / MidWares / Libs• 2010: Red Dead Redemption获BestNPC奖 / Halo: Reach
22. 22. • 常用方法• Behavior Tree• 原理• 进阶• 应用• 总结
23. 23. 初见BT：BOSS 初见BT BT：• 星期天，攻击男玩家；巡逻；巡逻一次原地休息每5分钟
24. 24. 4 种结点 + 1 个规则• 行为结点 - Action Node• 条件结点 - Condition Node• 装饰结点 - Decorator Node• 组合结点 - Composite Node• 结点执行后，向 父结点 返回： 成功(True)/失败(False)
25. 25. (1) 行为结点• def execute(self): calc 1 + 1 return True
26. 26. (2) 条件结点• def execute(self): if 1 + 1 == 2: return True
27. 27. (3) 装饰结点• 结果取反 - Decorator NOT• 次数限制 - Decorator Counter• 强制循环 - Decorator Loop• 时间限制 - Decorator Time• GEEKS - Decorator GEEKS AOP?
28. 28. (3-1) 装饰结点 : 结果取反• def execute(self): return not self.children[0].execute()
29. 29. (3-2) 装饰结点 : 次数限制• def decorator(self): self.counter += 1 return self.counter <= self.max_counter• def execute(self): if self.decorator(): return self.children[0].execute() else: return False
30. 30. (3-3) 装饰结点 : GEEKS• def decorator(self): print “GEEK” Animation? Sound? Log?• def execute(self): self.decorator() return self.children[0].execute()
31. 31. (4) 组合结点• 选择结点 - Selector Node• 顺序结点 - Sequence Node• 平行结点 - Parallel Node
32. 32. (4-1) 组合结点 : 选择• def execute(self): for child in self.children: if child.execute(): return True return False
33. 33. (4-2) 组合结点 : 顺序• def execute(self): for child in self.children: if not child.execute(): return False return True
34. 34. (4-3) 组合结点 : 平行• def execute(self): for child in self.children: run child.execute() return True/False according to Policy
35. 35. 现在我们可以• 顺序• 选择• 平行• 循环• 条件• 时限• ……
36. 36. 回看：BOSS 回看：BOSS• 星期天，攻击男玩家；巡逻；巡逻一次原地休息每5分钟
37. 37. 决策依赖的数据在哪？
38. 38. +可感知环境 : Blackboard
39. 39. 为何引入Blackboard？ 为何引入Blackboard Blackboard？• 让Behavior Tree专注于决策执行• 简化世界复杂性到Blackboard KV• 易读取，易删改，易同步• 叶结点间数据交互• 使Behavior Tree与数据分离，甚至Dry-Run
40. 40. • 常用方法• Behavior Tree• 原理• 进阶• 应用• 总结
41. 41. 结点概率化• 儿子结点均有Weight• Probability结点先加权，再随机权重区间，执行
42. 42. 平行结点 • FailPolicy – FAIL_ON_ALL – FAIL_ON_ONE • SuccPolicy – SUCC_ON_ALL – SUCC_ON_ONE
43. 43. RUNNING态RUNNING态 • Action不一定瞬间完成！ • 第三种返回 – True/False – Running ! • 记录当前访问子结点索引 • 向上返回Running • 下次运行行为树时，保证 跑到running结点
44. 44. 协作式AI(from Crysis)协作式AI(from
45. 45. • 常用方法• Behavior Tree• 原理• 进阶• 应用• 总结
46. 46. 举一个U3同学的栗子 举一个U3 U3同学的栗子• AI需求：1. 从A移动到B2. 如果发现10码内有敌人，怒吼，然后攻击它3. 如果没有发现敌人，坐下，然后睡觉。• Unreal3的延迟函数
47. 47. 不厚道的对比Unreal3 Script Behavior Tree• 写各个子函数 • 写各个Condition和Action• 用延迟函数，写以下代码 • 无 ： • (策划编写#_#)
48. 48. 掉落系统
49. 49. 飞机游戏
50. 50. 行为树编辑1. 程序和策划一起讨论需要什么节点2. 程序写各种Action/Condition3. 策划输出xml
51. 51. • 常用方法• Behavior Tree• 原理• 进阶• 应用• 总结
52. 52. 策划赐词• 解放——解放程序&策划• 易用——图形化优势• 不足——编辑器不足• 期待——学习型AI
53. 53. 优点• 静态树 - Static Tree Halo2 -> Halo3 : - Stimulus + Masks• 可复用 - Reusable 内置结点(Com / Dec)给力，只编写外部结点(Con / Act)• 可扩展 - Extendable 内置 (WRandSel / WRandSeq / Probability…)，外部(积累)
54. 54. 更重要的是• 简单• 直观• 规范• 流程优化 以前：策划文档(xls)，程序翻译(成就感=0)，愤怒的QC (鸭梨大) 现在：策划用BTE(所编即所玩)；QC表示可以承受(Blackboard) 程序前期——写condition/action 程序后期——还要程序吗？
55. 55. Q & A & Discuss Thx