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.662 seconds.
#> [10 rand - multisession] The TAD Analysis took 0.399 seconds.
#> [1000 rand -   sequencial] The TAD Analysis took 41.876 seconds.
#> [1000 rand - multisession] The TAD Analysis took 7.514 seconds.