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 19:02:28 DEoptim RcppDEc RcppDEr ratioRcppCompToBasic pctGainOfRcppComp ratioRcppRToBasic pctGainOfRcppR Rastrigin5 0.02000000 0.0100 0.00000000 0.5000000 50.00000 0.0000000 100.000 Rastrigin10 0.02000000 0.0000 0.00000000 0.0000000 100.00000 0.0000000 100.000 Rastrigin20 0.05000000 0.0100 0.03000000 0.2000000 80.00000 0.6000000 40.000 Rastrigin50 0.17000000 0.0600 0.08000000 0.3529412 64.70588 0.4705882 52.941 Wild5 0.02000000 0.0000 0.00000000 0.0000000 100.00000 0.0000000 100.000 Wild10 0.04000000 0.0000 0.02000000 0.0000000 100.00000 0.5000000 50.000 Wild20 0.07000000 0.0400 0.05000000 0.5714286 42.85714 0.7142857 28.571 Wild50 0.38000000 0.1300 0.27000000 0.3421053 65.78947 0.7105263 28.947 Genrose5 0.01000000 0.0000 0.00000000 0.0000000 100.00000 0.0000000 100.000 Genrose10 0.02000000 0.0100 0.02000000 0.5000000 50.00000 1.0000000 0.000 Genrose20 0.04000000 0.0000 0.05000000 0.0000000 100.00000 1.2500000 -25.000 Genrose50 0.25000000 0.0100 0.24000000 0.0400000 96.00000 0.9600000 4.000 MEANS 0.09083333 0.0225 0.06333333 0.2477064 75.22936 0.6972477 30.275 # Done 2026-03-10 19:02:34 > > proc.time() user system elapsed 5.85 0.37 6.26