SearchSpaces.jl

Aqua QA

Just a simple Julia package to define search spaces for, perhaps, optimization.

Installation

Open Julia (v1.7 or latest) and type the following command:

julia> ]add SearchSpaces

or

julia> import Pkg; Pkg.add("SearchSpaces")

Quick Start

The search space can be composed by other spaces. Here, you can define custom search spaces as follows:

Assume the following three search spaces:

\[\begin{matrix} X = &\{10, 20, \ldots, 50\}\\ Y = &\{\text{red},\ \text{green},\ \text{blue}\}\\ Z = &\{0, 0.1, 0.2, \ldots, 1\} \end{matrix}\]

Let us define a mixed space $X \times Y \times Z$. Here, we can proceed as follows:


julia> searchspace = MixedSpace( :X => 10:10:50, :Y => [:red, :green, :blue], :Z => 0:0.1:1 )MixedSpace defined by 3 subspaces: X => PermutationSpace{StepRange{Int64, Int64}}(10:10:50, 1) Y => PermutationSpace{Vector{Symbol}}([:red, :green, :blue], 1) Z => PermutationSpace{StepRangeLen{Float64, Base.TwicePrecision{Float64}, Base.TwicePrecision{Float64}, Int64}}(0.0:0.1:1.0, 1)

Computing the cardinality of the search space:

julia> cardinality(searchspace)165

This can be useful to know how many items are in the search space.

Now, let's sample some random elements in the mixed space.

julia> rand(searchspace)Dict{Symbol, Any} with 3 entries:
  :Z => 0.3
  :X => 50
  :Y => :green

To sample every element in the search space, we can use the grid sampler:

julia> collect(GridSampler(searchspace))165-element Vector{Any}:
 Dict{Symbol, Any}(:Z => 0.0, :X => 10, :Y => :red)
 Dict{Symbol, Any}(:Z => 0.1, :X => 10, :Y => :red)
 Dict{Symbol, Any}(:Z => 0.2, :X => 10, :Y => :red)
 Dict{Symbol, Any}(:Z => 0.3, :X => 10, :Y => :red)
 Dict{Symbol, Any}(:Z => 0.4, :X => 10, :Y => :red)
 Dict{Symbol, Any}(:Z => 0.5, :X => 10, :Y => :red)
 Dict{Symbol, Any}(:Z => 0.6, :X => 10, :Y => :red)
 Dict{Symbol, Any}(:Z => 0.7, :X => 10, :Y => :red)
 Dict{Symbol, Any}(:Z => 0.8, :X => 10, :Y => :red)
 Dict{Symbol, Any}(:Z => 0.9, :X => 10, :Y => :red)
 ⋮
 Dict{Symbol, Any}(:Z => 0.2, :X => 50, :Y => :blue)
 Dict{Symbol, Any}(:Z => 0.3, :X => 50, :Y => :blue)
 Dict{Symbol, Any}(:Z => 0.4, :X => 50, :Y => :blue)
 Dict{Symbol, Any}(:Z => 0.5, :X => 50, :Y => :blue)
 Dict{Symbol, Any}(:Z => 0.6, :X => 50, :Y => :blue)
 Dict{Symbol, Any}(:Z => 0.7, :X => 50, :Y => :blue)
 Dict{Symbol, Any}(:Z => 0.8, :X => 50, :Y => :blue)
 Dict{Symbol, Any}(:Z => 0.9, :X => 50, :Y => :blue)
 Dict{Symbol, Any}(:Z => 1.0, :X => 50, :Y => :blue)

Contents