Overview

Define the search space for hyperparameters and assign them to different agents for specialized optimization.

️ Initialization

python
# Method 1: Dynamic addition
space = HyperparameterSpace()
space.add_continuous('class_weight_0', 0.5, 3.0, agent=0)  # Problem-specific

# Method 2: Full initialization
space = HyperparameterSpace(
    agent0_params=['class_weight_0', 'weight_decay'],  # Problem-specific
    agent1_params=['hidden_size'],  # Architecture
    agent2_params=['learning_rate', 'batch_size'],  # Training
    bounds={'class_weight_0': (0.5, 3.0), ...},
    param_types={'class_weight_0': float, ...}
)

Methods

add_continuous(name, min_val, max_val, agent)

add_continuous(name: str, min_val: float, max_val: float, agent: int) -> self

Add a continuous hyperparameter with min/max bounds.

python
# Float parameters
space.add_continuous('class_weight_0', 0.5, 3.0, agent=0)  # Problem-specific
space.add_continuous('hidden_size', 64, 512, agent=1)  # Architecture (will be cast to int)

# Training parameters
space.add_continuous('learning_rate', 1e-5, 1e-2, agent=2)  # Training
space.add_discrete('batch_size', [16, 32, 64, 128], agent=2)  # Training

add_discrete(name, choices, agent)

add_discrete(name: str, choices: List, agent: int) -> self

Add a discrete hyperparameter with fixed choices (use sparingly - continuous ranges are preferred).

python
space.add_discrete('optimizer', ['adam', 'sgd', 'adamw'], agent=2)  # Training
space.add_discrete('activation', ['relu', 'tanh', 'gelu'], agent=1)  # Architecture

Agent Assignment

🤖 Agent 0

Problem-Specific
Class weights, regularization, loss functions, domain-specific parameters

🏗️ Agent 1

Architecture
Hidden layers, network size, activation functions, model structure

⚙️ Agent 2

Training
Batch size, learning rate, optimizers, training schedule

Complete Example

python
from MAT_HPO_LIB import HyperparameterSpace

# Create space for neural network optimization
space = HyperparameterSpace()

# Agent 0: Problem-specific parameters
space.add_continuous('class_weight_0', 0.5, 3.0, agent=0)
space.add_continuous('weight_decay', 1e-6, 1e-3, agent=0)

# Agent 1: Architecture parameters  
space.add_continuous('hidden_size', 64, 512, agent=1)
space.add_continuous('num_layers', 2, 8, agent=1)

# Agent 2: Training parameters
space.add_continuous('learning_rate', 1e-5, 1e-2, agent=2)
space.add_discrete('batch_size', [16, 32, 64, 128], agent=2)

# Each agent will have 2 parameters to optimize
print(f"Agent dimensions: {space.agent_dims}")  # (2, 2, 2)