Skip to main content

Module pb2_bench

Module pb2_bench 

Expand description

The PB2 oracle’s driver.

It proves [Pb2] — the time-varying GP-bandit variant of PBT — beats a random-perturbation PBT on a non-stationary problem where modelling (time, hyperparameter) → improvement genuinely pays.

This is the sibling of pbt_bench: it drives the real study loop with the real Pb2 scheduler over the same ScheduleProblem — the Fork path, the checkpoint-reference hand-off and the recorded lineage all exercised end-to-end — and reuses the identical PbtReport so the two schedulers are compared like with like.

§Why the win is the GP-bandit’s, not the population machinery’s

PBT tracks a moving optimum by a blind perturbation (a coin-flipped multiplicative step) plus selection: half its explores go the wrong way and are culled. PB2 replaces that coin with the perturbation that maximizes a time-varying GP-UCB — it fits a GP to the population’s (t, θ) → improvement history and moves toward the modelled current optimum every time. On a non-stationary problem the time-aware model tracks the drift with far fewer wasted evaluations, so at a matched budget PB2 reaches a higher total.

The regression-bite the oracle rests on: run PB2 with its GP-UCB explore step turned off ([Pb2::with_gp_exploit](false)) and it is PBT’s population machinery driven by a blind local perturbation — the win must collapse. It does (see tests/pb2_oracle.rs), which is what proves the win is the GP-bandit’s doing rather than the fork/checkpoint plumbing’s.

§Determinism

Single-worker with a fixed seed, so the whole population trajectory, the winner and its lineage replay bit-for-bit on a given platform (docs/concepts/determinism.md). The reward path uses libm transcendentals (log10/powf), so the headline margins are asserted with tolerance, not as exact goldens — the same stance pbt_bench takes.

Functions§

control_pb2
The control arm: the tuned PB2 with its GP-UCB explore step turned off.
drift_problem
The fast-drift non-stationary problem the ablation runs on — the regime where PB2’s time-awareness genuinely pays.
run_pb2
Runs single-worker PB2 over problem for budget trials and assembles the same PbtReport the PBT driver does.
tuned_pb2
The tuned PB2 scheduler the oracle uses over drift_problem.