独立战斗框架
状态:V1 框架;兼容规则集 legacy_v1。
所有权
BattleKernel 使用战斗私有编队、小队与配置副本,不依赖场景树或真实世界时钟。BattleManager 转换世界输入,每时辰同步伤亡,再发出事件。世界视图不是修改内核的入口。
玩家、行为树和后续训练适配器共用 observe、query_actions、step。外部援军、补给、环境和城防事件由世界适配层提交,不属于策略权限。
对抗与信息
首期实验场是无援军陆地野战。双方看到公开数值,看不到对方未生效指令、随机状态、未来事件。每时辰先观察再统一推进;NO_OP 不会覆盖当前姿态。
实验场场景:res://scens/test/battle_arena.tscn。提供 idle、random、conservative、aggressive 策略。场景与树资源位于 res://res/battle_arena/,无需编辑脚本即可调整已支持的阈值。
候选种子 11/23/37,留出种子 101/211/307;每场景交换攻守。胜率以策略 A 为视角,仅对已结束样本计算;截断单列,不当作平局。当前兼容规则将有序撤退方判负,不代表保存主力的战略价值。
当前策略与使用方式
当前是本地规则策略对抗,不需要大模型、API Key 或网络服务,也不会在对局结束后自动训练或修改策略。行为树控制器目前只在实验场使用,不会自动接管大地图中的所有战斗。
| 策略 | 当前行为 |
|---|---|
| idle | 始终返回 NO_OP,不提交新军令;战斗仍按当前姿态继续结算。 |
| random | 使用独立种子,从查询结果标记为 executable 的行动中随机选择。 |
| conservative | 已撤退则不干预;士气低于 40 或损失比例大于 35% 时尝试有序撤退;否则尝试合法追击,无行动则 NO_OP。 |
| aggressive | 已撤退则不干预;士气低于 25 时尝试撤退;随后依次尝试合法追击、强行突破和投入预备队,否则 NO_OP。 |
在 Godot 打开 res://scens/test/battle_arena.tscn,运行当前场景后选择策略 A/B,再点击运行。默认是 aggressive 对 conservative;单次批量覆盖五个预设场景、三个种子及攻守交换,共 30 场。留出评估选项仅切换种子集,不启动训练。支持取消、导出报告、导出末场回放及加载回放逐时辰查看。
调整已有策略阈值和树结构可编辑 res://res/battle_arena/policies/*.tres;部队、补给等预设可编辑 res://res/battle_arena/scenarios/*.tres。当前界面的策略和场景清单固定在 res://scens/test/battle_arena.gd,增加新资源时还需更新对应 ID 清单。
后续如需接入大模型或强化学习,应新增控制器实现 decide(observation, action_query) 并返回稳定行动 ID;现有 V1 没有提供模型调用、训练循环或参数更新功能。
保存和回放
快照包含配置、军令、独立部队状态、随机状态、事件、规则及引擎版本。旧 schema v2 结合关联编队迁移;缺失引用或未知版本会失败,不覆盖原状态。
回放保存初始快照及逐步行动、外部事件和预期观察。相同引擎、规则与输入下应产生相同结果。界面可以导出报告和末场回放,加载后逐时辰检查军令原因。
边界
V1 不包含 Python 桥接、强化学习训练器、科技树重做、通用行为树编辑器或 Wiki 阅读器。规则定义来源于资源;Wiki 是解释层,不驱动结算。