关于 category-allocation-best-response
用于根据各类别胜率分配梦幻体育阵容资源的技能。它会划分类别、分配杠杆权重,并估算达到联赛获胜门槛的概率。
主要功能
- 01按胜率划分类别
- 02分配类别杠杆权重
- 03检查获胜门槛类别数
- 04计算 k-of-n 获胜概率
- 05提供临界类别升级逻辑
适用场景
- 01确定每周对阵中的阵容调整优先级
- 02决定放弃争夺哪些类别
- 03判断对阵是否需要采取高方差策略
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ lyndonkl/ claude --skill category-allocation-best-response安装后在 Claude Code 中输入/category-allocation-best-response确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
resources/methodology.mdtemplate.mdresources/evaluators/rubric_category_allocation_best_response.json详细介绍
类别分配最佳响应
目录
示例
场景:Yahoo MLB 10 类 H2H,第 8 周。阈值 = 10 类中的 6 类。上游 matchup-win-probability-sim 返回了当前周的 per_cat_win_probability。我们的资源:5 个空闲阵容位置、$80 FAAB、3 次串流出场机会。
输入:
| 类别 | our_capacity | opp_projection | per_cat_win_prob | 逆向? |
|---|---|---|---|---|
| R | 42 | 38 | 0.64 | 否 |
| HR | 12 | 14 | 0.35 | 否 |
| RBI | 40 | 41 | 0.47 | 否 |
| SB | 6 | 4 | 0.72 | 否 |
| OBP | 0.335 | 0.328 | 0.64 | 否 |
| K | 55 | 50 | 0.64 | 否 |
| ERA | 3.85 | 4.10 | 0.65 | 是 |
| WHIP | 1.22 | 1.28 | 0.68 | 是 |
| QS | 4 | 3 | 0.69 | 否 |
| SV | 2 | 5 | 0.08 | 否 |
按获胜概率分类:
- SV(0.08):
conceded— 被压制的策略。对手预计有 5 次 SV,我们只有 2 次;没有任何边际阵容位置能扭转局面。杠杆 = 0。 - HR(0.35):
contested— 略处下风,但仍有机会。杠杆 = 1.5。 - RBI(0.47):
contested— 胜负各半。杠杆 = 1.5。 - R(0.64)、OBP(0.64)、K(0.64)、ERA(0.65)、WHIP(0.68)、QS(0.69):
pushed(锁定优势需要关注,0.25–0.85)。杠杆 = 1.2。(0.70 是分界点——其中一个如果非常接近该界线,就会归入contested,杠杆为 1.5。) - SB(0.72):
pushed。杠杆 = 1.2。
本周没有任何类别超过 0.85;没有类别属于 locked。
输出:
pushed_cats:[SB, QS, WHIP, ERA, K, R, OBP](7 个类别,获胜概率为 0.64–0.72,按获胜概率降序排列)conceded_cats:[SV]contested_cats:[HR, RBI]leverage_weights:{R: 1.2, HR: 1.5, RBI: 1.5, SB: 1.2, OBP: 1.2, K: 1.2, ERA: 1.2, WHIP: 1.2, QS: 1.2, SV: 0.0}k_of_n_win_probability:0.605(对 10 个类别的概率计算 Poisson-binomial 分布,阈值为 6)rationale:"SV 是被压制的策略(翻盘概率为 8%)——不要花费一个救援投手阵容位置。7 个pushed类别的中位数已达到 6 类阈值,因此应锁定这些类别,并将边际资源投入 HR 和 RBI(contested,1.5 倍杠杆);额外增加一名强打者就有可能扭转对阵结果。"
解读:如果我们只守住 7 个 pushed 类别,预期即可达到阈值。contested 类别(HR、RBI)是杠杆最高的操作所在之处——每增加一个边际 HR 或 RBI 单位,几乎可以一比一地转化为对阵获胜概率。
工作流
复制此清单并跟踪进度:
Category Allocation Best-Response Progress:
- [ ] Step 1: Validate inputs and confirm upstream signals
- [ ] Step 2: Classify each cat by per_cat_win_probability
- [ ] Step 3: Assign leverage_weights
- [ ] Step 4: Check threshold satisfaction (pushed + contested >= K?)
- [ ] Step 5: Apply borderline-upgrade logic if threshold not met
- [ ] Step 6: Compute k_of_n_win_probability via Poisson-binomial
- [ ] Step 7: Write rationale and emit outputs
步骤 1:验证输入并确认上游信号
per_cat_win_probability 是关键的上游依赖,必须来自 matchup-win-probability-sim(或等效模拟器)。不要根据原始容量与预测值自行编造每类概率——matchup-win-probability-sim 会考虑方差,而方差决定了 contested 类别的翻盘概率。请参阅 resources/methodology.md。
- 每个类别都出现在
our_per_cat_capacity、opp_per_cat_projection和per_cat_win_probability中 - 所有
per_cat_win_probability值都在[0, 1]范围内 -
cat_win_threshold在[1, N]范围内,其中N = len(cats) -
inverse_cats是类别列表的子集 - 存在
resources_available字典(即使为空——下游技能仍可能在没有资源计划的情况下使用杠杆权重) - 记录来自
matchup-win-probability-sim的上游random_seed,以供审计
步骤 2:根据 per_cat_win_probability 对每个类别进行分类
应用快速参考中的四级分类。阈值经过精心设定——Blotto 推导出的依据请参阅 resources/methodology.md。
-
< 0.25→conceded_cats(处于劣势的策略——这里的任何阵容名额都严格不如调配到别处) -
0.25–0.70→contested_cats(再增加一个单位的边际价值最高) -
0.70–0.85→pushed_cats(需要关注,但应该能守住) -
> 0.85→locked(不要浪费边际资源——回报已接近于零) - 逆向统计类别(ERA、WHIP、TO、GAA 等)直接使用
per_cat_win_probability——matchup-win-probability-sim已在上游完成逆向处理。不要再次取反。
步骤 3:分配 leverage_weights
杠杆权重会传递给 mlb-lineup-optimizer、mlb-streaming-strategist、mlb-waiver-analyst,以及任何会最大化 Σ daily_quality × leverage[cat] 的下游使用方。请参阅 resources/methodology.md。
-
conceded_cats的leverage = 0.0(严格为零——不是低,而是零) -
contested_cats的leverage = 1.5(再增加一个单位的边际价值高) -
pushed_cats的leverage = 1.2(高于默认值,但低于争夺类别) -
locked类别的leverage = 1.0(默认值——边际提升都是冗余的)
步骤 4:检查是否达到阈值
验证 len(pushed_cats) + len(contested_cats) >= cat_win_threshold。如果未达到,即使我们在有把握的类别上做到 100%,数学上也无法达到获胜阈值;这场对决很可能会输,我们必须升级一个接近认输线的类别,或转向寻求高方差的打法。请参阅 frameworks/game-theory-principles.md 中的原则 #6。
- 统计
pushed_cats + contested_cats(这些类别都有非零的翻盘概率) - 如果计数
>= cat_win_threshold:达到阈值,继续执行步骤 6 - 如果计数
< cat_win_threshold:应用步骤 5 的临界类别升级逻辑 - 如果执行步骤 5 后仍不足:将这场对决标记为
variance-strategy-selector的高方差打法候选
步骤 5:临界类别升级逻辑(有条件执行)
如果步骤 4 未通过,请查找 per_cat_win_probability 位于 [0.20, 0.25)“升级区间”的 conceded_cats。这些类别的胜率刚低于认输线——投入适量资源(一笔豁免签约、一次 FAAB 出价、一次流浪球员首发)就能将其提升到 0.25 以上,进入 contested 等级。
- 按
per_cat_win_probability降序排列conceded_cats - 选出
per_cat_win_probability >= 0.20的最高优先级候选项 - 将其重新分类为
contested,并设置leverage = 1.5 - 在理由中记录升级情况和具体资源成本(例如,“将 HR 从认输类别升级:占用 1 个阵容名额,并花费 $15 FAAB 签下一名强打者”)
- 重新执行步骤 4——如果仍未达到,说明这场对决很可能会输;设置标记并交由
variance-strategy-selector技能处理
步骤 6:通过泊松二项分布计算 k_of_n_win_probability
将各类别获胜视为相互独立的伯努利事件(与 matchup-win-probability-sim 在 poisson_binomial 模式下采用的近似相同)。使用标准 PB 递推计算 P(sum >= cat_win_threshold)。请参阅 resources/methodology.md。
P_0(0) = 1
P_i(k) = P_{i-1}(k) * (1 - p_i) + P_{i-1}(k-1) * p_i for i = 1..N, k = 0..N
k_of_n_win_probability = sum over k >= threshold of P_N(k)
- 使用升级后的
per_cat_win_probability向量(步骤 5 可能已修改其中一个值) - 返回整体
k_of_n_win_probability - 如果该值与
matchup-win-probability-sim返回的matchup_win_probability相差超过 0.03,请进行调查——两者的差异应在 PB 近似误差范围内
步骤 7:撰写理由并输出结果
理由应是对分配逻辑的 2–4 句通俗英文总结。说明认输的类别及原因、争夺的类别及杠杆最高的资源调整,指出任何临界类别升级,并陈述计算出的 k_of_n_win_probability。请参阅 resources/template.md 中的完整示例。
- 所有输出均已提供:
pushed_cats、conceded_cats、contested_cats、leverage_weights、k_of_n_win_probability、rationale -
leverage_weights中每个类别各有一个条目(而非每个让分/放弃/争夺分组各一个) - Rationale 至少明确指出一个放弃的类别和一个争夺的类别
- 使用 resources/evaluators/rubric_category_allocation_best_response.json 进行验证。最低标准:平均分达到 3.5 或以上。
常见模式
模式 1:MLB 10 类别(Yahoo 5x5)
- cats:
[R, HR, RBI, SB, OBP, K, ERA, WHIP, QS, SV] - cat_win_threshold:6
- inverse_cats:
[ERA, WHIP] - 通常放弃:SV(对阵以终结者为主的对手时)、SB(对阵以力量型球员为主的阵容时)、QS(对阵全是 RP 的阵容时)
- 资源:roster_slots(通常有 4–6 个替补席位)、faab($0–$100)、streamer_starts(每周 2–4 次)
- 下游使用方:
mlb-lineup-optimizer(原则 #5)、mlb-streaming-strategist(原则 #1)、mlb-waiver-analyst(原则 #2)
模式 2:NBA 9 类别
- cats:
[PTS, REB, AST, STL, BLK, 3PM, FG%, FT%, TO] - cat_win_threshold:5
- inverse_cats:
[TO] - 通常放弃:FT%(对阵 Giannis/Simmons 类型的阵容时)、TO(对阵低使用率阵容时)、3PM(对阵放弃投篮类别的阵容时)
- 资源:roster_slots、streamer_games(NBA 可通过 DTD 阵容每日使用串流球员)
- 特殊说明:NBA 各类别之间的相关性更高(球队使用率会影响 PTS、AST、3PM);
pushed层级往往会联动,因此一次阵容调整就能同时提升多个类别。这使争夺类别的杠杆效应尤其显著。
模式 3:NHL 10 类别
- cats:
[G, A, +/-, PIM, PPP, SOG, W, GAA, SV%, SO] - cat_win_threshold:6
- inverse_cats:
[GAA] - 通常放弃:SO(零封比赛数量少且随机性强)、PIM(对阵没有打手的阵容时)、+/-(方差很高)
- 资源:roster_slots、streamer_games、goalie_starts
- 特殊说明:守门员类别(W、GAA、SV%、SO)通过同一名球员高度相关;一次串流上场就会影响四个类别。应将守门员类别的杠杆效应视为一个整体,而非四个独立决策。
模式 4:追求方差的弱势方(跨领域)
- 当
k_of_n_win_probability < 0.40时,我们处于弱势。将争夺类别的杠杆效应提高至1.5,并将该场对局标记给variance-strategy-selector。高方差的阵容构建方式(表现时好时坏的球员、单次先发的明星球员)即使不改善阵容,也能将我们的胜率从约 35% 提高到约 45%。参见frameworks/game-theory-principles.md中的原则 #6。
注意事项
-
不要臆测每项类别的概率。此技能是
matchup-win-probability-sim的下游使用者。如果你没有来自合适模拟器的per_cat_win_probability,就不要继续——先计算这些概率。根据原始预测估算概率会忽略方差,而方差正是竞争类别分类的核心。 -
杠杆权重 0.0 是硬性约束,而非偏好。当
mlb-lineup-optimizer读取到leverage[SV] = 0.0时,即使某位纯救援投手的daily_quality很高,也会拒绝让他先发。这是正确行为(frameworks/game-theory-principles.md中的原则 #1)——不要为了“保留选择”而把 0 调高到 0.1 或 0.2。零就是零。 -
即使我们在某个类别中占优,竞争类别的杠杆也应保持为 1.5。1.5 倍乘数体现了多获得一个单位的边际价值——只要该类别的竞争接近,这一价值就很高。
per_cat_win_probability = 0.68的类别仍有机会通过边际提升,使胜利几乎成为定局;杠杆仍为 1.5(该类别是杠平类别时为 1.2;若降至下方 0.70 的竞争区间,则升至 1.5)。 -
阈值和类别数量必须符合联盟赛制。10 类别 MLB 的
cat_win_threshold = 6(严格多数);9 类别 NBA 为5;10 类别 NHL 为6。传入错误的阈值会导致分类悄然出错。务必确认联盟的平局规则——有些联盟会将平局计为半场胜利。 -
支配策略消除按对阵进行,而非按赛季进行。本周对阵一支擅长终结比赛的对手时放弃的类别,下周面对另一位对手时可能成为杠平类别。不要跨周缓存
conceded_cats。每次对阵都要重新分类。 -
逆向类别由上游处理。
matchup-win-probability-sim已返回应用逆向处理后的per_cat_win_probability(ERA 3.50 击败 ERA 4.20 = 胜率接近 1.0)。此技能会直接使用这些概率。不要再次反转,也不要在分类阶段区别处理逆向类别。 -
升级区间很窄(0.20–0.25)。仅当某个
conceded类别的per_cat_win_probability位于狭窄的[0.20, 0.25)区间内且我们有可用资源时,才升级该类别。升级概率为 0.15 的类别,是把资源浪费在注定失败的目标上。用一次豁免签约将概率为 0.24 的类别升级至 0.30,或许就能扭转局面,值得一试。 -
建议升级时要说明资源成本。笼统地说“升级 HR”无法付诸行动。应说明“用 1 个阵容名额 + $15 FAAB 升级 HR,签下一位每周可增加约 3 个 HR 的强打者”,这样
mlb-waiver-analyst和mlb-faab-sizer才有明确目标。 -
当对阵基本确定会输时,应转向提高方差,而不是进一步加码。分类和升级后,如果
k_of_n_win_probability < 0.40,最佳策略是最大化方差(原则 #6),而不是继续加大对pushed_cats的投入。在策略说明中标记这场对阵,并在下游调用variance-strategy-selector。 -
此技能与具体运动项目无关——避免套用 MLB 特有假设。在 NBA 或 NHL 场景中调用时,阈值(0.25 / 0.70 / 0.85)、区间、杠杆权重和升级区间逻辑均保持不变。不同运动项目之间只有类别列表和获胜阈值会改变。核心逻辑应保持运动项目无关。
快速参考
四级分类(来自 per_cat_win_probability):
| 范围 | 类别 | 杠杆权重 | 依据 |
|---|---|---|---|
[0.00, 0.25) | conceded | 0.0 | 被支配的策略。边际投入几乎不会改变结果。 |
[0.25, 0.70) | contested | 1.5 | 边际价值最高——再投入一个单位往往就能扭转结果。 |
[0.70, 0.85] | pushed | 1.2 | 应能守住,但并无保证;需重点防守。 |
(0.85, 1.00] | locked | 1.0 | 默认权重;边际收益几乎没有额外价值。 |
升级区间(适用于临界的让出类别):
| 范围 | 操作 |
|---|---|
[0.20, 0.25) | 如果第 4 步的阈值检查未通过,可考虑升级。 |
[0.00, 0.20) | 不要升级。资源更适合投入有竞争的类别。 |
泊松二项递推(用于 k_of_n_win_probability):
Given p = [p_1, p_2, ..., p_N] and threshold K:
P_0(0) = 1
P_0(k) = 0 for k >= 1
For i = 1..N:
P_i(0) = P_{i-1}(0) * (1 - p_i)
For k = 1..i:
P_i(k) = P_{i-1}(k) * (1 - p_i) + P_{i-1}(k-1) * p_i
k_of_n_win_probability = sum_{k=K}^{N} P_N(k)
所需输入:
our_per_cat_capacity:dict[cat, number]— 我方预计的每类别产出(剩余周或整周)opp_per_cat_projection:dict[cat, number]— 对手预计的每类别产出per_cat_win_probability:dict[cat, float in [0,1]]— 来自matchup-win-probability-simcat_win_threshold:int— MLB 10 类别赛制为 6,NBA 9 类别赛制为 5,NHL 10 类别赛制为 6resources_available:dict[str, number]— 例如,{"roster_slots": 5, "faab": 80, "streamer_starts": 3}inverse_cats:list[str]— 数值越低越好的类别(ERA、WHIP、TO、GAA 等)
生成的输出:
pushed_cats:list[cat]— 按per_cat_win_probability降序排列conceded_cats:list[cat]— 被支配;杠杆权重为 0.0contested_cats:list[cat]— 边际杠杆最高leverage_weights:dict[cat, float]— 值为{0.0, 1.0, 1.2, 1.5}k_of_n_win_probability:float in [0,1]— 按此分配方案计算的整体对阵获胜概率rationale:string— 以通俗英语说明分配逻辑的 2–4 句话
上游依赖:
matchup-win-probability-sim(必需)——提供per_cat_win_probability和整体matchup_win_probability,用于交叉验证*-category-state-analyzer(可选,适用于 MLB/NBA/NHL)——提供每类别容量和对手预测
下游使用方:
mlb-lineup-optimizer/ NBA / NHL 同类工具——使用leverage_weights(原则 #5)mlb-streaming-strategist——将conceded_cats作为硬性约束读取(原则 #1)mlb-waiver-analyst/mlb-faab-sizer——使用contested_cats+resources_available,锁定高杠杆的补强目标variance-strategy-selector——使用k_of_n_win_probability,决定采用热门方还是冷门方的策略风格(原则 #6)
关键资源:
- resources/template.md:输入/输出约定、MLB 10 类别赛制示例、NBA 9 类别赛制示例、依据模板
- resources/methodology.md:Colonel Blotto 的起源及 H2H 变体数学原理、K-of-N 为何不是赢家通吃、对称情形下的纳什均衡、非对称情形下的启发式最佳响应、被支配策略的消除、上游信号推导、方差转向逻辑
- resources/evaluators/rubric_category_allocation_best_response.json:10 项标准——分类准确性、杠杆权重分配、被支配策略识别、阈值达标检查、依据质量、临界类别升级逻辑、对非 10 类别联赛的泛化能力、输出完整性、上游信号整合、引用