quarta-feira, 2 de janeiro de 2013

Genetic Algorithms with gaoptim package

Two days ago i just submitted my first R package: gaoptim. For my surprise, the next day it was already living on CRAN.

In this post i want to show you how to use gaoptim to perform a simple function maximization. This same task could be accomplished with the function optim() from the stats package, but this should serve as a simple introduction to Genetic Algorithms, which are particularly good when you have a huge search space.

The R code below defines a 'wild' function, with global maximum at about -15.81515. Then we setup a GAReal object and call the evolve() function, passing the number of generations to evolve as argument. Finally, we plot the results.

Some planned features for the next package version are:

  • feature selection
  • binary encoding
Enjoy it!

# global minimum at about -15.81515
wild.FUN = function (x)
10*sin(0.3*x)*sin(1.3*x^2) + 0.00001*x^4 + 0.2*x+80
# GAReal performs maximization, so transform the target function
target.FUN = function(x)
-wild.FUN(x)
require(gaoptim)
# The target function can return negative values, so use a uniform selection
# See ?GAReal details section
ga = GAReal(target.FUN, lb = -50, ub = 50, selection = 'uniform')
ga$evolve(200)
# plot the original function and results
op <- par(no.readonly = TRUE)
par(mfrow = c(2, 1))
plot(wild.FUN, -50, 50, n=1000, main = "GAReal() minimising 'wild function'")
xmin = ga$bestIndividual()
ymin = wild.FUN(xmin)
abline(h = ymin, v = xmin, lty = 'dashed', col = 'tomato')
plot(ga)
par(op)

Nenhum comentário:

Postar um comentário