Live · the repo's Python, in your browser
Five bandit algorithms, one changing environment
Run the benchmark yourself
TS-GE, AdSwitch, M-UCB, UCB1 and ε-greedy from the repo run on its own benchmark cases, here, in Pyodide. Pick a case and a seed, then switch TS-GE to the Beta update as the paper prints it.
- cumulative regret, total and decision-only
- which arm each algorithm pulled
- TS-GE's regret by phase
- the paper's Beta update against the fix
- the README's regression numbers, rerun
Downloads Python 3.13 and NumPy from cdn.jsdelivr.net, about 8 MB, cached after the first visit.
Cumulative regret
Which arm was pulled
Each column is a block of slots; brighter means more of the block went to that arm. Outlined: the best arm at the time. Both worked out by demo_entry.py from the run's chosen arms and the case's schedule.
Preflight bench/preflight.py, run before any simulation
Check against the README case1, seeds 1 to 20
The README records mean final total regret over these 20 seeds to six decimals as its regression reference. This reruns them here through bench.runner.run_trial and compares mean, std, min and max.
| Algorithm | Mean here | README | Std here | Same to 6 dp |
|---|
Results
| Algorithm | Total | Decision | Detects after | Max probe age | On best arm | Time here |
|---|
Regret per slot: the best arm's mean minus the reward received. Decision regret skips group-probe slots, which only TS-GE has. "Detects after" (slots from the change to the first detection, by bench/runner.py's summary rule) and "On best arm" (not a repo metric) are worked out by demo_entry.py from the run's history; the other columns come from bench/.