qEGO.nsteps {DiceOptim}R Documentation

Sequential multipoint Expected improvement (qEI) maximizations and model re-estimation

Description

Executes nsteps iterations of the multipoint EGO method to an object of class km. At each step, a kriging model (including covariance parameters) is re-estimated based on the initial design points plus the points visited during all previous iterations; then a new batch of points is obtained by maximizing the multipoint Expected Improvement criterion (qEI).

Usage

qEGO.nsteps(
  fun,
  model,
  npoints,
  nsteps,
  lower = rep(0, model@d),
  upper = rep(1, model@d),
  crit = "exact",
  minimization = TRUE,
  optimcontrol = NULL,
  cov.reestim = TRUE,
  ...
)

Arguments

fun

the objective function to be optimized,

model

an object of class km ,

npoints

an integer repesenting the desired batchsize,

nsteps

an integer representing the desired number of iterations,

lower

vector of lower bounds for the variables to be optimized over,

upper

vector of upper bounds for the variables to be optimized over,

crit

"exact", "CL" : a string specifying the criterion used. "exact" triggers the maximization of the multipoint expected improvement at each iteration (see max_qEI), "CL" applies the Constant Liar heuristic,

minimization

logical specifying if we want to minimize or maximize fun,

optimcontrol

an optional list of control parameters for the qEI optimization (see details or max_qEI),

cov.reestim

optional boolean specifying if the kriging hyperparameters should be re-estimated at each iteration,

...

optional arguments for fun.

Details

The parameters of list optimcontrol are :

- optimcontrol$method : "BFGS" (default), "genoud" ; a string specifying the method used to maximize the criterion (irrelevant when crit is "CL" because this method always uses genoud),

- when crit="CL" :

+ optimcontrol$parinit : optional matrix of initial values (must have model@d columns, the number of rows is not constrained),

+ optimcontrol$L : "max", "min", "mean" or a scalar value specifying the liar ; "min" takes model@min, "max" takes model@max, "mean" takes the prediction of the model ; When L is NULL, "min" is taken if minimization==TRUE, else it is "max".

+ The parameters of function genoud. Main parameters are : "pop.size" (default : [N=3*2^model@d for dim<6 and N=32*model@d otherwise]), "max.generations" (default : 12), "wait.generations" (default : 2) and "BFGSburnin" (default : 2).

- when optimcontrol$method = "BFGS" :

+ optimcontrol$nStarts (default : 4),

+ optimcontrol$fastCompute : if TRUE (default), a fast approximation method based on a semi-analytic formula is used, see [Marmin 2014] for details,

+ optimcontrol$samplingFun : a function which sample a batch of starting point (default : sampleFromEI),

+ optimcontrol$parinit : optional 3d-array of initial (or candidate) batches (for all k, parinit[,,k] is a matrix of size npoints*model@d representing one batch). The number of initial batches (length(parinit[1,1,])) is not contrained and does not have to be equal to nStarts. If there is too few initial batches for nStarts, missing batches are drawn with samplingFun (default : NULL),

- when optimcontrol$method = "genoud" :

+ optimcontrol$fastCompute : if TRUE (default), a fast approximation method based on a semi-analytic formula is used, see [Marmin 2014] for details,

+ optimcontrol$parinit : optional matrix of candidate starting points (one row corresponds to one point),

+ The parameters of the genoud function. Main parameters are "pop.size" (default : [50*(model@d)*(npoints)]), "max.generations" (default : 5), "wait.generations" (default : 2), "BFGSburnin" (default : 2).

Value

A list with components:

par

a data frame representing the additional points visited during the algorithm,

value

a data frame representing the response values at the points given in par,

npoints

an integer representing the number of parallel computations,

nsteps

an integer representing the desired number of iterations (given in argument),

lastmodel

an object of class km corresponding to the last kriging model fitted,

history

a vector of size nsteps representing the current known optimum at each step.

Author(s)

Sebastien Marmin

Clement Chevalier

David Ginsbourger

References

C. Chevalier and D. Ginsbourger (2014) Learning and Intelligent Optimization - 7th International Conference, Lion 7, Catania, Italy, January 7-11, 2013, Revised Selected Papers, chapter Fast computation of the multipoint Expected Improvement with applications in batch selection, pages 59-69, Springer.

D. Ginsbourger, R. Le Riche, L. Carraro (2007), A Multipoint Criterion for Deterministic Parallel Global Optimization based on Kriging. The International Conference on Non Convex Programming, 2007.

D. Ginsbourger, R. Le Riche, and L. Carraro. Kriging is well-suited to parallelize optimization (2010), In Lim Meng Hiot, Yew Soon Ong, Yoel Tenne, and Chi-Keong Goh, editors, Computational Intelligence in Expensive Optimization Problems, Adaptation Learning and Optimization, pages 131-162. Springer Berlin Heidelberg.

S. Marmin. Developpements pour l'evaluation et la maximisation du critere d'amelioration esperee multipoint en optimisation globale (2014). Master's thesis, Mines Saint-Etienne (France) and University of Bern (Switzerland).

J. Mockus (1988), Bayesian Approach to Global Optimization. Kluwer academic publishers.

M. Schonlau (1997), Computer experiments and global optimization, Ph.D. thesis, University of Waterloo.

See Also

qEI, max_qEI, qEI.grad

Examples



set.seed(123)
#####################################################
### 2 ITERATIONS OF EGO ON THE BRANIN FUNCTION,   ###
### STARTING FROM A 9-POINTS FACTORIAL DESIGN     ###
#####################################################

# a 9-points factorial design, and the corresponding response
d <- 2
n <- 9
design.fact <- expand.grid(seq(0,1,length=3), seq(0,1,length=3)) 
names(design.fact)<-c("x1", "x2")
design.fact <- data.frame(design.fact) 
names(design.fact)<-c("x1", "x2")
response.branin <- apply(design.fact, 1, branin)
response.branin <- data.frame(response.branin) 
names(response.branin) <- "y" 

# model identification
fitted.model1 <- km(~1, design=design.fact, response=response.branin, 
covtype="gauss", control=list(pop.size=50,trace=FALSE), parinit=c(0.5, 0.5))

# EGO n steps
library(rgenoud)
nsteps <- 2 # increase to 10 for a more meaningful example
lower <- rep(0,d) 
upper <- rep(1,d)
npoints <- 3 # The batchsize
oEGO <- qEGO.nsteps(model = fitted.model1, branin, npoints = npoints, nsteps = nsteps,
crit="exact", lower, upper, optimcontrol = NULL)
print(oEGO$par)
print(oEGO$value)
plot(c(1:nsteps),oEGO$history,xlab='step',ylab='Current known minimum')

## Not run: 
# graphics
n.grid <- 15 # increase to 21 for better picture
x.grid <- y.grid <- seq(0,1,length=n.grid)
design.grid <- expand.grid(x.grid, y.grid)
response.grid <- apply(design.grid, 1, branin)
z.grid <- matrix(response.grid, n.grid, n.grid)
contour(x.grid, y.grid, z.grid, 40)
title("Branin function")
points(design.fact[,1], design.fact[,2], pch=17, col="blue")
points(oEGO$par, pch=19, col="red")
text(oEGO$par[,1], oEGO$par[,2], labels=c(tcrossprod(rep(1,npoints),1:nsteps)), pos=3)

## End(Not run)


[Package DiceOptim version 2.1.1 Index]