← ALL ARTICLES
游戏AI6 MIN READ

计划终态与重规划

全库目录221
本文目录6

行为树返回成功,只说明这次步骤结束;撤退目标是否成立,还取决于实际弹药、掩体和站位事实。本页从根终态消费展开Satisfied、Replanning和Exiting三条路径,输入是宿主回执和最新事实,输出是保持目标、登记新计划或退出模式。进入与采用的提交边界见决策计划提交,树叶清理见状态机与行为树。

示例沿用同一名守卫:快照42已接纳接近请求C17,快照43收到受伤事件,快照44为取消完成后的最新事实。交战模式持有旧树,撤退模式需要有弹药且在掩体;字母C表示命令身份,实例17表示宿主接纳的实际移动。

计划状态推进

模型组合的状态推进

决策边界HFSM实际路径目标与计划行为树及命令
快照42根/战斗/交战交战计划代次5,步骤接近→攻击接近叶登记C17,等待接纳后跟踪实例17
快照43受伤路径仍为根/战斗/交战,目标路径改为根/战斗/撤退交战代次6使旧搜索与未启动攻击失效;撤退目标为有弹药且在掩体旧树Cancelling,向C17或实例17登记取消,新树尚未创建
取消完成删除已退出交战,保留根/战斗,再进入撤退消费最新快照44;撤退实例从计划代次1开始,无弹药时计划为补弹→进入掩体撤退Enter提交Planning即完成,计划采用后创建新树;首个补弹叶登记C18
补弹成功根/战斗/撤退实际弹药更新后,复查进入掩体前提下一叶登记新的移动命令;到达回执才建立在掩体事实

若快照44已有弹药,规划器只生成进入掩体,C18才是移动命令;命令载荷由实际首步骤决定。HFSM退出先等待整棵旧树结清,再结清模式持续持有的保持等资源,最后清理模式上下文。叶取消自己的动作,模式取消已交给自身的保持,双方按账本中不同的所有者推进。候选规划结果还携带模式实例、计划代次和输入读集;取消等待中门关闭,旧候选即使算完也不能安装到撤退上下文。

快照44进入撤退以前分配上下文失败,就沿状态机与行为树的进入失败路径到安全待机;已经提交Planning以后,搜索或采用失败归当前撤退实例,按决策计划提交的预算续行。两者分别发生在Enter提交之前和之后。

恢复先定位表中的交接位置:取消回执未消费就仍在交战退出中;进入提交已存在则恢复撤退Planning;采用提交已存在才恢复新树与C18。决策日志与恢复的日志按这三种持久状态对账,内存里的目标标签不决定是否重新Enter。

行为树终态与计划续行

同模式内换计划保留模式实例,递增计划代次并创建新树,旧树的Finished结果保存在终态记录中。模式阶段沿决策计划提交中的Planning、Executing推进,再按根终态进入Replanning、Satisfied或Exiting。调度器先消费根节点终态,再做效用重评估,最后推进退出或规划;每个根终态以模式实例、计划代次和树实例定位,只消费一次。

根终态与条件模式和目标处理后续执行
Success,实际事实已满足目标模式保留,计划记Satisfied,保存目标成立所依据的读集停止Tick已结束树;继续观察事实与紧急事件,目标仍成立时不再为同一目标生成计划
Success,但目标事实未成立记执行结果与目标不一致,进入Replanning取得实际事实重新规划,受同一失败预算约束
Failure先检查目标是否已由外部变化满足;满足则按Satisfied处理,否则进入Replanning原动作资源全部结清后,重读前提与成本,生成新计划和新树;保持模式实例,不调用HFSM Enter
Cancelled,存在HFSM退出请求保持Exiting,按最新目标路径完成旧模式Exit旧树结束及资源释放确认后,才进入新模式
Cancelled,没有模式退出请求记录执行器撤销原因,效用层重新选择当前可行目标目标相同且仍需执行则Replanning;目标改变则走HFSM退出;结果未知继续等待对账

根节点Finished以前,失败叶已经完成自己的资源清理;宿主账本若尚不能确认释放,模式保持清理等待,不创建替代树。动作成功只更新实际效果,并不自动证明整个目标成立。

Satisfied保存目标读集,相关事实失效时重新评估。静态掩体允许被动站立时,树结束并释放移动器;移动支撑上则由模式持有的保持实例继续占用移动器,树结束只表示计划步骤完成。两种情况都由实际站位事实决定目标是否持续成立。保持进入Recovering时使原事实失效,调度器登记目标待恢复,并等待保持器的有界纠偏;恢复有效后重验目标,保持失败才沿同一失败预算重规划。目标已经改变则直接退出,不能为了等待纠偏延迟紧急切换。

模式退出先禁止新交互并使站位事实失效,完成活动树及手部交互的取消,再登记对保持实例的取消。保持退出且账本确认资源不再属于它后,HFSM才完成该模式Exit。同模式换计划若需要移动器,也走这一保持取消入口;仅使用其他资源且前提仍成立的步骤可以并行。取消已结束的移动命令不会取消其后继保持,后者有自己的实例及命令身份。宿主账本、模式持续资源表与取消出站项共同记录交接,具体顺序见导航动作交接。

有活动交互时,保持失效会使其前提失效,叶完成中止后将根终态交给上表消费;没有活动树的Satisfied模式则直接等待保持恢复。两种路径都不在事实无效期间启动依赖站位的新叶。目标相同且保持仍Recovering时,调度器保存有界等待,沿保持器的原截止继续;恢复有效后重读事实,再选择Satisfied或新计划,保持失败后才继续依赖该站位的重规划。紧急目标改变直接走退出,已产生的根终态仍只消费一次。

继续快照44的无弹药分支:补弹叶失败,根返回Failure,模式仍为战斗/撤退,撤退计划1终结。调度器消费终态后登记计划2的Planning状态,新快照发现附近另一弹药点可用,规划结果绑定同一撤退实例、计划2与输入读集。采用结果后创建新树,新的补弹叶才登记新命令。旧计划1的迟到消息只结清旧身份。若原目标已被其他系统补足,直接Satisfied,不再补弹。

同模式重规划也沿决策计划提交的候选采用入口执行,WaitingCapacity、读集拒绝与失败预算均归当前计划代次。Planning与Replanning没有活动执行树,查询身份及候选状态随模式上下文保存。

预算耗尽与证明无计划分别记录,但都消耗一次规划尝试;本例配置在相同目标及外部输入版本下最多容许连续3次规划或执行失败,随后退出到安全待机,并为该目标保存30个逻辑Tick的退避。

目标成功满足或相关外部输入的语义版本变化时重置连续失败计数;规划成功而执行失败仍属于一次失败,搜索返回可行计划本身不清零。输入依赖变化或紧急事件可以提前触发重评估;退避到期只允许新尝试,不绕过门禁。重复回执、内部计划代次变化及同任务自身的账本变化不重置失败计数。

终态消费、失败计数、Satisfied读集或新Planning记录在同一次决策提交中保存,异步派发进入出站表。消费后尚未发出规划查询就退出,恢复续交该查询;消费前退出则重取原根终态。若再次恢复,沿原提交还原撤退计划2,既不重复累计计划1的失败,也不重新Enter撤退。普通运行的终态处理与决策日志与恢复的恢复过程共用这份状态。

实现与证据

本文为机制设计与状态推演,完整NPC框架、异步动作和持久恢复尚未接入运行。相关机制片段的局部验证见效用评分与目标规划。

相关主题

参考资料

本文的动作账本、版本与提交次序属于示例架构。行为树的引擎来源见状态机与行为树,目标规划原始实践见效用评分与目标规划;它们不直接规定本文持久协议。