Legacy & Experimental Scheduler Variants
The repository contains several additional scheduler implementations alongside the
production smart-scheduler.js. They document the evolution of the engine and are
available for experimentation and comparison.
| File | Purpose / stage |
|---|---|
smart-scheduler-HOLISTC.js | Holistic variant — treats the whole rotation as one optimization problem (global balance of categories, energy, artists) instead of greedy per-track selection |
smart-scheduler-MLRL.js | ML + Reinforcement Learning variant — heavier MLRL weighting on top of the bandit arms |
smart-scheduler-NN1.js | Neural-network variant — first synaptic-based experiment (LSTM-style sequencing) |
smart-scheduler-old.js | Original scheduler — the simple randomized generator before Dirichlet sampling and RL arms |
Experimental notes
- HOLISTC targets smoothness across an entire block (e.g. a full hour) and is more expensive to run; it produces the most "produced" logs but is harder to adapt live.
- MLRL keeps the same category deck as production but boosts the exploration rate, useful for A/B tests of new genres.
- NN1 learns transition patterns from as-run CSVs; its sequencing quality is only as good as the training history available.
- old is kept purely as a fallback if the newer engines misbehave on a different machine; it does not perform loudness or fingerprint checks.
Running an experiment
Run a variant with the same content pipeline inputs and compare its generated M3U
against production. Because all variants write to the same PLAYLIST_ROOT layout,
only one scheduler should run at a time against a given live worker.
The production default remains smart-scheduler.js; the variants are not
deployed to the broadcast chain unless explicitly selected.