Path: blob/master/sandbox/benchmarking/benchmark_opt.R
1433 views
1# The purpose of this script is to set a baseline for performance of optimize.portfolio23library(PortfolioAnalytics)4library(microbenchmark)56data(edhec)7returns <- edhec[,1:10]8funds <- colnames(returns)910# Add basic constraints and objectives11init.portf <- portfolio.spec(assets=funds)12init.portf <- add.constraint(portfolio=init.portf, type="weight_sum",13min_sum=0.99, max_sum=1.01)14init.portf <- add.constraint(portfolio=init.portf, type="box", min=0, max=1)15init.portf <- add.objective(portfolio=init.portf, type="risk", name="ES")1617# Generate N random portfolios. Random portfolios should be generated outside18# of optimize.portfolio so that the time to generate random portfolios is not19# included in the timing20n_portfolios <- 500021rp <- random_portfolios(portfolio=init.portf,22permutations=n_portfolios,23rp_method="sample",24eliminate=FALSE)2526opt_rp <- function(){27optimize.portfolio(R=returns,28portfolio=init.portf,29optimize_method="random",30rp=rp,31trace=TRUE)32}3334opt_de <- function(){35optimize.portfolio(R=returns,36portfolio=init.portf,37optimize_method="DEoptim",38search_size=n_portfolios,39rp=rp,40traceDE=0,41trace=TRUE)42}4344opt_benchmark <- microbenchmark(opt_rp(), opt_de(), times=10)45comment_string <- "ES optimization benchmark with random portfolios and DEoptim"4647zz <- file(description="sandbox/benchmarking/benchmark_output.txt", open="at")48sink(zz, append=TRUE)49cat("******\n")50Sys.time()51cat(comment_string, "\n")52opt_benchmark53cat("******\n")54sink()55close(zz)5657# Rprof runs58# Rprof(filename="rp_profile_reuse.txt")59# optimize.portfolio(R=returns, portfolio=init.portf, optimize_method="random", rp=rp, trace=TRUE)60# Rprof(NULL)6162# out_reuse <- summaryRprof("rp_profile_reuse.txt")63# out_no_reuse <- summaryRprof("rp_profile_no_reuse.txt")64656667