|
ParameterTracer::ParameterTracer(bool trace, bool trace_latent, const std::string& trace_directory) |
|
: trace { trace }, trace_latent { trace_latent }, trace_directory { trace_directory } { |
|
if(trace) { |
|
#ifdef _WIN32 |
|
// On Windows, mkdir takes only one argument |
|
int status = mkdir(trace_directory.c_str()); |
|
#else |
|
// On POSIX systems, mkdir takes two arguments |
|
int status = mkdir(trace_directory.c_str(), 0777); |
|
#endif |
|
if (status != 0) { |
|
Rcpp::stop("Error creating trace directory."); |
|
} |
|
} |
|
} |
It should potentially speed up the algorithm, and at the same time make it easier to post-process.
Some timing experiments below:
library(BayesMallowsSMC2)
set.seed(2)
system.time({
mod <- compute_sequentially(
partial_rankings,
hyperparameters = set_hyperparameters(n_items = 5),
smc_options = set_smc_options(n_particles = 100, max_rejuvenation_steps = 5)
)
})
#> user system elapsed
#> 1.419 0.038 1.459
set.seed(2)
system.time({
mod <- compute_sequentially(
partial_rankings,
hyperparameters = set_hyperparameters(n_items = 5),
smc_options = set_smc_options(n_particles = 100, max_rejuvenation_steps = 5,
trace = TRUE, trace_latent = FALSE,
trace_directory = paste0(tempdir(), "trace1"))
)
})
#> user system elapsed
#> 1.494 0.244 1.946
set.seed(2)
system.time({
mod <- compute_sequentially(
partial_rankings,
hyperparameters = set_hyperparameters(n_items = 5),
smc_options = set_smc_options(n_particles = 100, max_rejuvenation_steps = 5,
trace = TRUE, trace_latent = TRUE,
trace_directory = paste0(tempdir(), "trace2"))
)
})
#> user system elapsed
#> 2.571 6.438 21.058
Created on 2025-04-10 with reprex v2.1.1
BayesMallowsSMC2/src/parameter_tracer.cpp
Lines 8 to 22 in b5cf170
It should potentially speed up the algorithm, and at the same time make it easier to post-process.
Some timing experiments below:
Created on 2025-04-10 with reprex v2.1.1