Commit Graph

152 Commits

Author SHA1 Message Date
CosmicClash Training Bot ba1887fe93 chore(training): generation 5 progress after 20260822-1242-gen5-s5-intercepts 2026-08-23 02:58:22 +01:00
CosmicClash Training Bot b83e030a44 chore(training): Add 20260822-1242-gen5-s5-intercepts checkpoints, logs, and exported policy 2026-08-23 02:55:57 +01:00
CosmicClash Training Bot 5fcdb256b3 chore(training): restore resume_override for stage-5 retry2 after crashed push 2026-08-22 12:42:13 +01:00
CosmicClash Training Bot b69291a7d3 chore(training): Add 20260821-1516-gen5-s5-intercepts checkpoints, logs, and exported policy 2026-08-22 11:50:40 +01:00
Josh Creek 818f8e89cd fix(training): make the stage-5 air-intercept drill physically solvable
productive_air_touch_fraction sat at exactly 0.0 across nine Stage-5
attempts and 540M timesteps. Two rounds of reward shaping were aimed at
it (air_approach_weight, then air_touch_bonus_weight); both worked --
airborne_fraction 0.223->0.258, mean_altitude 2.59->3.25,
vertical_thrust_mean 0.004->0.063 -- and the ship now visibly plays the
ball in the air. The metric could not see it because it counts only
touches with the ball above AIR_TOUCH_HEIGHT (5m), and
_place_air_intercept never produced a reachable one.

Simulating the spawn distribution against the ship's flight envelope
(vertical_thrust 120 / mass 5 = 24 m/s^2 less gravity, drag capping
climb near 12 m/s): a ball spawned 6-12m up at 6-11 m/s is above 5m for
a median of 0.80s, while the ship spawned 7-13m behind, 3-10m below, and
at a dead stop. An ideal interceptor -- point mass, instant attitude, no
righting torque, zero reaction delay -- makes that touch in 0.00% of
episodes and reaches the ball at all in 0.5%.

Retune the drill instead of the reward: ball higher (8-14m) and slower
(4-8 m/s), ship closer (4-9m behind), narrower lateral spread, and a
6-14 m/s planar run-up rather than a standing start -- the dead stop was
the largest single factor. Ideal interceptor now reaches the ball in
~98% of episodes and above 5m in ~37%, so the 0.005 floor has headroom.
AIR_TOUCH_HEIGHT stays 5.0 so the metric remains comparable with earlier
generations.

Resume from retry2 rather than restarting from Stage 4: that rule guards
against a changed reward function invalidating the value function, and
the reward function is untouched here -- only the state distribution
moved, so the policy that already learned to fly is what should be
pointed at a reachable target. Adds a one-shot resume_override to
generation5_state.json, consumed on first use.
2026-08-21 15:14:36 +01:00
CosmicClash Training Bot 23e3dd18f9 chore(training): generation 5 progress after 20260821-0056-gen5-s5-intercepts-retry2 2026-08-21 13:49:28 +01:00
CosmicClash Training Bot 0699b14d4e chore(training): Add 20260821-0056-gen5-s5-intercepts-retry2 checkpoints, logs, and exported policy 2026-08-21 13:48:12 +01:00
CosmicClash Training Bot 9708bfafa3 chore(training): generation 5 progress after 20260820-1157-gen5-s5-intercepts-retry1 2026-08-21 00:56:33 +01:00
CosmicClash Training Bot 12bc4d7e8a chore(training): Add 20260820-1157-gen5-s5-intercepts-retry1 checkpoints, logs, and exported policy 2026-08-21 00:55:09 +01:00
CosmicClash Training Bot aa049aaff4 chore(training): generation 5 progress after 20260819-2307-gen5-s5-intercepts 2026-08-20 11:57:16 +01:00
CosmicClash Training Bot 7782d63660 chore(training): Add 20260819-2307-gen5-s5-intercepts checkpoints, logs, and exported policy 2026-08-20 11:55:54 +01:00
Josh Creek 602fa297d0 chore(training): add air_touch_bonus_weight and restart stage-5 intercepts
air_approach_weight alone didn't move productive_air_touch_fraction after a
further 180M steps (360M cumulative across all six Stage-5 attempts): an
unredirected air-intercept ball falls short of the goal from gravity and
just lands on the floor, so the already-solved ground game collects the
same episode reward whether or not anything touched the ball in the air.
air_touch_bonus_weight adds a conjunctive event bonus on top of
ball_touch_reward for a touch that's both genuinely aerial and
goal-directed, targeting the actual measured behaviour instead of only the
approach to it.
2026-08-19 22:46:04 +01:00
CosmicClash Training Bot 03f49e59c8 chore(training): generation 5 progress after 20260819-1321-gen5-s5-intercepts-retry2 2026-08-19 22:34:06 +01:00
CosmicClash Training Bot fde098c6c9 chore(training): Add 20260819-1321-gen5-s5-intercepts-retry2 checkpoints, logs, and exported policy 2026-08-19 22:32:53 +01:00
CosmicClash Training Bot 2f6e7b1201 chore(training): generation 5 progress after 20260819-0412-gen5-s5-intercepts-retry1 2026-08-19 13:21:42 +01:00
CosmicClash Training Bot 0db21b20a6 chore(training): Add 20260819-0412-gen5-s5-intercepts-retry1 checkpoints, logs, and exported policy 2026-08-19 13:20:33 +01:00
CosmicClash Training Bot 6fc2efacc6 chore(training): generation 5 progress after 20260818-1903-gen5-s5-intercepts 2026-08-19 04:12:42 +01:00
CosmicClash Training Bot 24b99ff8f9 chore(training): Add 20260818-1903-gen5-s5-intercepts checkpoints, logs, and exported policy 2026-08-19 04:11:29 +01:00
Josh Creek 88591e031f chore(training): add air_approach_weight and restart stage-5 intercepts
Stage 5 blocked all three attempts on productive_air_touch_fraction
stuck exactly at 0.0 across a continuous 180M-step lineage, while
goal_rate/upright_fraction/forward_motion_fraction kept improving on
the same budget. forward_velocity_to_ball_weight (the term that solved
Stage 4's ground pursuit) is hard-gated below GROUND_HANDLING_HEIGHT
and does nothing in the air, so Stage 5's air_intercept_chance had no
matching aerial incentive to learn from. air_approach_weight adds the
airborne mirror (nose-first 3D closing speed, no uprightness
multiplier) and folds into HANDLING_REWARD_FLAGS so Stage 6 inherits
it too. Deleted the three blocked attempts and reset state to resume
Stage 5 from the Stage-4 checkpoint with the new term.
2026-08-18 16:03:56 +01:00
CosmicClash Training Bot 0e685edcf8 chore(training): generation 5 progress after 20260818-0210-gen5-s5-intercepts-retry2 2026-08-18 11:17:39 +01:00
CosmicClash Training Bot a4f60e5b40 chore(training): Add 20260818-0210-gen5-s5-intercepts-retry2 checkpoints, logs, and exported policy 2026-08-18 11:16:23 +01:00
CosmicClash Training Bot 48445839d2 chore(training): generation 5 progress after 20260817-1701-gen5-s5-intercepts-retry1 2026-08-18 02:10:15 +01:00
CosmicClash Training Bot dadfdb2903 chore(training): Add 20260817-1701-gen5-s5-intercepts-retry1 checkpoints, logs, and exported policy 2026-08-18 02:09:04 +01:00
CosmicClash Training Bot 8becffd579 chore(training): generation 5 progress after 20260817-0750-gen5-s5-intercepts 2026-08-17 17:01:22 +01:00
CosmicClash Training Bot 89b1790728 chore(training): Add 20260817-0750-gen5-s5-intercepts checkpoints, logs, and exported policy 2026-08-17 17:00:05 +01:00
Josh Creek 0b6679e84b chore(training): promote stage-4 retry2 to medium and open stage 5
20260816-2126-gen5-s4-handling-retry2 exhausted its three attempts and
missed only the 0.80 training goal-rate floor, at 0.7731. Every
evaluation gate passed: 65-22-13 versus promoted/easy.json, 87% non-draw
against an 80% floor, 12.6% physical-side imbalance against a 20%
ceiling, and both handling telemetry floors clear. The round improved the
goal rate monotonically across attempts (0.537 -> 0.683 -> 0.773) and the
checkpoint plays well by hand, so close Stage 4 by human override.

Promote it to Game/bots/promoted/medium.json. Medium and Hard both point
at the new policy: Hard stays a label-only duplicate until a stronger one
earns hard.json, which keeps the tiers monotonic rather than leaving Hard
weaker than Medium.

generation5_state.json flips that log entry to "pass" with a
decision_override block preserving the original verdict and reasoning,
and advances to Stage 5 attempt 1. This is what passing_entry() needs to
resolve Stage 5's resume checkpoint and evaluation reference, and what
league_pool() will need at Stage 6; --skip-to-next-stage would advance
the stage without marking anything as passing and die immediately.

generation5.sh now pulls before launching. Each stage ends in
commit_progress()'s push, which fails and kills the run hours in if the
box is behind origin.
2026-08-17 07:49:21 +01:00
CosmicClash Training Bot 62ff85e75c chore(training): generation 5 progress after 20260816-2126-gen5-s4-handling-retry2 2026-08-17 03:36:22 +01:00
CosmicClash Training Bot ad2bda4ad7 chore(training): Add 20260816-2126-gen5-s4-handling-retry2 checkpoints, logs, and exported policy 2026-08-17 03:35:11 +01:00
CosmicClash Training Bot 48bc9fd13b chore(training): generation 5 progress after 20260816-1513-gen5-s4-handling-retry1 2026-08-16 21:26:42 +01:00
CosmicClash Training Bot 24534459b1 chore(training): Add 20260816-1513-gen5-s4-handling-retry1 checkpoints, logs, and exported policy 2026-08-16 21:25:24 +01:00
CosmicClash Training Bot d77cdccaab chore(training): generation 5 progress after 20260816-0858-gen5-s4-handling 2026-08-16 15:13:26 +01:00
CosmicClash Training Bot ff7d1579cb chore(training): Add 20260816-0858-gen5-s4-handling checkpoints, logs, and exported policy 2026-08-16 15:11:55 +01:00
Josh Creek ea756bd5ba fix(physics): make upright a real state, and actually start ships on the floor
Six rounds of reward shaping (~700M steps) failed to produce upright ground
driving. A critical review of the simulation rather than the reward found
why:

1. The hull was a 1x1x4 box with inertia (1,1,1) and no restoring torque
   anywhere, so belly-down and rolled-90 were geometrically identical
   resting states. "Upright" was not a physically distinguished state at
   all - the reward was paying for a property the simulation did not have.
2. ~65% of episodes spawned ships via _random_position, which samples Y
   uniformly over the full 18m volume (mean ~8.7m). The measured
   airborne_fraction ~0.44 was largely that spawn distribution, and every
   ground-handling term fades out above 3m, so the shaping being tuned
   barely ever applied.
3. air_drill_chance 0.20 spawned deliberately unreachable-without-climbing
   states in the stage meant to teach ground driving, and its own
   air_touch_fraction (0.0002) shows the drills were never solved.

Fixes land in the physics and the task distribution, not the reward:
- ship.tscn: hull 1x1x4 -> 1.6x0.6x4 so it has one stable resting face;
  inertia (1,1,1) -> (7,1,7), physically correct for the hull, making
  tumbling reluctant while keeping yaw snappy.
- ship.gd: new altitude-faded righting torque (spring-damper toward
  belly-down, faded out by 3m so aerials keep full attitude freedom).
  This is the grav-plating analogue of Rocket League's auto-righting and
  helps human pilots land cleanly too.
- training_mode.gd: new ground_start_chance branch spawning ships level and
  resting on the floor with a floor-level ball - the state the handling
  stage's rewards are actually written for.
- generation5.py: ground-start-chance 0.50, air-drill-chance 0.20 -> 0.0.

Reward terms are left exactly as they were; they should finally pull in a
direction the ship can go.
2026-08-16 08:17:16 +01:00
CosmicClash Training Bot 033a774c92 chore(training): generation 5 progress after 20260815-0812-gen5-s4-handling-retry2 2026-08-15 14:29:47 +01:00
CosmicClash Training Bot aeeb730636 chore(training): Add 20260815-0812-gen5-s4-handling-retry2 checkpoints, logs, and exported policy 2026-08-15 14:28:21 +01:00
CosmicClash Training Bot 9fffaf866a chore(training): generation 5 progress after 20260815-0156-gen5-s4-handling-retry1 2026-08-15 08:12:56 +01:00
CosmicClash Training Bot 34f883cf46 chore(training): Add 20260815-0156-gen5-s4-handling-retry1 checkpoints, logs, and exported policy 2026-08-15 08:11:33 +01:00
CosmicClash Training Bot 376d2388c5 chore(training): generation 5 progress after 20260814-1939-gen5-s4-handling 2026-08-15 01:56:25 +01:00
CosmicClash Training Bot 84e0ebf771 chore(training): Add 20260814-1939-gen5-s4-handling checkpoints, logs, and exported policy 2026-08-15 01:54:55 +01:00
Josh Creek 8f7f672a15 fix(training): restore ground_tilt_penalty, add grounded_upright_fraction diagnostic
Round 4 changed three things at once and two of them cut upright pressure:
grounded_upright_reward went to 0 and ground_tilt_penalty was cut 2.5x,
while the new uprightness multiplier only pays below GROUND_HANDLING_HEIGHT
*and* while moving forward *and* facing the ball - a far narrower slice of
ticks than the penalty it was meant to replace. Net pressure fell and
upright_fraction fell with it (0.268 -> 0.239 -> 0.238, the lowest of any
round). Restore ground_tilt_penalty to 0.05 and change nothing else, so
this is a genuine single-variable test of multiplier plus full tilt
pressure.

The conjunctive mechanism itself held up: forward_motion_fraction reached
its best sustained value (0.242) without goal_rate sagging, ep_rew_mean
turned positive for the first time (+0.28), and eval win rate hit 49% with
no reward hacking.

Also adds grounded_upright_fraction: a diagnostic, deliberately ungated
metric measuring uprightness over real floor-contact ticks instead of
sub-3m ticks. upright_fraction has never exceeded 0.331 across four rounds
and ~560M steps without cheating, and its denominator is dominated by
ballistic transit (airborne_fraction ~0.45, mean_altitude ~4.4m) where
attitude is not meaningfully controllable - so it likely cannot measure
what the 0.45 floor was meant to capture. Re-baseline that floor from what
this reports rather than from another round of reshaping.
2026-08-14 19:36:45 +01:00
CosmicClash Training Bot 7da5b8316f chore(training): generation 5 progress after 20260813-0134-gen5-s4-handling-retry2 2026-08-13 07:45:59 +01:00
CosmicClash Training Bot f08ecbe651 chore(training): Add 20260813-0134-gen5-s4-handling-retry2 checkpoints, logs, and exported policy 2026-08-13 07:44:31 +01:00
CosmicClash Training Bot 76e74aca62 chore(training): generation 5 progress after 20260812-1922-gen5-s4-handling-retry1 2026-08-13 01:34:15 +01:00
CosmicClash Training Bot 4d78e89e95 chore(training): Add 20260812-1922-gen5-s4-handling-retry1 checkpoints, logs, and exported policy 2026-08-13 01:32:50 +01:00
CosmicClash Training Bot 2a00411b35 chore(training): generation 5 progress after 20260812-1307-gen5-s4-handling 2026-08-12 19:21:58 +01:00
CosmicClash Training Bot 9e7b93af2b chore(training): Add 20260812-1307-gen5-s4-handling checkpoints, logs, and exported policy 2026-08-12 19:20:31 +01:00
Josh Creek 4f3cf56e28 fix(training): make uprightness a multiplier on the forward-approach reward
Rounds 2 and 3 showed that tuning grounded_upright_reward's magnitude only
slides along a tradeoff instead of resolving it: at 0.015 upright_fraction
climbed to 0.331 while goal_rate sagged to 0.542 (then farmed outright at
0.696/0.366), and at 0.004 goal_rate climbed 0.569->0.604 while
upright_fraction went flat at ~0.26. An additive uprightness bonus is an
alternative to playing well, so the policy just picks whichever is cheaper
and no magnitude buys both behaviours.

Change the mechanism rather than the number: grounded_upright_reward drops
to 0, and uprightness becomes a multiplier inside the nose-led approach
term, which already requires moving forward at the ball. Parked-and-upright
and fast-but-sideways now both pay zero; only upright, forward, nose-on to
the ball pays full. forward-velocity-to-ball rises 0.06 -> 0.15 to offset
the ~2-3x expected-value cut from the new factor, and ground-tilt-penalty
drops 0.05 -> 0.02 now that uprightness is paid positively during play.
Delete the three blocked attempts and reset state to restart from the
Stage-3 foundation.
2026-08-12 13:04:20 +01:00
CosmicClash Training Bot 5260124274 chore(training): generation 5 progress after 20260812-0424-gen5-s4-handling-retry2 2026-08-12 10:31:39 +01:00
CosmicClash Training Bot 8e5eea4f46 chore(training): Add 20260812-0424-gen5-s4-handling-retry2 checkpoints, logs, and exported policy 2026-08-12 10:30:03 +01:00
CosmicClash Training Bot 052b47c04f chore(training): generation 5 progress after 20260811-2216-gen5-s4-handling-retry1 2026-08-12 04:24:21 +01:00