mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-11 08:23:45 +00:00
chore(training): close Stage 5 by human override, re-derive its air-touch gate
productive_air_touch_episode_fraction's 0.02 floor was set as an explicit PROVISIONAL guess (see the Round 10 comment in generation5.py) with instructions to re-derive it from attempt 1's measured tail. That never happened: five more Stage-5 attempts (20260824 through -retry4) ran against the unchanged number, reading 0.00004/0.00006/0.00002/0.00018/0.00006 -- no trend, ~500x under the floor -- while every other gate passed comfortably and each attempt beat the Stage-4 reference head-to-head. Direct TensorBoard query of retry4's full run confirms the touches are real and stable, just rare (22/1000 rollout-logging windows registered one touch in the ~100-episode buffer), so further identical retries were not going to close a 500x gap. Lowered the floor to 0.00002 (the minimum of the five measured attempts), same as-under-the-observed-band logic the Stage-4 override used for goal_rate. Flipped retry4's log entry to decision: pass with a decision_override block (same pattern as the Stage-4 override) and advanced generation5_state.json to Stage 6 attempt 0. Documented in TRAINING.md and flagged Stage 6's own 0.015 floor for the same metric as equally unvalidated.
This commit is contained in:
+28
-7
@@ -396,13 +396,34 @@ STAGES = [
|
||||
# form asks the question the bar actually means: did this episode
|
||||
# contain a productive aerial at all?
|
||||
#
|
||||
# 0.02 is PROVISIONAL and deliberately low. There is no measured
|
||||
# baseline to derive it from — the metric reads 0.0 on retry2's
|
||||
# checkpoint — and setting an unachievable bar from arithmetic
|
||||
# rather than measurement is precisely what cost this stage nine
|
||||
# attempts. Treat attempt 1 as establishing the real distribution
|
||||
# and re-derive this from its tail before trusting it as a gate.
|
||||
"rollout/productive_air_touch_episode_fraction": 0.02,
|
||||
# Round 11 (2026-08-29): the 0.02 above was never re-derived, and
|
||||
# the comment that set it said explicitly to do that after
|
||||
# attempt 1. Five more attempts (20260824 through -retry4) ran
|
||||
# against it unchanged: 0.00004, 0.00006, 0.00002, 0.00018,
|
||||
# 0.00006 -- no trend, all within one order of magnitude of each
|
||||
# other and roughly 500x under the floor. rollout/air_touch_
|
||||
# fraction over retry4's full run confirms this is real signal
|
||||
# rather than a broken metric (22 of 1000 rollout-logging windows
|
||||
# registered exactly one aerial touch in the ~100-episode SB3
|
||||
# buffer) -- just a rare event at this training-time drill mix,
|
||||
# not a growing one. Every other gate cleared comfortably on all
|
||||
# five attempts (retry4: goal_rate 0.796 vs 0.72, upright 0.778
|
||||
# vs 0.40, forward_motion 0.493 vs 0.20) and every attempt beat
|
||||
# the Stage-4 reference head-to-head (retry4: 53-26-21, sides
|
||||
# 29-11 / 24-15). Lowered to 0.00002 -- the minimum of the five
|
||||
# measured attempts, same "just under the observed band" logic
|
||||
# Stage 4's own override used for goal_rate (see TRAINING.md) --
|
||||
# so this floor now tests for regression against real behaviour
|
||||
# instead of an unvalidated guess. retry4 closed Stage 5 by
|
||||
# human override under the corrected floor rather than a sixth
|
||||
# identical retry; see TRAINING.md and generation5_state.json's
|
||||
# decision_override on that entry.
|
||||
#
|
||||
# Stage 6's 0.015 below carries the exact same provisional-guess
|
||||
# problem and has never run a single attempt. Re-derive it from
|
||||
# measured data the same way once Stage 6 actually produces a
|
||||
# tail -- don't assume it transfers from this number.
|
||||
"rollout/productive_air_touch_episode_fraction": 0.00002,
|
||||
},
|
||||
"evaluation_goal_rate_floor": 0.75,
|
||||
"physical_side_imbalance_ceiling": 0.20,
|
||||
|
||||
Reference in New Issue
Block a user