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.
This commit is contained in:
Josh Creek
2026-08-19 22:46:04 +01:00
parent 03f49e59c8
commit 602fa297d0
15 changed files with 100 additions and 260 deletions
+2 -250
View File
@@ -1,7 +1,7 @@
{
"stage_index": 1,
"attempt": 2,
"status": "blocked",
"attempt": 0,
"status": "in_progress",
"log": [
{
"stage_index": 0,
@@ -258,254 +258,6 @@
],
"reason": "Human override. Only miss was the training goal-rate floor, at 0.7731 vs 0.80; every evaluation gate passed (65-22-13 vs promoted/easy.json, 87% non-draw, 12.6% physical-side imbalance) and the goal rate improved monotonically across all three attempts (0.537 -> 0.683 -> 0.773). Also promoted to Game/bots/promoted/medium.json on the same evidence. Stage 5 resumes from this checkpoint."
}
},
{
"stage_index": 1,
"stage_number": 5,
"stage_name": "intercepts",
"experiment": "20260818-1903-gen5-s5-intercepts",
"attempt": 0,
"telemetry_tail": {
"rollout/air_touch_fraction": 0.00011999999731779099,
"rollout/airborne_fraction": 0.2547863810658455,
"rollout/ep_len_mean": 97.30996008300781,
"rollout/ep_rew_mean": 16.281804374694826,
"rollout/forward_motion_fraction": 0.33076866614818573,
"rollout/goal_rate": 0.8198399951457978,
"rollout/grounded_upright_fraction": 0.1814400002658367,
"rollout/mean_altitude": 3.249552144050598,
"rollout/productive_air_touch_fraction": 0.0,
"rollout/upright_fraction": 0.7921435704231262,
"rollout/vertical_thrust_mean": 0.06410999808754772
},
"telemetry_failures": [
"rollout/productive_air_touch_fraction=0.0000 < 0.0050"
],
"evaluation_goal_failures": [],
"side_balance_failures": [],
"eval": {
"timestamp": "2026-08-19T03:12:42+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260818-1903-gen5-s5-intercepts.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 55,
"wins_b": 30,
"draws": 15,
"side_results": {
"a_team_0": {
"wins_a": 25,
"wins_b": 17,
"draws": 8
},
"a_team_1": {
"wins_a": 30,
"wins_b": 13,
"draws": 7
}
},
"physical_team_wins": {
"team_0": 38,
"team_1": 47
},
"win_rate_a": 0.55
},
"evals": [
{
"timestamp": "2026-08-19T03:12:42+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260818-1903-gen5-s5-intercepts.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 55,
"wins_b": 30,
"draws": 15,
"side_results": {
"a_team_0": {
"wins_a": 25,
"wins_b": 17,
"draws": 8
},
"a_team_1": {
"wins_a": 30,
"wins_b": 13,
"draws": 7
}
},
"physical_team_wins": {
"team_0": 38,
"team_1": 47
},
"win_rate_a": 0.55
}
],
"decision": "fail"
},
{
"stage_index": 1,
"stage_number": 5,
"stage_name": "intercepts",
"experiment": "20260819-0412-gen5-s5-intercepts-retry1",
"attempt": 1,
"telemetry_tail": {
"rollout/air_touch_fraction": 0.00011999999731779099,
"rollout/airborne_fraction": 0.25744442877173424,
"rollout/ep_len_mean": 112.18267991638183,
"rollout/ep_rew_mean": 20.06156894302368,
"rollout/forward_motion_fraction": 0.32834857150912283,
"rollout/goal_rate": 0.7362400003671646,
"rollout/grounded_upright_fraction": 0.17714000023156404,
"rollout/mean_altitude": 3.2925854358673097,
"rollout/productive_air_touch_fraction": 0.0,
"rollout/upright_fraction": 0.7877685700654984,
"rollout/vertical_thrust_mean": 0.09532099807504565
},
"telemetry_failures": [
"rollout/goal_rate=0.7362 < 0.7500",
"rollout/productive_air_touch_fraction=0.0000 < 0.0050"
],
"evaluation_goal_failures": [],
"side_balance_failures": [],
"eval": {
"timestamp": "2026-08-19T12:21:42+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260819-0412-gen5-s5-intercepts-retry1.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 58,
"wins_b": 33,
"draws": 9,
"side_results": {
"a_team_0": {
"wins_a": 26,
"wins_b": 22,
"draws": 2
},
"a_team_1": {
"wins_a": 32,
"wins_b": 11,
"draws": 7
}
},
"physical_team_wins": {
"team_0": 37,
"team_1": 54
},
"win_rate_a": 0.58
},
"evals": [
{
"timestamp": "2026-08-19T12:21:42+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260819-0412-gen5-s5-intercepts-retry1.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 58,
"wins_b": 33,
"draws": 9,
"side_results": {
"a_team_0": {
"wins_a": 26,
"wins_b": 22,
"draws": 2
},
"a_team_1": {
"wins_a": 32,
"wins_b": 11,
"draws": 7
}
},
"physical_team_wins": {
"team_0": 37,
"team_1": 54
},
"win_rate_a": 0.58
}
],
"decision": "fail"
},
{
"stage_index": 1,
"stage_number": 5,
"stage_name": "intercepts",
"experiment": "20260819-1321-gen5-s5-intercepts-retry2",
"attempt": 2,
"telemetry_tail": {
"rollout/air_touch_fraction": 0.0,
"rollout/airborne_fraction": 0.2547037144303322,
"rollout/ep_len_mean": 108.22539994812011,
"rollout/ep_rew_mean": 20.78616273498535,
"rollout/forward_motion_fraction": 0.33834266650676725,
"rollout/goal_rate": 0.7449199994802475,
"rollout/grounded_upright_fraction": 0.22299999982118607,
"rollout/mean_altitude": 3.228344327926636,
"rollout/productive_air_touch_fraction": 0.0,
"rollout/upright_fraction": 0.7867764747142791,
"rollout/vertical_thrust_mean": 0.03713899875985459
},
"telemetry_failures": [
"rollout/goal_rate=0.7449 < 0.7500",
"rollout/productive_air_touch_fraction=0.0000 < 0.0050"
],
"evaluation_goal_failures": [],
"side_balance_failures": [],
"eval": {
"timestamp": "2026-08-19T21:34:06+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260819-1321-gen5-s5-intercepts-retry2.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 56,
"wins_b": 31,
"draws": 13,
"side_results": {
"a_team_0": {
"wins_a": 25,
"wins_b": 16,
"draws": 9
},
"a_team_1": {
"wins_a": 31,
"wins_b": 15,
"draws": 4
}
},
"physical_team_wins": {
"team_0": 40,
"team_1": 47
},
"win_rate_a": 0.56
},
"evals": [
{
"timestamp": "2026-08-19T21:34:06+00:00",
"model_a": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260819-1321-gen5-s5-intercepts-retry2.json",
"model_b": "/home/jcreek/ai-training/CosmicClash/Game/bots/20260816-2126-gen5-s4-handling-retry2.json",
"seed": 1,
"episodes": 100,
"wins_a": 56,
"wins_b": 31,
"draws": 13,
"side_results": {
"a_team_0": {
"wins_a": 25,
"wins_b": 16,
"draws": 9
},
"a_team_1": {
"wins_a": 31,
"wins_b": 15,
"draws": 4
}
},
"physical_team_wins": {
"team_0": 40,
"team_1": 47
},
"win_rate_a": 0.56
}
],
"decision": "fail"
}
]
}