Commit Graph

4 Commits

Author SHA1 Message Date
Johnny Fernandes a584a034e9 Project-wide cleanup: gitignore, dead code, stale artifacts, README
Repo hygiene pass after a long working session.

Files removed:
* stage1_train.log — runtime training log (~125 KB), shouldn't have
  been tracked.
* training/bc/demos.npz — orphan default-name demos file from before
  the world+drive-suffixed naming convention took over; no script
  references it.
* training/runs/bc_dagger{1,2}_differential_field/policy.zip — failed
  DAgger experiment artifacts. Per `memory/dagger_results.md` the
  whole DAgger experiment hit 0/5 on Webots transfer; these checkpoints
  have no consumers.

Untracked-but-deleted (no git change) — also cleaned from disk:
* Root-level runtime logs (43 *.log files, all unused — gitignored now).
* training/bc/{combined,dagger}*.npz (5 huge demo blobs, 2.6 GB
  reclaimed; not committed).
* training/bc/v1/ (2.6 GB backup of pre-DAgger demos; reclaimed).
* training/runs/at_20260426_*/ (orphan timestamped runs; reclaimed).
* All __pycache__/.

Dead code removed:
* `herding/control/strombom.py::compute_action_debug` — no callers
  anywhere in the repo.
* `herding/control/sequential.py::compute_action_debug` — same.
* `herding/control/universal.py::compute_action_diff` — same.

.gitignore extended to cover:
* All *.log files (training/eval/webots logs are runtime artifacts).
* training/bc/*.npz (re-collectable on demand by `make bc_demos`).
* training/bc/v1/.
* .pytest_cache, *.pyc, .claude/.

README refreshed:
* Mecanum + round-world coverage in the headline.
* Quick-start updated for DRIVE/WORLD-suffixed Makefile targets,
  GT-bypass example, and the mecanum-retrain caveat.
* Layout reflects the actual current tree (config.py, both protos,
  both worlds, all tools).
* Results table replaced with the Webots end-to-end numbers from
  the 2026-05-16 sweep (8/8 diff combos + LiDAR/GT comparison).

Verification: 126 pytest cases still pass (was 126 going in — no
test-coverage regression from the dead-code removal).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-17 01:38:19 +00:00
Johnny Fernandes 1c197e0ff7 Enable consensus tracker by default + round-world Strömbom fix
Two changes that together raise diff/round gym success ~52%→88% (BC)
and ~68%→88% (RL) without retraining; diff/field stays at 100%.

* TrackerConfig.consensus_k default 1 → 3 (radius 0.5 m, max_age 15
  frames). The same candidate-promotion mechanism that closed the
  Webots LiDAR gap also filters gym tracker phantoms — they show up
  on the round field where sheep run further between detection
  cycles than GATE_M, so each new position spawns a fresh track
  while the stale one persists in memory. SheepTracker() called with
  no tracker_cfg keeps the legacy pass-through behaviour for
  backwards compatibility.
* Strömbom + universal teachers now detect when the natural
  "behind the flock" drive target leaves the curved boundary and
  fall back to pushing the flock radially inward toward the centre.
  Breaks the wall-circling pattern that previously trapped both the
  analytical baselines and the trained policies.

A/B numbers (n_sheep ∈ {1,2,3,5,10}, 5 seeds each, max_steps=15000):

  diff/field  bc:  baseline 100%  consensus 100%
  diff/field  rl:  baseline 100%  consensus 100%
  diff/round  bc:  baseline  52%  consensus  88%
  diff/round  rl:  baseline  68%  consensus  88%

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-16 21:09:25 +00:00
Johnny Fernandes 683de740af Checkpoint 9 2026-05-13 13:46:50 +01:00
Johnny Fernandes 5c2ee4bba5 Checkpoint 8 2026-05-12 22:41:03 +01:00