knitr::opts_chunk$set( collapse = TRUE, comment = "#>" )

The package implements provides the grid search algorithm with a zoom. The grid search algorithm with a zoom aims to help solving difficult optimization problem where there are many local optimizers inside the domain of the target function. It offers suitable initial or starting value for the following optimization procedure, provided that the global optimum exists in the neighbourhood of the initial or starting value. The grid search algorithm with a zoom saves time tremendously in cases with high-dimenstional arguments.

and the corresponding paper

Modelling Nonlinear Vector Economic Time Series

See section 1.5.4.

After installing the package, you need to load (attach better say) it by running the code

```
library(zoomgrid)
```

You can take a look at all the available functions and data in the package

ls( grep("zoomgrid", search()) )

Consider the two-dimensional **Rastrigin function** is a non-convex function which is widely used for testing the performances of some optimization algorithms.

where $x_i \in [-5.12, 5.12]$ and $A = 10$. It has many local minimum and its global minimum is at (0, 0) with the minimum value 0.

Graph source: Rastrigin function @ WIKIPEDIA.

We give the function in R:

# Rastrigin function ndim = 2 # number of dimension nA = 10 # parameter A # vx in [-5.12, 5.12] # minimizer = rep(0, ndim) # minimum = 0 Rastrigin <- function(vx) return(nA * ndim + sum(vx*vx - nA * cos(2*pi*vx)))

Then let us try the optimization algorithms available in the `optim`

function.

# set seed and initialize the initial or starting value set.seed(1) par = runif(ndim, -5.12, 5.12) cat("start from", par) # results from different optimization algorithms tmp1 = optim(par = par, Rastrigin, method='Nelder-Mead') tmp2 = optim(par = par, Rastrigin, method='BFGS') tmp3 = optim(par = par, Rastrigin, method='L-BFGS-B') tmp4 = optim(par = par, Rastrigin, method='SANN') tmp1$par; tmp1$value tmp2$par; tmp2$value tmp3$par; tmp3$value tmp4$par; tmp4$value

None of them are satisfactory...

We need to build grid first for the grid search. For details, see

```
?build_grid
```

We build the grid by running

# build the grid bin = c(from=-5.12, to=5.12, by=.1) grid = build_grid(bin,bin)

We can first try the sequential (no parallel) grid search

# serial computation ret1 = grid_search(Rastrigin, grid, silent=FALSE) ret1$par

Then we run the parallel one

# parallel computation ret2 = grid_search(Rastrigin, grid, num=2, parallel=TRUE, cores=2, silent=FALSE) ret2$par

Try the grid search with a zoom!

# grid search with a zoom! ret3 = grid_search(Rastrigin, grid, zoom=2, num=2, parallel=TRUE, cores=2, silent=FALSE) ret3$par

Sometimes it is strongly recommended to check the time consumed by running the grid search first. This is extremely useful when the user is going to run \code{\link{grid_search}} on some super-computing server and need to know approximately how long time it will take in order to specify the corresponding settings according to some batch system like SLURM for example. So you can do as follows

ret3 = grid_search_check(Rastrigin, grid, zoom=2, num=2, parallel=TRUE, cores=2, silent=FALSE) ret3 = grid_search(Rastrigin, grid, zoom=2, num=2, parallel=TRUE, cores=2, silent=FALSE)

**Any scripts or data that you put into this service are public.**

Embedding an R snippet on your website

Add the following code to your website.

For more information on customizing the embed code, read Embedding Snippets.