决策计划提交
全库目录221
本文目录5
搜索返回步骤以后,角色还不能立即执行。调度器需要核对模式、目标与输入是否仍有效,再把执行树和首条命令共同发布。本页采用决策输入与动作交接的身份体系:模式实例拥有计划上下文,计划代次区分修订,树实例执行某次已采用的计划。Planning表示等待规划,Executing表示执行树已经安装。持久出站表与日志的前提见决策日志与恢复。
本文的L表示有序持久提交位置,Tick表示逻辑调度步;M、P、B、C分别标识模式、规划查询、行为树和命令。示例截止值与失败次数属于这套配置的参数。
组合调度与提交
各模型已经说明怎样选择与执行,组合时还要确定哪一层拥有计划、哪一层可以发动作,以及一次选择在哪个提交点生效。守卫受伤后转入撤退,下面沿这次交接连接它们。
模式进入与规划交接
撤退需要规划,但创建模式实例与找到计划是两个完成边界。组合配置的Enter在调度入口同步校验模式配置、目标门禁和上下文容量,准备模式实例ID、计划代次、目标读集与Planning记录。提交成功时把模式加入实际路径,Enter即完成。发布以前失败只丢弃本次准备;尚无树和动作,无需发送取消。发布成功的模式以后恰好执行一次Exit。
规划在Enter的提交完成后推进。第一次提交保存Planning、模式实例、计划代次、输入快照与查询ID,并将规划请求写入出站表。派发器随后执行该请求:同步配置在本机有界计算,异步配置交给工作线程。两种配置都先取得这份持久请求,计算结果只作为候选返回。规划返回无计划、预算耗尽或输入失配时,模式已经活动,按计划终态与重规划的失败预算或重规划规则处理。目标改成安全待机时走正常Exit。初始化模式上下文失败才属于Enter失败,不能把后来的搜索失败倒记成进入失败。
采用计划时,调度器校验模式实例、计划代次和读集,把有序原子步骤映射成记忆型顺序树。每个步骤固定动作类型、参数、前提与效果核对规则,对应一片动作叶。步骤开始前复查前提;叶消费宿主成功回执时先核对实际效果,成立才向顺序节点返回Success,效果不符返回Failure,结果尚未确定则保持Running对账。顺序节点因此只有在真实效果成立后才进入下一叶。交战计划[接近,攻击]中,接近结清移动资源并确认实际距离后,攻击叶才登记武器命令,HFSM交战路径保持。前提失配同样清理后返回Failure,规划器的预期效果始终只用于搜索。
非空计划的第二次提交消费规划候选,再共同保存计划安装、树实例、Executing阶段和首叶待发命令。空计划先核对当前事实:目标成立则共同保存候选已消费与Satisfied读集,不创建树或首命令;目标未成立则以无效计划计一次失败。
采用前重新核对模式、目标、计划代次与输入读集,再准备树及命令记录的容量。Planning没有活动树;准备失败也没有叶可以派发。决策日志与失败回执使用独立预留空间;树槽不足仍能提交等待或失败记录。候选按查询ID与尝试号保存不可变内容及采用状态,失败原因决定下一轮消费什么。
每个决策轮只有一次提交和一个独立轮号。同一逻辑Tick可先完成进入轮,再完成同步规划候选的采用轮;后一个轮号产生新的命令序号空间。这样命令ID仍由NPC实例、轮号和轮内序号唯一确定,计算速度不会改变提交次序。
在容量充足的撤退分支中,日志L110提交模式M8、计划1、Planning和查询P12,Enter在这里完成;派发P12得到[补弹,进入掩体]后,L111才提交树B9及首命令C18。L110以前中断,撤退尚未进入;L110以后、L111以前中断,恢复M8和原查询,等待结果或按查询恢复规则重试;L111以后中断,恢复B9并对账C18。计算已完成但采用未提交时,候选不能让树提前活动。再次恢复仍按这两个日志位置推进,不重复Enter。
候选采用失败
| 失败条件 | 本次决策提交 | 下一轮动作 |
|---|---|---|
| 候选模式实例或计划代次已过期 | 将旧候选置Discarded,保存拒绝原因,当前有效计划保持原状态 | 继续当前计划,不因迟到候选退出当前模式 |
| 当前目标切换 | 将该候选置Discarded,保存Exiting并使查询失效 | 沿HFSM退出,不为旧目标重试安装 |
| 模式仍有效,输入读集失配 | 消费并丢弃候选,递增计划代次,以新快照登记Planning与新查询 | 按新输入重规划,原候选不得只换读集后采用 |
| 读集有效,树或命令容量不足 | 保留原模式和计划代次,将候选置WaitingCapacity,保存重试次数及截止Tick | 下一逻辑Tick重新校验目标与读集,再尝试安装同一候选,不重新Enter或重做搜索 |
| 搜索无计划或预算耗尽 | 消费相应结果,登记一次规划失败 | 按计划终态与重规划的连续失败预算重试或退出 |
WaitingCapacity首次发生时保存当前Tick加3的截止值,每个后续逻辑Tick最多尝试一次。到截止仍不能安装,就把候选置Rejected,按一次规划采用失败消费,计入同一目标的连续失败预算;预算未耗尽则登记新计划代次和新查询,耗尽则退出到安全待机。容量恢复只允许重试,不能跳过读取核验。重复候选通知或同Tick重复唤醒不会增加次数;输入失配本身不算搜索失败,相关外部语义版本改变时按计划终态与重规划的规则重置预算。所有候选状态、次数与新查询均随决策提交保存。
假设L110已进入M8,Tick50收到P12候选,但树槽不足。L111保存WaitingCapacity和截止Tick53,M8仍为Planning,尚无B9或C18。Tick51容量仍不足,只保存本轮拒绝;Tick52容量可用,重新核对读集后,L113才共同安装B9、Executing和C18。若Tick51门版本已变化,则在该轮丢弃P12,登记计划2与新查询,Tick52的空闲槽不会使P12复活。若直到Tick53都无容量,该候选只贡献一次失败。恢复读取等待状态与原截止值,逾期直接走失败消费,不延长等待或重复Enter。
实现与证据
本文为机制设计与状态推演,完整NPC框架、异步动作和持久恢复尚未接入运行。相关机制片段的局部验证见效用评分与目标规划。
相关主题
参考资料
本文的动作账本、版本与提交次序属于示例架构。行为树的引擎来源见状态机与行为树,目标规划原始实践见效用评分与目标规划;它们不直接规定本文持久协议。