这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
4.3 退化解与退化模式
退化 = 可达模式数不少、但实际打法全挤在一条主模式上。退化指数 = 1000 × 主模式出现次数 // 非空回合程序总数。本节对 64 个优先序策略算胜率与退化指数,按胜线/退化线分成退化解、健康解、退化模式、弱解四象限:退化解 22 个,最退化的 heavy>strike>guard 胜率 1000‰、退化 631‰;B 层证明退化线一动名单就变。
posts
这里是全站文章的归档入口,下面是按时间倒序排列的全部文章。若想按主题浏览,请从首页的专题分类进入。
退化 = 可达模式数不少、但实际打法全挤在一条主模式上。退化指数 = 1000 × 主模式出现次数 // 非空回合程序总数。本节对 64 个优先序策略算胜率与退化指数,按胜线/退化线分成退化解、健康解、退化模式、弱解四象限:退化解 22 个,最退化的 heavy>strike>guard 胜率 1000‰、退化 631‰;B 层证明退化线一动名单就变。
涌现度 = 1000 × 可达模式数 // 分母。它同时依赖粒度(卡牌多重集 / 费用多重集 / 张数)、分母(13 条规则 / 6 个动作符号)与种子集三个声明。本节对 3 粒度 × 2 分母各算一遍:fine 2692‰、cost 1307‰、size 384‰,说明绝对数不可比,但换粒度后 9 个变体的排序不变。
规则是局部的,模式是全局的。本节把《灰烬牌库》一回合内合法打出的卡牌多重集定义成「回合程序」,解析枚举出合法闭包 35 个,再用状态去重 BFS 算出默认种子可达 34 个、8 种子并集 35 个,得出涌现度 2692‰,并声明它是只做相对比较的代理指标。
最优解有两笔代价。算它:minimax 搜索树有 b^d 个叶,b=6、d=20 时是 3.6×10^15,预算 10^7 下穷举只够到深度 8,alpha-beta 最好情况也只到 16——再深必须改用采样。用它:均衡把概率压在 2/4 的支撑上,熵 919 只有均匀 2000 的 459‰,最优一旦落地就压窄了可玩空间。
纯策略没有鞍点时,双方按概率混着出招——混合策略把 maximin 与 minimax 之间的间隙补上。本节用整数行列式精确解出 2×2 子博弈,再在完整 4×5 矩阵上验证:重击/格挡按 1/3 与 2/3 混、强攻/反击按 1/4 与 3/4 混,博弈值恰为 −4,且任一纯策略单方面偏离都不会更好。
零和博弈里玩家想最大化最坏结果(maximin),对手想最小化最好结果(minimax);两者相等时存在纯策略鞍点,即纯策略纳什均衡。本节把《灰烬牌库》的 4 张牌 × 5 种敌人架势写成整数收益矩阵,实跑得到 maximin=−6、minimax=−3、间隙 3、鞍点 0 个——这张矩阵没有纯策略均衡。
找到支配对只是诊断,修复才是设计动作。本节把「消除全部严格支配对」写成带约束的搜索目标——strictPairs==0 且最优策略仍能赢够局数,再扫 7 个候选旋钮:enemyHp 拉到 79 确实消掉支配,但全员必败(治死);最小可行修复是 energyMax 3→2,代价 1 步、最优胜局仍 15。
支配检测问的是:一张 |S|×|Ω| 的得分矩阵里,哪些策略被别的策略处处压住。本节给三种等价实现——全对枚举、按行和剪枝、迭代删除(IESDS),复杂度上界是 |S|·(|S|−1)·|Ω| 次元素比较;在 5×16 实例上朴素法用掉上界的 346‰、剪枝法 309‰,三者结论逐字一致。
支配策略是玩家迟早会发现、然后只用它的那条路——其余策略沦为摆设。本节给严格支配与弱支配的可判定定义,用《灰烬牌库》的固定下标策略族乘 16 个种子,算出 5 条严格支配对、7 条弱支配对、0 条支配策略,并验证严格支配对随种子集合单调增。
卷二的交付物不是一份报告,而是一组冻结的动态接口:规格版本、digest 键清单、PRNG 常数、params 键、基线 digest、代理指标口径(含容差)与采样协议。用一个脚本逐条核对它们是否被冻住,并说明卷三《原型、可玩性与品类》接住什么。
把 S / P / W 三处真的跑一遍:Python 仿真、TS 内核 node --test、浏览器 Playwright 真玩,三处产出同一条 172 字符 digest,并把同一个体验代理指标(血量余裕度)算成同样的整数。这是「规格跑起来」主张的可验证形态,代理指标只做相对比较,禁绝对化。
把本卷前 15 章的动态与体验度量装配成一条可核对的链:19 个 stage 各自声明所属章节、档位、指标名、单位、代理标记与证据文件。S 层核对契约自洽与规格对齐,B 层用 leave-one-out 找出结构承重件。全部体验指标都是代理指标,只做相对比较,禁绝对化。
反推不是免费的:代价 = 正推次数 × 每次正推的成本。本节实测一维二分在 5 个精度上的真实正推次数与耗时,据此标定代价模型,再算出二维全网格在同样精度下要贵一个 R/ε 的因子;最后给预算判据——同样 20 万 runs,一维能钉到 ε=1,二维只能到 ε=2。
一个指标带反推出的不是一个点,而是二维参数平面上的一条带。本节在 enemyHp×enemyAttack 网格上用「胜率带 + 子池稳定性」两条约束圈出可行域,粗扫后逐行二分把边界钉到步长 1,实测域含 9 行、面积 54;B 层再扫带宽与种子数,看域怎么伸缩。
反推是正推的逆问题:给定目标集成胜率 500‰,求哪个 enemyHp 让曲线穿过它。本节用整数二分把反推从 O(区间) 次正推压到 O(log 区间),实测只花全网格 131‰ 的算力且结果逐格一致;B 层再对种子池偏移与种子数扰动,检验反推值自身的漂移与分辨率下限。
相变图要读三样东西:序参量、临界点、临界带宽。本节用粗扫定位跨越区间、二分把临界点收到整数、再在邻域量出过渡带宽,并用纯 xml.etree 手绘序参量曲线与两相着色的相图,两张图都回读重建逐格比对;胜率是代理指标,只作相对比较,禁绝对化。
热力图不是新指标,而是把「策略族 × 参数档」两张一维表压成一张二维切片,用颜色承载第三个量。本节用纯 xml.etree 逐格画 rect、整数色阶插值、手绘色标图例,画出四种策略族在六档 enemyAttack 下的胜率矩阵并回读重建逐格比对;格值胜率是代理指标,只作相对比较。
动态可视化只需两族图:横轴是有序参数的曲线、横轴是离散分箱的谱。本节用纯 xml.etree 手绘坐标轴、网格线、刻度与图例,画出胜率随 enemyAttack 变化的曲线与按牌型分箱的伤害与次数谱,并用 ET.fromstring 回读重建逐格比对;胜率与占比都是代理指标,只作相对比较。
跨配置到底能不能比:四分量单位不同,比较前必须先归一化,而换一种归一化口径排序就会翻盘。S 层算 6 个配置的可玩性矩阵,量出两种归一化口径下的同序比例 concordance,并暴露相变宽度对测量 regime 的依赖;B 层再扰动闸门阈值、测量 regime 与种子池,数出判决翻盘的次数。
把可玩性向量当成一个采样问题:四个分量对种子数的敏感度完全不同——熵是规格属性、与种子无关,相变宽度最慢。S 层以全 16 种子为真值,量出每个分量进容差的最小 k 与闸门判决稳定的最小 k,并给出 |A|^D 超过枚举上限时必须改采样的判据;B 层把容差按倍率扫一遍,看 min-k 到底跟着谁动。