luca-scr / GA

An R package for optimization using genetic algorithms
http://luca-scr.github.io/GA/
91 stars 29 forks source link

memoise(fitness) decreased the speed #29

Closed maxrodkin closed 5 years ago

maxrodkin commented 5 years ago

Hello, Luca i tryed to use memoise(fitness) and got unsuccessfull result - GA became slower. How is it possible? Here is result: test replications elapsed relative average 1 ga_res 1 42.75 1.000 42.75 2 ga_res_memoised 1 49.08 1.148 49.08 2 rows My GA has calculating optimised portfolio. The piece of cofe: `


library(memoise)
fitness <- ga_params$ga_param_fitness
mfitness <- memoise(fitness)
is.memoised(fitness)
## [1] FALSE
is.memoised(mfitness)
## [1] TRUE
library(rbenchmark)

  library("GA")
tab <- benchmark(
  ga_res = ga(
    type     = ga_params$ga_param_type,
    fitness      = fitness,
    lower    = ga_params$ga_param_lower ,
    upper    = ga_params$ga_param_upper ,
    popSize      = ga_params$ga_param_popSize ,
    maxiter      = ga_params$ga_param_maxiter ,
    run  = ga_params$ga_param_run,
    names    = ga_params$ga_param_names ,
    suggestions      = ga_params$ga_param_suggestions ,
    fitness_data = fitness_data,
    #keepBest=TRUE,
    parallel=TRUE,
    monitor=FALSE,
    seed=1,
    pcrossover = 0.05
    #,optim = TRUE
  ),
  ga_res_memoised = ga(
    type     = ga_params$ga_param_type,
    fitness      = mfitness,
    lower    = ga_params$ga_param_lower ,
    upper    = ga_params$ga_param_upper ,
    popSize      = ga_params$ga_param_popSize ,
    maxiter      = ga_params$ga_param_maxiter ,
    run  = ga_params$ga_param_run,
    names    = ga_params$ga_param_names ,
    suggestions      = ga_params$ga_param_suggestions ,
    fitness_data = fitness_data,
    #keepBest=TRUE,
    parallel=TRUE,
    monitor=FALSE,
    seed=1,
    pcrossover = 0.05
    #,optim = TRUE
  ),  
columns = c("test", "replications", "elapsed", "relative"), 
replications = 1
)
tab$average <- with(tab, elapsed/replications)
tab
forget(mfitness)

`
luca-scr commented 5 years ago

memoise may help if your fitness function is expensive and/or your search is binary. But you don't provide the fitness function so I don't know.

maxrodkin commented 5 years ago

fitness_share = function(x , fitness_data) { x1 <- x sharpe_val <- sharpe(x1, fitness_data$CMatrix, fitness_data$UsingInstr) constraint_val <- constraint(x1) x2 <-0 finess_val <- sharpe_val*20*constraint_val*multiconstr(x1,x2,fitness_data$UsingInstr,fitness_data$RestList) return (finess_val) }

and

"ga_param_type" = "real-valued", yes, i understood, ga_param_type isn`t binary