コンテンツにスキップ

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点:

  1. 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 を用意」の順序。
  2. 未充填 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 のエネ数は、敗因の定量化に有効