raging_bolt_ogerpon 敗因の定量診断とエネ配線 cleanup (2026-07-14)¶
前回ノートで構造バグ5個を潰し「勝率 ~8% はアーキタイプの天井」と結論づけたが、2 回の tuning が勝率を動かせなかった (2026-07-10 / 2026-07-11 どちらも baseline 超えず)。本ノートは 「天井は本当に params で動かないのか、それともまだバグがあるのか」 を records トレースで定量的に切り分けた記録。
診断手順¶
raging_bolt を player0 に固定し vs メタ5デッキ (dragapult / garchomp / archaludon / mega_lucario
/ mega_abomasnow) を 50game ずつ、--output で records JSONL を収集。各 record の
meta.board_trace / selected_option_trace / game_setup_diagnostics
を集計。プール戦 (mirror 込み) より厳しい「常に強い相手」条件なので絶対値は低めに出る (baseline
~3%)。
発見¶
1. セットアップ「速度」は主犯ではない¶
first_attack_ready_turn 中央値: raging_bolt 4 (自分の2ターン目) vs 相手 3
(相手の2ターン目)。差は約 0.8 ハーフターンで
ほぼ互角。前ノートの「遅い後手デッキだから負ける」仮説はデータで否定された。
2. 真の症状: 0 打点 Burst Roar の空撃ちループ¶
raging_bolt の攻撃使用回数 (250game):
| 攻撃 | 回数 | 内容 |
|---|---|---|
| Burst Roar (はじけるほうこう) | 373 | 0 ダメージの手札リセット |
| Bellowing Thunder (きょくらいごう) | 86 | 本命フィニッシャー |
| Prism Edge | 67 | Iron Crown 180 (自己ロック) |
Burst Roar 248 回すべて、Active は Raging Bolt ex で 2-8 エネ積んでいるのに Bellowing を撃てない (93 回中 92 回 Burst Roar が唯一の合法攻撃)。原因は Bellowing のコスト {L}{F} が揃っていないこと。デッキのエネは 草8 / 雷3 / 闘3 / 超1 で、Ogerpon が草を撒く一方 {L}{F} は各3枚しかなく、手張り1/turn では両型を揃える前に何ターンも 0 打点で空回りする。しかも Bellowing は全エネ捨て → ゼロから {L}{F} 再構築 → また空回り (一発屋)。
3. 盤面が ex 偏重でサイドレース即負け¶
Raging Bolt ex / Ogerpon ex / Iron Crown ex / Mega Kangaskhan ex … 全部 ex (各2サイド献上)。相手は3回 KO で6サイド。実測で rb は平均 0.7 サイドしか取れず相手は 5.6 の完敗。
試した修正 (エネ配線 cleanup)¶
症状 (Burst Roar 空撃ち) を直接叩く2点:
- Crispin (アカマツ) の {L}{F} コスト完成を最優先化
supporter_tier.akamatsu_complete_cost(23000)。_bolt_cost_needs(obs)が非空 (Bolt が {L}/{F} を欠く) のとき発火。Crispin は異なる型の基本エネ2枚を 1 枚で添付でき、手張り1/turn の制約を突破して cost を一気に完成できる。KO 攻撃 (tier.ko 30000) より下なので「撃てるなら撃つ、撃てないなら次ターン KO を用意」の順序。 - 未充填 Bolt の強制昇格を抑制
target_selection.promote_unready_bolt(6000)。KO で強制的に新 Active を選ぶとき、Bellowing を撃てない ({L}{F} 未完) Bolt は Ogerpon 昇格 (9000) より下にランク → エンジンを上げて未充填 Bolt はベンチで再充填させる (2 プライズ ex を晒して 0 打点する劣位手を回避)。
A/B 実測結果 (500game/側・同一 seed 4242・ペア比較)¶
| 指標 | BEFORE | AFTER |
|---|---|---|
| 勝率 (vs 5メタデッキ pin) | 3.0% | 2.6% |
| Burst Roar 空撃ち | 662 | 409 (-38%) |
| Bellowing 発射 | 173 | 163 |
| unfinished | 3 | 3 |
勝率 delta = -0.4pt、z = -0.38 (有意差なし)。
小サンプル (50game/相手) では 1.2%→4.8% と 4 倍に見えたが、500game/側で測り直すと BEFORE 自体が 3.0% に上振れ、AFTER の 4.8% は偶然の高値だった。 厳密なペア比較では勝率差は消える。
結論: Burst Roar は「症状」で「原因」ではなかった¶
挙動 (空撃ち) は意図通り 38% 減ったが勝率は動かない。浮いたターンが KO に変換されないのは、真の壁が別にあるため:
- サイドレース: 全 ex 盤面で「取られる速度 > 取る速度」。エネ配線を直してもこの構造は変わらない
- 一発屋 Bellowing: 全エネ捨てで1体 KO (≒1.5サイド) して自分も落ちる
- Burst Roar のドロー6は山掘りを兼ねていたため、止めた分の利得が一部相殺
2 回の tuning が動かなかったのと同じ壁。raging_bolt の勝率レバーは params でもエネ配線でもなく、サイドレースそのもの (非 ex Raging Bolt を壁に使う / ex 露出を減らす / 一発屋の連射化) にあり、これは turn planner 規模の構造的改修になる。
cleanup 自体は「0 打点 ex を晒す劣位手の除去」として正しい立ち回りであり、将来のプランナーの土台にもなるため保持 (ryo さん判断、2026-07-14)。
追記: Bellowing 連射化 — 初めて勝率が有意に動いたレバー¶
cleanup が空振りした後、「取る速度」側を定量化した。records で Bellowing 発射時の場エネ vs リーサル必要数を集計すると:
- 発射時の場エネ 中央値 10、リーサル必要数 中央値 3
- 94% の発射が余剰2枚以上 (中央値5枚) を無駄に全捨てしていた
きょくらいごう (Bellowing Thunder) はコスト {L}{F} + 打点 = 70×捨てた基本エネ数。engine は「どのエネを何枚捨てるか」を DISCARD_ENERGY_CARD の複数選択で委ねており (全捨て強制ではない)、リーサル分だけ捨てて {L}{F}+余剰を残せば次ターンも撃てる。
実装 (score_bellowing_discard の全捨て → 部分捨て)¶
_bellowing_lethal_count(v):apply_damage_modifiersで弱点込みの最小捨て枚数を計算 (score_attack の KO 判定と同じ経路 = 整合)_bellowing_discard_indices(obs): リーサル分を Active Bolt 以外 (ベンチの草燃料) から捨てる。1 ポケモン上のエネは型を識別できない (fungible option) ため Active は一切触らず {L}{F} を確実に温存。ベンチ燃料がリーサルに満たない時のみ全捨てにフォールバック (0 打点ループ防止の不変条件を維持)attack.bellowing.multi_fire(default true) でトグル可能
A/B 実測 (multi_fire off/on、2 seed プール 1500game/側)¶
| 指標 | OFF | ON |
|---|---|---|
| 勝率 (vs メタ5デッキ pin) | 2.93% | 4.40% |
| avg サイド取得 | 0.609 | 0.695 |
| Bellowing 総発射 | 151 | 188 (+24%) |
| 2 回以上 Bellowing した game | 18 | 24 |
delta = +1.47pt、z = 2.14 (5% 有意)。マッチアップ別では lucario 4.0%→7.7% / archaludon 2.0%→4.0% / garchomp 1.3%→2.7% が倍増。
tuning 2 回もエネ配線 cleanup も勝率を動かせなかった中で、連射化 (フィニッシャーのテンポ改善) が初めて有意に勝率を上げた。ただし絶対値は依然低く (このハーネスは最も厳しい pin 条件)、ex 偏重のサイドレースという上限は残る。「取る速度」を上げる方向が正しいレバーだと実証された。
追記 (2026-07-15): コスト配線集中 (中立で保持) と救出退却 (有害で revert)¶
連射化後の再診断で「58% のゲームで Bellowing が一度も合法にならない。その 92% は Bolt が 4-6 エネ積んでいる (型ミスマッチ)」を特定し、2 つの追加レバーを試した。
コスト配線の集中 — 機序は改善、勝率は中立 → cleanup として保持¶
- 発見: (a) fired ゲームは 96% で L/F 両方が Bolt に着地、never ゲームは 49% —しかも L と F が別々の Bolt コピーに分散して全コピー未完。(b) エネ付与先選択 (SWITCH_ENERGY_CARD = みどりのまい/Crispin、1.2 回/game) が score_option で未ルーティング → フォールバック 100 で先頭選択。
- 実装:
_focus_bolt(コスト完成に最も近い 1 体へ集中) /score_energy_destination(select.contextCardの型で振り分け) / 草→Bolt 手張り降格 / DISCARD_ENERGY で {L}{F} 温存。 - 結果: 配線は確実に改善 (Bolt 選択 77%→84%、Bellowing 合法率 39%→42%) したが勝率は multifire 比 +0.3pt (z=0.35、ノイズ)。真の律速は {L}{F} の供給量 (山に 3+3 枚、手張り 1/turn、Crispin は「1 枚だけ場に付与」) で、配線の最適化では 3 ハーフターン以内に両型を揃える確率自体が上がらない。
瀕死 Active の救出退却 — 有害と実測、revert¶
HP40 の Bolt を Active に置いたまま Crispin 込み 8 エネを注ぎ KO で全損する実例から「次ターン被 KO 圏 & 自分から KO 不可なら Active をエネごと退避 + 瀕死 Active への手張りペナルティ」を実装。A/B: 4.40% → 3.13% (-1.3pt, z=-1.8) で悪化。相手の想定打点 (200-280) はダメージを負ったほぼ全ての Active を圏内に入れるため、退却の空回り (retreat-thrash) で攻撃テンポを失う。完全に revert し、main.py / params.yaml に再追加禁止 NOTE を残した。
セッション最終確認 (2 seed プール 1500g/側、vs メタ5 pin)¶
| 構成 | 勝率 | avg サイド |
|---|---|---|
| セッション開始時 | 2.93% | 0.609 |
| + multi-fire | 4.40% | 0.695 |
| + コスト配線 (最終) | 4.67% | 0.767 |
最終 vs 開始時: +1.73pt (z=2.49、有意)。寄与は multi-fire が主。
残る supply 問題 (次の一手の候補)¶
{L}{F} が 3 ハーフターン以内に focus Bolt へ揃う確率が上限を規定する。残る手段: Energy Switch (2 枚) で場内の L/F を focus Bolt へ寄せる型認識ルーティング (ATTACH_FROM/ATTACH_TO は現状型盲目)、Energy Retrieval / Night Stretcher での L/F 回収の優先度づけ、デッキリスト自体の L/F 増量 (deck.csv 変更 = ryo さん判断)。
教訓¶
- 測定済みで有害なガードは躊躇なく revert し、再追加禁止の NOTE をコードに残す。 「正しそうな盤面判断」(瀕死に注がない) が実測で -1.3pt になることがある — reactive scorer では退却/温存系のガードは空回りしやすい
- 症状を叩く前に「その症状を消したら勝てるのか」を A/B で先に確かめる。 Burst Roar 空撃ちは目立つが、消しても勝率に効かなかった (cleanup)。目立つ挙動 ≠ 敗因。一方 Bellowing の余剰全捨ては地味だが「取る速度」に直結し、有意に効いた
- 小サンプル (n=50/config) の勝率差は信用しない。 1試合の重みが 2% の標本では 4 倍の見かけの改善が丸ごとノイズだった。最低 500game/側、低勝率帯では 1500game/側 + 複数 seed プールで z 検定
- 勝率が低い時ほど連続量 (avg サイド取得 / 発射回数) を併読する。 二値の勝敗より分散が小さく、レバーの効き方向を早く判断できる (prizes 0.61→0.70 が先行指標だった)
- records の
game_setup_diagnostics.first_attack_ready_turn/selected_option_traceの攻撃名集計 /board_traceのエネ数は、敗因の定量化に有効