Best strategy

For high number of randomization and number of weights, the multiprocessing strategy is faster.

But for low randomization numbers and number of weights, prefer sequential processing for better performances.


## increase the randomization_number to at least 1000 to have
## better results
## our analysis parameters:
tad_analysis_parameter <- list(
  weights = TAD::AB[, c(5:102)],
  weights_factor = TAD::AB[, c("Year", "Plot", "Treatment", "Bloc")],
  trait_data = log(TAD::trait[["SLA"]]),
  aggregation_factor_name = c("Year", "Bloc"),
  statistics_factor_name = c("Treatment"),
  regenerate_abundance_df = TRUE,
  regenerate_weighted_moments_df = TRUE,
  regenerate_stat_per_obs_df = TRUE,
  regenerate_stat_per_rand_df = TRUE,
  seed = 1312,
  significativity_threshold = c(0.05, 0.95)
)

## We will try different strategies, with different number of randomisations
## with a fixed number of weights (98)
strategies <- list(
  sequencial = future::sequential,
  multisession = future::multisession
)
results_string <- list()

## We run the TAD with 10 and then with 1000 randomisations, with
## multiprocessing and without multiprocessing to see the difference
for (randomization_number in c(10, 1000)) {

  tad_analysis_parameter$randomization_number <- randomization_number

  for (strat in names(strategies)) {

    ## We set the strategy
    future::plan(strategies[[strat]])

    time_before <- proc.time()[[1]]
    do.call(TAD::launch_analysis_tad, tad_analysis_parameter)
    ellapsed_time <- proc.time()[[1]] - time_before

    results_string[[length(results_string) + 1]] <- sprintf(
      "[%s rand - %12s] The TAD Analysis took %s seconds.",
      as.character(randomization_number),
      as.character(strat),
      as.character(ellapsed_time)
    )

  }
  ## Always reset the strategy to sequential after your processing
  future::plan(future::sequential)
}
#> Loading required package: foreach
#> Loading required package: future
#> 
#> Attaching package: 'future'
#> The following object is masked from 'package:rmarkdown':
#> 
#>     run

cat(paste(results_string, collapse = "\n"), "\n")
#> [10 rand -   sequencial] The TAD Analysis took 0.674 seconds.
#> [10 rand - multisession] The TAD Analysis took 0.418 seconds.
#> [1000 rand -   sequencial] The TAD Analysis took 42.672 seconds.
#> [1000 rand - multisession] The TAD Analysis took 7.741 seconds.