# RCEIM-package: An R Cross Entropy Inspired Method for Optimization RCEIM In RCEIM: R Cross Entropy Inspired Method for Optimization

## Description

RCEIM is a package implementing a stochastic heuristic method for performing multidimensional function optimization. The method is inspired in the Cross-Entropy Method.

## Details

 Package: RCEIM Type: Package Version: 0.3 Date: 2015-02-19 License: GPL (>= 2)

RCEIM implements a simple stochastic heuristic method for optimization in the function `ceimOpt`. This method starts from a random population of solutions, computes the values of the function and selects a fraction of these solutions - the elite members. Afterwards, based on the elite members it creates a gaussian distribution, samples new random solutions from it, and iterates until convergence is reached (this is controlled by an epsilon parameter) or other stopping criteria is fulfilled (such as the maximum number of iterations).

One advantage of this method is that it does not impose strong conditions on the function to be optimized. The function must written as an R function, but it does not need to be continuous, differentiable, neither analytic. Moreover, the method is ready for multicore processing, enabling the optimization of time-consuming functions.

Two examples of 1D and 2D functions that can be used as test problems for RCEIM (defined in `testFunOptimization` and `testFunOptimization2d`) are represented in the above figures.

## Author(s)

Alberto Krone-Martins, Laurent Gallucio

Maintainer: Alberto Krone-Martins <[email protected]>

`ceimOpt`

## Examples

 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44``` ```# Solve a simple optimization problem and shows the results po <- ceimOpt(OptimFunction=function(x){(x[1]+1)^2+(x[2]+2)^2}, maxIter=100, epsilon=0.3, nParams=2) plotEliteDistrib(po\$EliteMembers) rm(po) # A harder problem in 1D po <- ceimOpt(OptimFunction="testFunOptimization", maxIter=10, epsilon=0.3, nParams=1, verbose=TRUE) dev.new() xx <- seq(-10,10,by=0.01) plot(xx, testFunOptimization(xx), type="l", xlab="x", ylab="Value") points(po\$BestMember[1], po\$BestMember[2], col="red") rm(list=c('xx','po')) # A harder problem in 2D po <- ceimOpt(OptimFunction="testFunOptimization2d", maxIter=20, epsilon=0.3, nParams=2, verbose=TRUE) dev.new() xx <- seq(-10,10,by=0.1) yy <- seq(-10,10,by=0.1) zz <- matrix(nrow=length(yy), ncol=length(xx)) for(i in 1:length(xx)){ for(j in 1:length(yy)){ zz[i,j] <- testFunOptimization2d( c(xx[i],yy[j]) ) } } image(xx,yy,zz, col=gray((50:100)/100), xlab="x", ylab="y") contour(xx,yy,zz, add=TRUE) points(po\$BestMember[1], po\$BestMember[2], col="red", pch=19, cex=0.5) rm(list=c('xx','yy','zz')) # Example of multicore processing slowFunction <- function(x) { p<-runif(50000) return((x+3)^2) } system.time(po <- ceimOpt(OptimFunction="slowFunction", maxIter=10, Ntot=100, epsilon=0.3, nParams=1, verbose=FALSE, parallel=FALSE)) print(po\$BestMember) system.time(po <- ceimOpt(OptimFunction="slowFunction", maxIter=10, Ntot=100, epsilon=0.3, nParams=1, verbose=FALSE, parallel=TRUE)) print(po\$BestMember) rm(po) ```

RCEIM documentation built on May 29, 2017, 2:03 p.m.