Parallel hyperparameter optimization for stochastic simulations
Aster is an open-source research library investigating adaptive replication allocation: how to reduce simulation work while preserving the quality of the selected configuration.
Research approach
- Parallel evaluation
- Independent replications run across local worker processes.
- Adaptive allocation
- Matched comparisons guide which configurations receive more work.
- Independent audit
- Evaluate the selected configuration with a separate seed namespace.
Reproduce the example
Clone the repository and run the synthetic comparison locally. A laptop with two available CPU workers is enough for this example.
git clone https://github.com/kenchengkc/aster-hpo.git
cd aster-hpo
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -e .
python examples/noisy_quadratic.py --workers 2
The example writes JSON to results/smoke/, then exits.
This website displays saved files; visiting it does not start a
computation.
from aster_hpo import (
Float, ReplicationRace,
Study, sample_configs,
)
# objective(config, replication) → loss
if __name__ == "__main__":
configs = sample_configs(
{"x": Float(-2, 2)}, count=16, seed=17,
)
study = Study(
configs,
scheduler=ReplicationRace(
checkpoints=(3, 9, 27),
),
workers=2, seed=17,
)
result = study.optimize(objective)
Complete runnable example
Preliminary experiment
The same 16 configurations, evaluated by two schedulers. Each square below is one completed objective evaluation in the saved run.
Full budget
432 evaluationsReplication race
72 evaluationsx ≈ 0.08794). Each
selected candidate received another 100 independent audit
evaluations, excluded from the figure.
What this shows
The scheduler stopped 15 candidates early and selected the same
winner as the full-budget baseline in this run. Both audit means
were 0.02936, with standard error
0.01103.
What remains untested
This cheap objective is dominated by process startup. One seed cannot establish a speedup or quality guarantee. Expensive workloads and repeated comparative experiments are planned.
Method and implementation
Design notes ↗A small research runtime built around one question: which configuration should receive the next replication?
-
Sample
Generate a candidate pool from typed search spaces.
sample_configs() -
Allocate
Continue or prune candidates at replication checkpoints.
Study + scheduler -
Execute
Evaluate objectives in local worker processes.
ProcessPoolExecutor -
Audit
Lock the selection, evaluate new seeds, and export results.
audit() · result.save()
Statistical boundaries
ReplicationRace uses a heuristic pruning rule based
on paired outcomes and a standard-error margin. Repeated
inspection and adaptive peer selection mean this is not a formal
confidence-sequence guarantee. Audit statistics are descriptive;
they are not a non-inferiority test.
Implementation details and current limits
Training, shared-scenario, and audit randomness use separate seed namespaces. JSON exports include observations, pruning decisions, timing, and failures. Exceptions and non-finite losses fail the affected trial.
The current implementation has no distributed executor, persistent checkpoints, automatic retries, or deadlines. The v0.1 snapshot was verified with 37 tests; current CI results are on GitHub.
Research agenda
Full roadmap ↗Local replication racing
Parallel evaluation, paired comparisons, independent audit, and inspectable JSON results.
Reliable experiment execution
Separate scheduling from execution. Add persistent state, recovery, cancellation, and compute budgets.
Controlled comparisons
Compare full-budget search and established asynchronous HPO baselines across noise levels and seeds. Measure wall time, compute cost, and winner regret.
Neural hedging with transaction costs
Tune a small hedging policy on simulated price paths. Assess optimization cost and independently evaluated hedging quality. No financial benchmark is completed yet.
Interested in scheduling, stochastic simulation, or sequential inference? Contributions and technical feedback are welcome ↗