Advanced Examples#

These examples demonstrate advanced Hyperactive features for more sophisticated optimization workflows.

Warm Starting Optimization#

Start optimization from known good points to accelerate convergence:


# Previous best parameters
warm_start_points = [
    {"n_estimators": 100, "max_depth": 10, "min_samples_split": 5},
]

optimizer = HillClimbing(
    search_space=search_space,
    n_iter=5,
    experiment=experiment,
    initialize={"warm_start": warm_start_points},
)
best_params = optimizer.solve()

Comparing Optimizers#

Compare different optimization strategies on the same problem:

from hyperactive.opt.gfo import (
    BayesianOptimizer,
    HillClimbing,
    ParticleSwarmOptimizer,
    RandomSearch,
)

optimizers = {
    "HillClimbing": HillClimbing,
    "RandomSearch": RandomSearch,
    "Bayesian": BayesianOptimizer,
    "ParticleSwarm": ParticleSwarmOptimizer,
}

results = {}
for name, OptClass in optimizers.items():
    optimizer = OptClass(
        search_space=search_space,
        n_iter=5,
        experiment=experiment,
        random_state=42,
    )
    best = optimizer.solve()
    score, _ = experiment.score(best)
    results[name] = {"params": best, "score": score}
    print(f"{name}: score={score:.4f}")

Tips for Advanced Usage#

Warm Starting

  • Use results from previous runs to seed new optimizations

  • Helpful when iterating on model architecture or features

  • Combine with local search for fine-tuning around known good points

Optimizer Comparison

  • Always use the same random_state for reproducible comparisons

  • Run multiple trials to account for optimizer randomness

  • Consider both final score and convergence speed