mirror of
https://github.com/prosolis/gogobee.git
synced 2026-07-16 08:52:42 +00:00
Sim hardening + H4 calibration findings → Phase J plan
Harden expedition-sim with the three layers a real player carries: race mods (+1 Human across the board), tier-appropriate equipment (weapon/armor/helmet/boots/tool promoted from tier 0 to a level-mapped tier), and a lean consumables bundle (2 heals + 1 buff at T2-T4, 3 heals + 2 buffs at T5). Capture material yields in SimResult so calibration sweeps actually read out the H4 signal. Three sweeps in sim_results/ (n=10): bare baseline, +gear/race, +lean consumables. Headline: yield is gated by combat survival, not charge counts. Fighter and Mage hit a sharp wall at T3+ even kitted; no class extracts the T5 dragons_lair boss. Tuning charges before fixing class survival would over-tune against a strawman, so H4 is now flagged blocked on Phase J. Phase J appended to gogobee_harvest_charges_plan.md: J0 baseline at n=30, J1 Fighter T3+ wall, J2 Mage T2+ wall, J3 T5 boss (sim artifact vs over-tuned vs raid content), J4 validation matrix.
This commit is contained in:
38
sim_results/summarize.sh
Executable file
38
sim_results/summarize.sh
Executable file
@@ -0,0 +1,38 @@
|
||||
#!/usr/bin/env bash
|
||||
# Aggregate h4_baseline.jsonl into a per-(class,level,zone) table.
|
||||
# Columns: class, level, zone, n, p50 yield, mean yield, mean rooms, %cleared, %tpk, %fled, %extracted.
|
||||
set -euo pipefail
|
||||
|
||||
infile=${1:-h4_baseline.jsonl}
|
||||
cd "$(dirname "$0")"
|
||||
|
||||
jq -rs '
|
||||
group_by([.Class, .Level, .Zone])
|
||||
| map({
|
||||
class: .[0].Class,
|
||||
level: .[0].Level,
|
||||
zone: .[0].Zone,
|
||||
n: length,
|
||||
yields: [.[] | .YieldCount],
|
||||
rooms: [.[] | .Rooms],
|
||||
outcomes: [.[] | .Outcome]
|
||||
})
|
||||
| map(. + {
|
||||
p50_yield: (.yields | sort | .[(length/2|floor)]),
|
||||
mean_yield: ((.yields | add) / length),
|
||||
mean_rooms: ((.rooms | add) / length),
|
||||
pct_cleared: (([.outcomes[] | select(. == "cleared")] | length) * 100 / .n),
|
||||
pct_tpk: (([.outcomes[] | select(. == "tpk")] | length) * 100 / .n),
|
||||
pct_fled: (([.outcomes[] | select(. == "fled")] | length) * 100 / .n),
|
||||
pct_extracted: (([.outcomes[] | select(. == "extracted")] | length) * 100 / .n)
|
||||
})
|
||||
| sort_by(.zone, .class, .level)
|
||||
| (["class","level","zone","n","p50_yld","mean_yld","mean_rms","%clr","%tpk","%fled","%ext"] | @tsv),
|
||||
(.[] | [.class, .level, .zone, .n, .p50_yield,
|
||||
(.mean_yield * 10 | round / 10),
|
||||
(.mean_rooms * 10 | round / 10),
|
||||
(.pct_cleared | round),
|
||||
(.pct_tpk | round),
|
||||
(.pct_fled | round),
|
||||
(.pct_extracted | round)] | @tsv)
|
||||
' "$infile" | column -t -s $'\t'
|
||||
Reference in New Issue
Block a user