美文网首页
行为树BehaviorTree小记

行为树BehaviorTree小记

作者: 埃罗芒老兄 | 来源:发表于2018-01-23 10:52 被阅读90次

    原文:http://www.aisharing.com/archives/90

    1

    • 行为节点一般分为两种运行状态:
      运行中(Executing):该行为还在处理中
      完成(Completed):该行为处理完成,成功或者失败

    • 控制节点常用的有以下三种
      选择(Selector):选择其子节点的某一个执行
      序列(Sequence):将其所有子节点依次执行,也就是说当前一个返回“完成”状态后,再运行先一个子节点
      并行(Parallel):将其所有子节点都运行一遍

    • 每一个节点,不管是行为节点还是控制节点,都会包含一个前提的部分

    • 对于每次的Tick,可以用如下的流程来描述:

    action = root.FindNextAction(input);
    if action is not empty then
      action.Execute(request,  input)  //request是输出的请求
    else
      print “no action is available”
    

    2

    • 带优先级的选择节点(Priority Selector):这种选择节点每次都是自左向右依次选择,当发现找到一个可执行的子节点后就停止搜索后续子节点。这样的选择方式,就存在一个优先级的问题,也就是说最左边的节点优先级最高,因为它是被最先判断的。对于这种选择节点来说,它的子节点的前提设定,必须是 从窄到宽 的方式,否则后续节点都会发生 饿死 的情况
    • 不带优先级的选择节点(Non-priority Selector):这种选择节点的选择顺序是从上一个执行过的子节点开始选择,如果前提满足,则继续执行此节点,如果条件不满足,则从此节点开始,依次判断每一个子节点的前提,当找到一个满足条件的子节点后,则执行该节点。这种寻找方式不存在哪个节点优先判断的问题,所以对于前提的设置的要求,就是要保证互斥(Exclusion)
    • 带权值的选择节点(Weighted Selector):对于这种选择节点,我们会预先为每一个分支标注一个权值(Weight Value),然后当我们选择的时候,采用随机选择的方式来选,随机时会参考权值,并且保证已经被测试过的节点的不会再被测试,直到有一个节点的前提被满足,或者测试完所有的节点。带权值的选择节点对于子节点前提由于随机的存在,所以子节点的前提可以任意,而不会发生“饿死”的情况,一般来说,我们通常会把所以子节点的前提设为相同,以更好的表现出权值带来的概率上的效果。

    相关文章

      网友评论

          本文标题:行为树BehaviorTree小记

          本文链接:https://www.haomeiwen.com/subject/pqzjaxtx.html