摘要

在这款回合制战棋里,一个兵组被攻击后通常会反击一次;反击用完后,再攻击它就不会挨打。我们复查一组已有的搜索路径时发现:协同搜索控制器只在“敌人恰好还有一次反击、先消耗掉、再让下一个友军跟进”时才提出攻击候选,于是“目标反击已经为 0”的普通攻击根本不会进入比较。补上这类候选(仍须通过原来的完整两层比较才会改选)后,16 个冻结叶子的持续续玩中原先 4 条失败转为胜利,其余 12 条完全不变;24 组既有阵型对照中 1 组负转胜、23 组不变。但在一个复杂节点上,新候选让首对比较耗尽了 4 秒预算。这些都是已观察过的开发来源,不是独立的棋力验收,也没有接入默认 AI。

要回答的问题

上一轮诊断中有 4 条续玩输了,是因为路径在“绕圈”,还是因为某些好动作从未被考虑?

方法

  1. 先审计重复:只读 137 个已存事件。35 处“同一行动者、同一棋盘”的情况大多夹着实际伤害;只有 4 处全程生命不变,都是移出又移回,且回合和反击次数已经变化。这不足以证明存在循环,所以没有实现一个只看位置的“循环检测”。
  2. 单次攻击干预(因果诊断):在蓝方第一次选择移动/等待/跳过且存在合法普通攻击时,只这一次改成攻击,其余全部保持。它是诊断,不是拟议策略。
  3. 候选遗漏复现:对触发的状态,用完全相同的两次行动、四个公共随机样本比较原动作与攻击。
  4. 新入口:在原协同候选之外,查询公开攻击预览,加入“预期伤害 > 0 且目标不能反击”的普通攻击;所有新增候选仍走原完整比较和截止检查,quick 已选的攻击、英雄动作和法术不被替换。

设置

16 个四层叶子(同一近战布局、两种法术配置、四个随机样本、等待/攻击两条根路径);另冻结 123 个初态(96 个阵型初态 + 27 个保存对局节点)对比新旧控制器选择,以及 24 个蓝方输入的持续对战。

结果

单次干预在 6 条路径触发:

原路径叶子 原续玩 单次攻击干预 新控制器持续续玩
等待/样本 1,两种法术配置 红胜,红剩 203 生命 蓝胜,蓝剩 73 蓝胜,蓝剩 73
等待/样本 3,两种法术配置 红胜,红剩 296 生命 蓝胜,蓝剩 61 蓝胜,蓝剩 61
等待/样本 2,两种法术配置 蓝胜,蓝剩 154 生命 蓝胜,蓝剩 118 蓝胜,蓝剩 154
其余 10 叶子 全部蓝胜 未触发 完整轨迹不变

在 4 条原失败状态里,敌方剩余反击为 0。原两层比较一旦拿到攻击候选就能区分:样本 1 攻击 487.0625 对移动 213.5125,样本 3 攻击 411.075 对移动 171.780。另外两处有利的等待,目标反击仍为 1,两层比较也保持等待。

扩大检查:123 个初态新旧控制器最终选择全部相同;24 组持续对战共 48 局全部终局、597 次转移,只有“空法术近战双兵”一组负转胜(旧:红剩 295 生命;新:蓝剩 70),其余 23 对完整轨迹相同。

独立读盘核验 1,238 次转移,61 项相关测试通过(15.43 秒)。

失败与负结果

  • 成本反例:节点 deep-seed20-after-034 上,旧控制器约 0.322 秒、无新候选;新控制器发现 4 个候选,首对比较约 3.5876 秒,8 个根返回只完成 7 个,约 4.0125 秒后退回原 quick 的等待。主要成本是 531 次状态转移(约 3.07 秒),只优化候选准备不能保证完成。
  • 强制攻击在 2 条路径上反而少保留了兵力(154→118),说明“有输出就该打”不成立。
  • 失败续玩转胜后,等待路径仍只剩 73/61 生命、攻击路径剩 148/231,剩余生命的排序冲突仍在,不能证明静态估值正确。

局限

  • 全部是已观察过的开发来源;射手掩护、退路等原失败场景没有解决。
  • 控制器仍读取对手隐藏构筑,不是公平策略。
  • 协作截止允许单次调用越界,不能声称 4 秒硬截止。

结论与下一步

候选遗漏是真实、可复现的,补上它能修正一类失败,同时保留有利等待。但复杂节点的预算问题让它只能留在离线。下一步按审阅建议冻结逻辑,在 24 个新来源上分层(普通、机会富集、复杂反例各 8 个)做持续对照,结果见实验 0049。