fix: import json, use make_env_base in phase switch, and run eval sequentially to avoid second concurrent sim car

This commit is contained in:
Paul Huliganga 2026-04-19 20:37:25 -04:00
parent f3c89116ee
commit 2b90de2fba
1 changed files with 12 additions and 3 deletions

View File

@ -11,7 +11,7 @@ Exp 14b: Fine-tune mountain champion (v5 reward) — throttle schedule.
This script is intentionally conservative: small LR, frequent evals, and This script is intentionally conservative: small LR, frequent evals, and
saves so we don't lose progress. saves so we don't lose progress.
""" """
import sys, os, time import sys, os, time, json
sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..')) sys.path.insert(0, os.path.join(os.path.dirname(__file__), '..'))
from datetime import datetime from datetime import datetime
from stable_baselines3 import PPO from stable_baselines3 import PPO
@ -197,7 +197,7 @@ try:
env0.close() env0.close()
except Exception: except Exception:
pass pass
env0 = VecTransposeImage(DummyVecEnv([make_env(throttle_min)])) env0 = VecTransposeImage(DummyVecEnv([make_env_base(0.2, throttle_floor=throttle_min)]))
model.set_env(env0) model.set_env(env0)
remaining = phase_steps remaining = phase_steps
@ -213,8 +213,17 @@ try:
model.save(os.path.join(SAVE_DIR, 'model')) model.save(os.path.join(SAVE_DIR, 'model'))
log(f'[{steps_done}/{TOTAL_STEPS}] Checkpoint saved: {ckpt}.zip') log(f'[{steps_done}/{TOTAL_STEPS}] Checkpoint saved: {ckpt}.zip')
# Eval # Eval sequentially: close training env first so we do not create a
# second concurrent sim connection / second car during checkpoint eval.
try:
env0.close()
except Exception:
pass
res = evaluate_model(model, throttle_min, sets=EVAL_EPISODES) res = evaluate_model(model, throttle_min, sets=EVAL_EPISODES)
# Restore training env after eval
env0 = VecTransposeImage(DummyVecEnv([make_env_base(0.2, throttle_floor=throttle_min)]))
model.set_env(env0)
# compute mean lap time for episodes that completed at least 1 lap # compute mean lap time for episodes that completed at least 1 lap
lap_times = [lt for r in res for lt in r['lap_times']] lap_times = [lt for r in res for lt in r['lap_times']]
mean_lap = sum(lap_times)/len(lap_times) if lap_times else None mean_lap = sum(lap_times)/len(lap_times) if lap_times else None