R Under development (unstable) (2025-02-17 r87739 ucrt) -- "Unsuffered Consequences" Copyright (C) 2025 The R Foundation for Statistical Computing Platform: x86_64-w64-mingw32/x64 R is free software and comes with ABSOLUTELY NO WARRANTY. You are welcome to redistribute it under certain conditions. Type 'license()' or 'licence()' for distribution details. R is a collaborative project with many contributors. Type 'contributors()' for more information and 'citation()' on how to cite R or R packages in publications. Type 'demo()' for some demos, 'help()' for on-line help, or 'help.start()' for an HTML browser interface to help. Type 'q()' to quit R. > > Wild <- function(x) { ## 'Wild' function, global minimum at about -15.81515 + sum(10 * sin(0.3 * x) * sin(1.3 * x^2) + 0.00001 * x^4 + 0.2 * x + 80)/length(x) + } > > Rastrigin <- function(x) { + sum(x+2 - 10 * cos(2*pi*x)) + 20 + } > > Genrose <- function(x, a = 1, b = 100) { ## One generalization of the Rosenbrock banana valley function (n parameters) + n <- length(x) + 1.0 + sum (b * (x[-n]^2 - x[-1])^2 + (x[-1] - a)^2) + } > > maxIt <- 25 # not excessive but so that we get some run-time on simple problems > > haveDEoptim <- requireNamespace("DEoptim", quietly=TRUE) > > suppressMessages({ + if (haveDEoptim) { + library(DEoptim) # the original, currently 2.0.7 + } + library(RcppDE) # the contender + }) > > basicDE <- function(n, maxIt, fun, ...) DEoptim::DEoptim(fn=fun, lower=rep(-25, n), upper=rep(25, n), + control=list(NP=10*n, itermax=maxIt, trace=FALSE), + ...)#, bs=TRUE)) > cppDE <- function(n, maxIt, fun, ...) RcppDE::DEoptim(fn=fun, lower=rep(-25, n), upper=rep(25, n), + control=list(NP=10*n, itermax=maxIt, trace=FALSE), + ...)#, bs=TRUE)) > > if (haveDEoptim) { + set.seed(42) + valBasic <- basicDE(5, maxIt, function(...) Rastrigin(...)) + set.seed(42) + valCpp <- cppDE(5, maxIt, function(...) Rastrigin(...)) + ##stopifnot( all.equal(valBasic, valCpp) ) + } > > runPair <- function(n, maxIt, fun, funname, ...) { + gc() + set.seed(42) + bt <- system.time(invisible(ores <- basicDE(n, maxIt, fun, ...)))[3] + + gc() + set.seed(42) + xptr <- RcppDE:::putFunPtrInXPtr(funname) + ct <- system.time(invisible(cres <- cppDE(n, maxIt, xptr, ...)))[3] + + #stopifnot(all.equal(ores, cres)) + + gc() + set.seed(42) + rt <- system.time(invisible(rres <- cppDE(n, maxIt, fun, ...)))[3] + + ##stopifnot(all.equal(ores, rres)) + + return(data.frame(DEoptim=bt, RcppDEc=ct, RcppDEr=rt)) + } > > if (haveDEoptim) { + + cat("# At", format(Sys.time()), "\n") + options(width=120) + + reps <- c(5, 10, 20, 50) + + res <- rbind(do.call(rbind, lapply(reps, runPair, maxIt, function(...) Rastrigin(...), "rastrigin")), + do.call(rbind, lapply(reps, runPair, maxIt, function(...) Wild(...), "wild")), + do.call(rbind, lapply(reps, runPair, maxIt, function(...) Genrose(...), "genrose", a = 1, b = 100)) + ) + res <- rbind(res, colMeans(res)) + + rownames(res) <- c(paste("Rastrigin", reps, sep=""), + paste("Wild", reps, sep=""), + paste("Genrose", reps, sep=""), + "MEANS") + + res$ratioRcppCompToBasic <- res[,2]/res[,1] + res$pctGainOfRcppComp <- (1-res[,2]/res[,1])*100 + ##res$netSpeedUpC <- res[,1]/res[,2] + + res$ratioRcppRToBasic <- res[,3]/res[,1] + res$pctGainOfRcppR <- round((1-res[,3]/res[,1])*100, digits=3) + ##res$netSpeedUpR <- res[,1]/res[,3] + + + print(res) + cat("# Done", format(Sys.time()), "\n") + } # At 2025-02-19 00:49:03 DEoptim RcppDEc RcppDEr ratioRcppCompToBasic pctGainOfRcppComp ratioRcppRToBasic pctGainOfRcppR Rastrigin5 0.01000000 0.00000000 0.00000000 0.0000000 100.00000 0.0000000 100.000 Rastrigin10 0.02000000 0.00000000 0.01000000 0.0000000 100.00000 0.5000000 50.000 Rastrigin20 0.02000000 0.00000000 0.03000000 0.0000000 100.00000 1.5000000 -50.000 Rastrigin50 0.11000000 0.04000000 0.08000000 0.3636364 63.63636 0.7272727 27.273 Wild5 0.02000000 0.00000000 0.00000000 0.0000000 100.00000 0.0000000 100.000 Wild10 0.02000000 0.00000000 0.01000000 0.0000000 100.00000 0.5000000 50.000 Wild20 0.05000000 0.01000000 0.03000000 0.2000000 80.00000 0.6000000 40.000 Wild50 0.28000000 0.08000000 0.18000000 0.2857143 71.42857 0.6428571 35.714 Genrose5 0.01000000 0.00000000 0.00000000 0.0000000 100.00000 0.0000000 100.000 Genrose10 0.00000000 0.00000000 0.01000000 NaN NaN Inf -Inf Genrose20 0.03000000 0.00000000 0.03000000 0.0000000 100.00000 1.0000000 0.000 Genrose50 0.14000000 0.00000000 0.11000000 0.0000000 100.00000 0.7857143 21.429 MEANS 0.05916667 0.01083333 0.04083333 0.1830986 81.69014 0.6901408 30.986 # Done 2025-02-19 00:49:06 > > proc.time() user system elapsed 3.53 0.26 3.73