R Under development (unstable) (2026-03-09 r89583 ucrt) -- "Unsuffered Consequences" Copyright (C) 2026 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 2026-03-10 16:27:30 DEoptim RcppDEc RcppDEr ratioRcppCompToBasic pctGainOfRcppComp ratioRcppRToBasic pctGainOfRcppR Rastrigin5 0.01000000 0.00000000 0.0000 0.00000000 100.00000 0.0000000 100.000 Rastrigin10 0.02000000 0.00000000 0.0100 0.00000000 100.00000 0.5000000 50.000 Rastrigin20 0.04000000 0.02000000 0.0300 0.50000000 50.00000 0.7500000 25.000 Rastrigin50 0.17000000 0.08000000 0.1200 0.47058824 52.94118 0.7058824 29.412 Wild5 0.03000000 0.00000000 0.0200 0.00000000 100.00000 0.6666667 33.333 Wild10 0.01000000 0.00000000 0.0200 0.00000000 100.00000 2.0000000 -100.000 Wild20 0.08000000 0.02000000 0.0500 0.25000000 75.00000 0.6250000 37.500 Wild50 0.28000000 0.08000000 0.2300 0.28571429 71.42857 0.8214286 17.857 Genrose5 0.02000000 0.00000000 0.0000 0.00000000 100.00000 0.0000000 100.000 Genrose10 0.03000000 0.00000000 0.0200 0.00000000 100.00000 0.6666667 33.333 Genrose20 0.08000000 0.02000000 0.0500 0.25000000 75.00000 0.6250000 37.500 Genrose50 0.21000000 0.01000000 0.2000 0.04761905 95.23810 0.9523810 4.762 MEANS 0.08166667 0.01916667 0.0625 0.23469388 76.53061 0.7653061 23.469 # Done 2026-03-10 16:27:35 > > proc.time() user system elapsed 5.75 0.35 6.06