mirror of
https://github.com/jcreek/CosmicClash.git
synced 2026-09-11 08:23:45 +00:00
feat(training): add airborne_penalty and a stage-6 "unmask" curriculum run
Stage 5 (aggression) passed (41-47 vs grounded curric-s2-defend, within the lenient gate but not yet a clear win). Rather than keep the locomotion mask on indefinitely, stage 6 reopens full 3D controls on top of the aggression retune and pairs it with a new dense airborne_penalty (scaled by height above the floor) so the policy learns to prefer staying grounded through incentives instead of a hard mask — same regime shift that regressed stage 3, but this time with a mitigation and ~12x the training time (~240M timesteps / ~24h vs ~20M / ~2h) to actually re-converge instead of stalling mid-shift. airborne_penalty follows the existing SHIP_AI_OVERRIDES pattern: default 0 (off) on ship_ai_controller.gd, exposed via train.py's new --airborne-penalty flag, added to training_mode.gd's allow-list. Also adds a per-stage timesteps override in curriculum.py (STAGES[n]["timesteps"]) since this is the first stage to need a different budget than the rest.
This commit is contained in:
@@ -96,6 +96,10 @@ def parse_args():
|
||||
"--ball-touch-reward", type=float, default=None,
|
||||
help="Overrides ShipAIController.ball_touch_reward (event reward on ball contact, cooldown-gated)",
|
||||
)
|
||||
curriculum.add_argument(
|
||||
"--airborne-penalty", type=float, default=None,
|
||||
help="Overrides ShipAIController.airborne_penalty (dense per-tick cost scaled by height above the floor)",
|
||||
)
|
||||
|
||||
return parser.parse_args()
|
||||
|
||||
@@ -116,6 +120,7 @@ def _curriculum_kwargs(args) -> dict:
|
||||
"ai_velocity_to_ball_weight": args.velocity_to_ball_weight,
|
||||
"ai_ball_distance_penalty": args.ball_distance_penalty,
|
||||
"ai_ball_touch_reward": args.ball_touch_reward,
|
||||
"ai_airborne_penalty": args.airborne_penalty,
|
||||
}
|
||||
return {key: value for key, value in mapping.items() if value is not None}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user