Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
braverock
GitHub Repository: braverock/portfolioanalytics
Path: blob/master/sandbox/benchmarking/benchmark_opt.R
1433 views
1
2
# The purpose of this script is to set a baseline for performance of optimize.portfolio
3
4
library(PortfolioAnalytics)
5
library(microbenchmark)
6
7
data(edhec)
8
returns <- edhec[,1:10]
9
funds <- colnames(returns)
10
11
# Add basic constraints and objectives
12
init.portf <- portfolio.spec(assets=funds)
13
init.portf <- add.constraint(portfolio=init.portf, type="weight_sum",
14
min_sum=0.99, max_sum=1.01)
15
init.portf <- add.constraint(portfolio=init.portf, type="box", min=0, max=1)
16
init.portf <- add.objective(portfolio=init.portf, type="risk", name="ES")
17
18
# Generate N random portfolios. Random portfolios should be generated outside
19
# of optimize.portfolio so that the time to generate random portfolios is not
20
# included in the timing
21
n_portfolios <- 5000
22
rp <- random_portfolios(portfolio=init.portf,
23
permutations=n_portfolios,
24
rp_method="sample",
25
eliminate=FALSE)
26
27
opt_rp <- function(){
28
optimize.portfolio(R=returns,
29
portfolio=init.portf,
30
optimize_method="random",
31
rp=rp,
32
trace=TRUE)
33
}
34
35
opt_de <- function(){
36
optimize.portfolio(R=returns,
37
portfolio=init.portf,
38
optimize_method="DEoptim",
39
search_size=n_portfolios,
40
rp=rp,
41
traceDE=0,
42
trace=TRUE)
43
}
44
45
opt_benchmark <- microbenchmark(opt_rp(), opt_de(), times=10)
46
comment_string <- "ES optimization benchmark with random portfolios and DEoptim"
47
48
zz <- file(description="sandbox/benchmarking/benchmark_output.txt", open="at")
49
sink(zz, append=TRUE)
50
cat("******\n")
51
Sys.time()
52
cat(comment_string, "\n")
53
opt_benchmark
54
cat("******\n")
55
sink()
56
close(zz)
57
58
# Rprof runs
59
# Rprof(filename="rp_profile_reuse.txt")
60
# optimize.portfolio(R=returns, portfolio=init.portf, optimize_method="random", rp=rp, trace=TRUE)
61
# Rprof(NULL)
62
63
# out_reuse <- summaryRprof("rp_profile_reuse.txt")
64
# out_no_reuse <- summaryRprof("rp_profile_no_reuse.txt")
65
66
67