Nous.Eval.Optimizer.SearchSpace (nous v0.16.4)

View Source

Defines and manages the search space for optimization.

A search space is a collection of parameters that define all possible configurations to explore during optimization.

Example

params = [
  Parameter.float(:temperature, 0.0, 1.0, step: 0.1),
  Parameter.integer(:max_tokens, 100, 1000, step: 100),
  Parameter.choice(:model, ["gpt-4", "gpt-3.5-turbo"])
]

space = SearchSpace.from_parameters(params)

# Get total number of combinations (for grid search)
SearchSpace.size(space)  # => 110 * 10 * 2 = 2200

# Generate all combinations
SearchSpace.grid(space)  # => [%{temperature: 0.0, max_tokens: 100, model: "gpt-4"}, ...]

# Sample a random configuration
SearchSpace.sample(space)  # => %{temperature: 0.7, max_tokens: 500, model: "gpt-4"}

Summary

Functions

Create a search space from a list of parameters.

Get parameter by name.

Generate all configurations for grid search.

Sample configurations using Latin Hypercube Sampling for better coverage.

Sample a random configuration from the search space.

Sample n random configurations from the search space.

Get the total number of configurations in the search space.

Check if a configuration is valid (all required parameters present).

Types

t()

@type t() :: %Nous.Eval.Optimizer.SearchSpace{
  parameters: [Nous.Eval.Optimizer.Parameter.t()],
  size: non_neg_integer() | :infinite
}

Functions

from_parameters(parameters)

@spec from_parameters([Nous.Eval.Optimizer.Parameter.t()]) :: t()

Create a search space from a list of parameters.

get_parameter(search_space, name)

@spec get_parameter(t(), atom()) :: Nous.Eval.Optimizer.Parameter.t() | nil

Get parameter by name.

grid(search_space)

@spec grid(t()) :: [map()]

Generate all configurations for grid search.

Only works for finite search spaces. Returns a list of configuration maps.

latin_hypercube_sample(search_space, n)

@spec latin_hypercube_sample(t(), non_neg_integer()) :: [map()]

Sample configurations using Latin Hypercube Sampling for better coverage.

sample(search_space)

@spec sample(t()) :: map()

Sample a random configuration from the search space.

sample_n(space, n)

@spec sample_n(t(), non_neg_integer()) :: [map()]

Sample n random configurations from the search space.

size(search_space)

@spec size(t()) :: non_neg_integer() | :infinite

Get the total number of configurations in the search space.

Returns :infinite if any parameter has continuous range without step.

valid_config?(search_space, config)

@spec valid_config?(t(), map()) :: boolean()

Check if a configuration is valid (all required parameters present).