mcpField
C
category-allocation-best-response

category-allocation-best-response

github.com/lyndonkl其他18741 次安装9 周前更新
代码仓库

关于 category-allocation-best-response

用于根据各类别胜率分配梦幻体育阵容资源的技能。它会划分类别、分配杠杆权重,并估算达到联赛获胜门槛的概率。

主要功能

  1. 01按胜率划分类别
  2. 02分配类别杠杆权重
  3. 03检查获胜门槛类别数
  4. 04计算 k-of-n 获胜概率
  5. 05提供临界类别升级逻辑

适用场景

  1. 01确定每周对阵中的阵容调整优先级
  2. 02决定放弃争夺哪些类别
  3. 03判断对阵是否需要采取高方差策略

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/lyndonkl/claude --skill category-allocation-best-response

安装后在 Claude Code 中输入/category-allocation-best-response确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

resources/
methodology.md
template.md
resources/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_capacityopp_projectionper_cat_win_prob逆向?
R42380.64否
HR12140.35否
RBI40410.47否
SB640.72否
OBP0.3350.3280.64否
K55500.64否
ERA3.854.100.65是
WHIP1.221.280.68是
QS430.69否
SV250.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。

注意事项

  1. 不要臆测每项类别的概率。此技能是 matchup-win-probability-sim 的下游使用者。如果你没有来自合适模拟器的 per_cat_win_probability,就不要继续——先计算这些概率。根据原始预测估算概率会忽略方差,而方差正是竞争类别分类的核心。

  2. 杠杆权重 0.0 是硬性约束,而非偏好。当 mlb-lineup-optimizer 读取到 leverage[SV] = 0.0 时,即使某位纯救援投手的 daily_quality 很高,也会拒绝让他先发。这是正确行为(frameworks/game-theory-principles.md 中的原则 #1)——不要为了“保留选择”而把 0 调高到 0.1 或 0.2。零就是零。

  3. 即使我们在某个类别中占优,竞争类别的杠杆也应保持为 1.5。1.5 倍乘数体现了多获得一个单位的边际价值——只要该类别的竞争接近,这一价值就很高。per_cat_win_probability = 0.68 的类别仍有机会通过边际提升,使胜利几乎成为定局;杠杆仍为 1.5(该类别是杠平类别时为 1.2;若降至下方 0.70 的竞争区间,则升至 1.5)。

  4. 阈值和类别数量必须符合联盟赛制。10 类别 MLB 的 cat_win_threshold = 6(严格多数);9 类别 NBA 为 5;10 类别 NHL 为 6。传入错误的阈值会导致分类悄然出错。务必确认联盟的平局规则——有些联盟会将平局计为半场胜利。

  5. 支配策略消除按对阵进行,而非按赛季进行。本周对阵一支擅长终结比赛的对手时放弃的类别,下周面对另一位对手时可能成为杠平类别。不要跨周缓存 conceded_cats。每次对阵都要重新分类。

  6. 逆向类别由上游处理。matchup-win-probability-sim 已返回应用逆向处理后的 per_cat_win_probability(ERA 3.50 击败 ERA 4.20 = 胜率接近 1.0)。此技能会直接使用这些概率。不要再次反转,也不要在分类阶段区别处理逆向类别。

  7. 升级区间很窄(0.20–0.25)。仅当某个 conceded 类别的 per_cat_win_probability 位于狭窄的 [0.20, 0.25) 区间内且我们有可用资源时,才升级该类别。升级概率为 0.15 的类别,是把资源浪费在注定失败的目标上。用一次豁免签约将概率为 0.24 的类别升级至 0.30,或许就能扭转局面,值得一试。

  8. 建议升级时要说明资源成本。笼统地说“升级 HR”无法付诸行动。应说明“用 1 个阵容名额 + $15 FAAB 升级 HR,签下一位每周可增加约 3 个 HR 的强打者”,这样 mlb-waiver-analyst 和 mlb-faab-sizer 才有明确目标。

  9. 当对阵基本确定会输时,应转向提高方差,而不是进一步加码。分类和升级后,如果 k_of_n_win_probability < 0.40,最佳策略是最大化方差(原则 #6),而不是继续加大对 pushed_cats 的投入。在策略说明中标记这场对阵,并在下游调用 variance-strategy-selector。

  10. 此技能与具体运动项目无关——避免套用 MLB 特有假设。在 NBA 或 NHL 场景中调用时,阈值(0.25 / 0.70 / 0.85)、区间、杠杆权重和升级区间逻辑均保持不变。不同运动项目之间只有类别列表和获胜阈值会改变。核心逻辑应保持运动项目无关。

快速参考

四级分类(来自 per_cat_win_probability):

范围类别杠杆权重依据
[0.00, 0.25)conceded0.0被支配的策略。边际投入几乎不会改变结果。
[0.25, 0.70)contested1.5边际价值最高——再投入一个单位往往就能扭转结果。
[0.70, 0.85]pushed1.2应能守住,但并无保证;需重点防守。
(0.85, 1.00]locked1.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-sim
  • cat_win_threshold:int — MLB 10 类别赛制为 6,NBA 9 类别赛制为 5,NHL 10 类别赛制为 6
  • resources_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.0
  • contested_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 类别联赛的泛化能力、输出完整性、上游信号整合、引用

评论

支持 Markdown