Integrations#

Surfaces integrates seamlessly with popular optimization frameworks. Use your favorite optimizer with any Surfaces test function.


Supported Frameworks#

scipy

Scientific Python’s optimization module. Built-in to_scipy() conversion.

scipy
Optuna

Hyperparameter optimization framework. Works with suggest_* API.

Optuna
SMAC

Sequential Model-based Algorithm Configuration. ConfigSpace integration.

SMAC
Ray Tune

Distributed hyperparameter tuning. Scalable experimentation.

Ray Tune
Gradient-Free-Optimizers

Simple gradient-free optimization. Native search space compatibility.

Gradient-Free-Optimizers
Hyperactive

Advanced optimization toolkit. Direct integration.

Hyperactive

Quick Comparison#

Framework

Type

Scale

Best For

scipy

Classical

Single machine

Quick prototyping, gradient methods

Optuna

Bayesian

Distributed

HPO, pruning, visualization

SMAC

Bayesian

Single machine

Algorithm configuration, research

Ray Tune

Various

Distributed

Large-scale, multi-GPU

GFO

Gradient-free

Single machine

Simple API, exploration

Hyperactive

Meta-heuristic

Single machine

Advanced search strategies


Common Pattern#

All integrations follow a similar pattern:

  1. Create a Surfaces test function

  2. Extract the search space

  3. Define an objective that calls the test function

  4. Run the optimizer

from surfaces.test_functions.algebraic import RastriginFunction

# 1. Create function
func = RastriginFunction(n_dim=5)

# 2. Get search space
space = func.search_space()

# 3. Define objective
def objective(params):
    return func(params)

# 4. Run optimizer (framework-specific)
# ...

Choosing a Framework#

For quick experiments:

Use scipy or GFO. Minimal setup, fast iteration.

For serious benchmarking:

Use Optuna or SMAC. Better optimization, logging, visualization.

For large-scale studies:

Use Ray Tune. Distributed execution, checkpointing, scalability.

For research:

Use SMAC or custom. Fine-grained control, reproducibility.