celestialgod

test for lbfgs

Dec 29th, 2016
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
R 3.34 KB | None | 0 0
  1. library(Rcpp)
  2. library(microbenchmark)
  3. library(lbfgs)
  4. library(inline)
  5.  
  6. sourceCpp("optim_demo.cpp", verbose = F)
  7. # Booth's function
  8. objfun_r <- function(x, funIdx) {
  9.     out <- switch(funIdx,
  10.         "0" = (x[1] + 2*x[2] - 7)^2 + (2*x[1] + x[2] - 5)^2,
  11.         "1" = 0.26*(x[1]^2 + x[2]^2) - 0.48*x[1]*x[2],
  12.         "2" = sum(x^2)
  13.     )
  14.     out
  15. }
  16. sourceCpp("objfunExtPtr.cpp", verbose = F)
  17.  
  18. fid <- 0L
  19. env <- new.env()
  20. env[["funIdx"]] <- fid
  21.  
  22. # initial value
  23. ini_x <- runif(2)
  24. microbenchmark(
  25.     # Method 1
  26.     OBJ_R = optim(ini_x, objfun_r, funIdx = as.character(fid), method = "L-BFGS-B"),
  27.     # Method 2
  28.     OBJ_Cpp = optim(ini_x, objfun_cpp, funIdx = fid, method = "L-BFGS-B"),
  29.     # Method 3
  30.     OPTIM_Cpp = optim_cpp(ini_x, fid, "L-BFGS-B", 100, -c(Inf, Inf), c(Inf, Inf), c(0,0)),
  31.     # Method 4
  32.     libLBFGS  = optim_cpp_lbfgs(ini_x, fid),
  33.     # Method 5
  34.     lbfgs = lbfgs(objfunExtPtr(), gradfunExtPtr(), vars = ini_x, invisible = 1, environment = env),
  35.     times = 10000L
  36. )
  37. # Unit: microseconds
  38. #       expr    min     lq      mean median     uq       max neval
  39. #      OBJ_R 72.557 82.505 88.219162 87.186 90.697  1471.624 10000
  40. #    OBJ_Cpp 53.540 57.929 67.804003 59.684 66.706  3017.559 10000
  41. #  OPTIM_Cpp  4.096  5.852 10.370776  6.730  7.607 31059.438 10000
  42. #   libLBFGS  2.633  3.804  5.323492  4.682  5.559  1097.135 10000
  43. #      lbfgs 43.301 47.397 52.076136 48.859 54.419  2504.393 10000
  44.  
  45. fid <- 1L
  46. env <- new.env()
  47. env[["funIdx"]] <- fid
  48. # initial value
  49. ini_x <- runif(2)
  50. microbenchmark(
  51.     # Method 1
  52.     OBJ_R = optim(ini_x, objfun_r, funIdx = as.character(fid), method = "L-BFGS-B"),
  53.     # Method 2
  54.     OBJ_Cpp = optim(ini_x, objfun_cpp, funIdx = fid, method = "L-BFGS-B"),
  55.     # Method 3
  56.     OPTIM_Cpp = optim_cpp(ini_x, fid, "L-BFGS-B", 100, -c(Inf, Inf), c(Inf, Inf), c(0,0)),
  57.     # Method 4
  58.     libLBFGS  = optim_cpp_lbfgs(ini_x, fid),
  59.     # Method 5
  60.     lbfgs = lbfgs(objfunExtPtr(), gradfunExtPtr(), vars = ini_x, invisible = 1, environment = env),
  61.     times = 10000L
  62. )
  63. # Unit: microseconds
  64. #       expr    min      lq      mean median     uq       max neval
  65. #      OBJ_R 70.803 79.2870 88.678084 85.723 89.819 12431.558 10000
  66. #    OBJ_Cpp 54.711 58.8070 70.209299 60.855 68.754  2303.690 10000
  67. #  OPTIM_Cpp  4.096  5.9985  8.184224  7.022  7.900  2760.391 10000
  68. #   libLBFGS  2.634  3.8040  5.263156  4.974  5.559  1112.934 10000
  69. #      lbfgs 43.886 48.2750 54.135582 50.030 56.467  1668.523 10000
  70.  
  71. fid <- 2L
  72. env <- new.env()
  73. env[["funIdx"]] <- fid
  74. # initial value
  75. ini_x <- runif(5)
  76. microbenchmark(
  77.     # Method 1
  78.     OBJ_R = optim(ini_x, objfun_r, funIdx = as.character(fid), method = "L-BFGS-B"),
  79.     # Method 2
  80.     OBJ_Cpp = optim(ini_x, objfun_cpp, funIdx = fid, method = "L-BFGS-B"),
  81.     # Method 3
  82.     OPTIM_Cpp = optim_cpp(ini_x, fid, "L-BFGS-B", 100, -c(Inf, Inf), c(Inf, Inf), c(0,0)),
  83.     # Method 4
  84.     libLBFGS  = optim_cpp_lbfgs(ini_x, fid),
  85.     # Method 5
  86.     lbfgs = lbfgs(objfunExtPtr(), gradfunExtPtr(), vars = ini_x, invisible = 1, environment = env),
  87.     times = 10000L
  88. )
  89. # Unit: microseconds
  90. #       expr    min     lq       mean median      uq       max neval
  91. #      OBJ_R 84.553 93.623 101.733895 99.767 103.278  1330.898 10000
  92. #    OBJ_Cpp 79.287 86.601 107.424162 93.038  97.133 30474.299 10000
  93. #  OPTIM_Cpp  4.389  6.145   8.116848  7.315   7.900  1220.892 10000
  94. #   libLBFGS  2.633  4.096   5.343584  4.975   5.851  1229.376 10000
  95. #      lbfgs 45.934 50.907  59.094102 54.418  61.732  1756.878 10000
Advertisement
Add Comment
Please, Sign In to add comment