| grid_search | R Documentation |
This function carries out the grid search algorithm with a zoom.
grid_search(
FUN,
grid,
MoreArgs = NULL,
zoom = 0,
decay = 0.5,
num = 1,
parallel = FALSE,
cores = NULL,
silent = TRUE
)
FUN |
the target function to be minimized. |
grid |
an object of class |
MoreArgs |
a named list of additional arguments to |
zoom |
number of (additional) zoom-in layers, |
decay |
a number in |
num |
number of points to return at each grid search, |
parallel |
a logical; if |
cores |
an integer specifying the requested number of workers when |
silent |
a logical indicating whether progress information is printed. |
The target function FUN to be minimized is a scalar real-valued function.
Maximization can be achieved by multiplying -1 to the original function
and then passing the new function to FUN.
The grid must be created by build_grid.
Any other invariant arguments to FUN can be specified in MoreArgs
using a named list, see mapply.
The common grid search first builds a grid within a bounded region, evaluates FUN
at each grid point, and returns the num points that yield the smallest values.
zoom = 0 implies no zoom-in (a single grid search). Any integer zoom > 0
applies additional zoom-in layers. With zoom > 0, the algorithm performs
n^{0} + n^{1} + n^{2} + \cdots + n^{z}
grid searches, where n is num and z is zoom.
Consequently, the total number of returned points is
n^{1} + n^{2} + n^{3} + \cdots + n^{z+1}
.
At each zoom-in layer, the algorithm builds subgrids around the best points found
in the previous layer. To limit the computational burden, the subgrid size is reduced
by the decay rate decay. For each parameter, the number of points in the subgrid is
max(Int(decay * N), 3), where N is the number of points in the original grid
for that parameter.
Parallel computation can be enabled by setting parallel = TRUE. In that case,
the function uses the future framework with future::multisession
(cross-platform). The number of workers is determined as follows:
Let n be the value returned by future::availableCores().
Let m be the user input cores. If cores = NULL, set m = 2.
The number of workers is \min(m, n).
If parallel = TRUE, the packages future and future.apply must be installed.
The boolean silent controls whether progress information is printed to the console.
a list with components:
par |
the approximate global minimizer |
points |
all candidate points found by the grid search with zoom-in layers |
Yukai Yang, yukai.yang@statistik.uu.se
build_grid, grid_search_check
# Rastrigin function
ndim = 2
nA = 10
Rastrigin <- function(vx) nA * ndim + sum(vx * vx - nA * cos(2 * pi * vx))
# Build a grid
bin = c(from = -5.12, to = 5.12, by = .5)
grid = build_grid(bin, bin)
# Serial computation
ret0 = grid_search(Rastrigin, grid, silent = FALSE)
ret0$par
# Finer grid
bin = c(from = -5.12, to = 5.12, by = .1)
grid = build_grid(bin, bin)
# Serial computation
ret1 = grid_search(Rastrigin, grid, silent = FALSE)
ret1$par
# Parallel computation (requires future and future.apply)
ret2 = grid_search(Rastrigin, grid, num = 2, parallel = TRUE, cores = 2, silent = FALSE)
ret2$par
# Grid search with zoom-in layers
ret3 = grid_search(Rastrigin, grid, zoom = 2, num = 2, parallel = TRUE, cores = 2, silent = FALSE)
ret3$par
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.