From b2c96e09586841d5a55ae6911a4eaef561f0b814 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Sat, 7 Oct 2023 22:21:32 +0200 Subject: [PATCH 01/31] Implement weighted sampling * w/o replacement is currently implemnented in R * w/ replacement uses either probabilistic sampling or the alias method --- R/dqsample.R | 5 +-- README.Rmd | 23 +++++++++++ README.md | 56 ++++++++++++++++++++----- inst/include/dqrng_sample.h | 79 +++++++++++++++++++++++++++++++++++- src/dqrng.cpp | 10 ++++- tests/testthat/test-sample.R | 50 +++++++++++++++++++++-- 6 files changed, 202 insertions(+), 21 deletions(-) diff --git a/R/dqsample.R b/R/dqsample.R index 6d68cf8..a93555d 100644 --- a/R/dqsample.R +++ b/R/dqsample.R @@ -19,9 +19,8 @@ dqsample <- function(x, size, replace = FALSE, prob = NULL) { ##' @rdname dqsample ##' @export dqsample.int <- function(n, size = n, replace = FALSE, prob = NULL) { - if (!is.null(prob)) { - warning("Using 'prob' is not supported yet. Using default 'sample.int'.") - sample.int(n, size, replace, prob) + if (!is.null(prob) && replace == FALSE) { + utils::head(order(dqrexp(n)/prob), size) } else if (n <= .Machine$integer.max) dqsample_int(n, size, replace, prob, 1L) else diff --git a/README.Rmd b/README.Rmd index 00b4fd1..70293b1 100644 --- a/README.Rmd +++ b/README.Rmd @@ -90,6 +90,29 @@ bm[, 1:4] Note that sampling from `10^10` elements triggers "long-vector support" in R. +It is also possible to use weighted sampling both with replacement: + +```{r sampling3} +m <- 1e6 +n <- 1e4 +prob <- dqrunif(m) +bm <- bench::mark(sample.int(m, n, replace = TRUE, prob = prob), + dqsample.int(m, n, replace = TRUE, prob = prob), + check = FALSE) +bm[, 1:4] +``` + +And without replacement: + +```{r sampling4} +bm <- bench::mark(sample.int(m, n, prob = prob), + dqsample.int(m, n, prob = prob), + check = FALSE) +bm[, 1:4] +``` + +Especially for weighted sampling without replacement the performance advantage compared with R's default methods is particularly large. + In addition the RNGs provide support for multiple independent streams for parallel usage: ```{r parallel} diff --git a/README.md b/README.md index df189ef..c175af2 100644 --- a/README.md +++ b/README.md @@ -61,8 +61,8 @@ bm[, 1:4] #> # A tibble: 2 × 4 #> expression min median `itr/sec` #> -#> 1 rnorm(N) 607µs 660.2µs 1451. -#> 2 dqrnorm(N) 89.8µs 92.7µs 9896. +#> 1 rnorm(N) 609µs 682µs 1416. +#> 2 dqrnorm(N) 103µs 109µs 8312. ``` This is also true for the provided sampling functions with replacement: @@ -79,10 +79,10 @@ bm[, 1:4] #> # A tibble: 4 × 4 #> expression min median `itr/sec` #> -#> 1 sample.int(m, n, replace = TRUE) 6.88ms 7.08ms 139. -#> 2 sample.int(1000 * m, n, replace = TRUE) 8.72ms 8.93ms 110. -#> 3 dqsample.int(m, n, replace = TRUE) 410.9µs 434.24µs 2137. -#> 4 dqsample.int(1000 * m, n, replace = TRUE) 397.74µs 435.38µs 1930. +#> 1 sample.int(m, n, replace = TRUE) 6.91ms 7.3ms 131. +#> 2 sample.int(1000 * m, n, replace = TRUE) 8.68ms 9.17ms 105. +#> 3 dqsample.int(m, n, replace = TRUE) 395.46µs 443.99µs 2014. +#> 4 dqsample.int(1000 * m, n, replace = TRUE) 465.94µs 520.09µs 1632. ``` And without replacement: @@ -100,16 +100,50 @@ bm[, 1:4] #> # A tibble: 5 × 4 #> expression min median `itr/sec` #> -#> 1 sample.int(m, n) 22.73ms 24.05ms 36.9 -#> 2 sample.int(1000 * m, n) 12.07ms 13.85ms 68.1 -#> 3 sample.int(m, n, useHash = TRUE) 9.57ms 12.63ms 74.4 -#> 4 dqsample.int(m, n) 1.11ms 1.2ms 696. -#> 5 dqsample.int(1000 * m, n) 1.95ms 2.69ms 293. +#> 1 sample.int(m, n) 23.32ms 24.42ms 36.3 +#> 2 sample.int(1000 * m, n) 13.09ms 15.71ms 62.6 +#> 3 sample.int(m, n, useHash = TRUE) 10.07ms 12ms 81.3 +#> 4 dqsample.int(m, n) 730.61µs 861.28µs 955. +#> 5 dqsample.int(1000 * m, n) 1.53ms 2.05ms 443. ``` Note that sampling from `10^10` elements triggers “long-vector support” in R. +It is also possible to use weighted sampling both with replacement: + +``` r +m <- 1e6 +n <- 1e4 +prob <- dqrunif(m) +bm <- bench::mark(sample.int(m, n, replace = TRUE, prob = prob), + dqsample.int(m, n, replace = TRUE, prob = prob), + check = FALSE) +bm[, 1:4] +#> # A tibble: 2 × 4 +#> expression min median `itr/sec` +#> +#> 1 sample.int(m, n, replace = TRUE, prob = prob) 22.78ms 23.96ms 40.2 +#> 2 dqsample.int(m, n, replace = TRUE, prob = prob) 8.01ms 8.25ms 119. +``` + +And without replacement: + +``` r +bm <- bench::mark(sample.int(m, n, prob = prob), + dqsample.int(m, n, prob = prob), + check = FALSE) +bm[, 1:4] +#> # A tibble: 2 × 4 +#> expression min median `itr/sec` +#> +#> 1 sample.int(m, n, prob = prob) 14.8s 14.8s 0.0677 +#> 2 dqsample.int(m, n, prob = prob) 87.9ms 93.1ms 10.7 +``` + +Especially for weighted sampling without replacement the performance +advantage compared with R’s default methods is particularly large. + In addition the RNGs provide support for multiple independent streams for parallel usage: diff --git a/inst/include/dqrng_sample.h b/inst/include/dqrng_sample.h index 1358661..46c916d 100644 --- a/inst/include/dqrng_sample.h +++ b/inst/include/dqrng_sample.h @@ -20,8 +20,9 @@ #define DQRNG_SAMPLE_H 1 #include +#include #include -#include +#include #include namespace dqrng { @@ -30,10 +31,70 @@ template inline VEC replacement(dqrng::random_64bit_generator &rng, INT n, INT size, int offset) { VEC result(size); std::generate(result.begin(), result.end(), - [n, offset, &rng] () {return (offset + rng(n));}); + [&n, &offset, &rng] () {return (offset + rng(n));}); return result; } +template +inline VEC replacement_prob(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, double max_prob, int offset) { + VEC result(size); + std::generate(result.begin(), result.end(), + [&n, &prob, &max_prob, &rng, &offset] () { + while (true) { + int index = rng(n); + if (dqrng::uniform01(rng()) < prob[index] / max_prob) + return index + offset; + } + }); + return result; +} + +template +inline VEC replacement_alias(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, double prob_sum, int offset) { + VEC result(size); + std::vector alias(n); + FVEC p(n); + std::transform(prob.begin(), prob.end(), p.begin(), + [&n, &prob_sum] (double x) {return x * n / prob_sum;}); + std::queue high; + std::queue low; + for(INT i = 0; i < n; ++i) { + if (p[i] < 1.0) + low.push(i); + else + high.push(i); + } + while(!low.empty() && !high.empty()) { + int l = low.front(); + low.pop(); + int h = high.front(); + alias[l] = h; + p[h] = (p[h] + p[l]) - 1.0; + if (p[h] < 1.0) { + low.push(h); + high.pop(); + } + } + while (!low.empty()) { + p[low.front()] = 1.0; + low.pop(); + } + while (!high.empty()) { + p[high.front()] = 1.0; + high.pop(); + } + std::generate(result.begin(), result.end(), + [&n, &p, &alias, &rng, &offset] () { + INT index = rng(n); + if (dqrng::uniform01(rng()) < p[index]) + return index + offset; + else + return alias[index] + offset; + }); + + return result; +} + template inline VEC no_replacement_shuffle(dqrng::random_64bit_generator &rng, INT n, INT size, int offset) { VEC tmp(n); @@ -77,6 +138,20 @@ inline VEC sample(dqrng::random_64bit_generator &rng, INT n, INT size, bool repl } } } + +template +inline VEC sample(dqrng::random_64bit_generator &rng, INT n, INT size, bool replace, FVEC prob, int offset = 0) { + if (replace || size <= 1) { + double *max_prob = std::max_element(prob.begin(), prob.end()); + double prob_sum = std::accumulate(prob.begin(), prob.end(), 0.0); + if (size < n && *max_prob * n / prob_sum < 3.) + return dqrng::sample::replacement_prob(rng, n, size, prob, *max_prob, offset); + else + return dqrng::sample::replacement_alias(rng, n, size, prob, prob_sum, offset); + } else { + Rcpp::stop("Weighted sampling w/o replacement not supported"); + } +} } // sample } // dqrng diff --git a/src/dqrng.cpp b/src/dqrng.cpp index 781dcc9..8727a1d 100644 --- a/src/dqrng.cpp +++ b/src/dqrng.cpp @@ -187,7 +187,10 @@ Rcpp::IntegerVector dqsample_int(int n, int offset = 0) { if (!(n > 0 && size >= 0)) Rcpp::stop("Argument requirements not fulfilled: n > 0 && size >= 0"); - return dqrng::sample::sample(*rng, uint32_t(n), uint32_t(size), replace, offset); + if (probs.isNull()) + return dqrng::sample::sample(*rng, uint32_t(n), uint32_t(size), replace, offset); + else + return dqrng::sample::sample(*rng, uint32_t(n), uint32_t(size), replace, probs.as(), offset); } // [[Rcpp::export(rng = false)]] @@ -201,7 +204,10 @@ Rcpp::NumericVector dqsample_num(double n, #ifndef LONG_VECTOR_SUPPORT Rcpp::stop("Long vectors are not supported"); #else - return dqrng::sample::sample(*rng, uint64_t(n), uint64_t(size), replace, offset); + if (probs.isNull()) + return dqrng::sample::sample(*rng, uint64_t(n), uint64_t(size), replace, offset); + else + return dqrng::sample::sample(*rng, uint64_t(n), uint64_t(size), replace, probs.as(), offset); #endif } diff --git a/tests/testthat/test-sample.R b/tests/testthat/test-sample.R index 45e3ceb..05b1fb1 100644 --- a/tests/testthat/test-sample.R +++ b/tests/testthat/test-sample.R @@ -118,12 +118,56 @@ test_that("dqsample_num w/o replacement works with medium rate", { expect_true(all(result >= 1) && all(result <= n)) }) -test_that("sampling with weights gives warning", { +test_that("dqsample_int w/ replacement and w/ weights works", { dqset.seed(seed) n <- 1e5 k <- 1e3 - expect_warning(dqsample(n, k, replace = TRUE, prob = dqrunif(n)), - "Using 'prob' is not supported yet. Using default 'sample.int'.") + result <- dqsample(n, k, replace = FALSE, prob = dqrunif(n)) + expect_equal(length(result), k) + expect_lte(length(unique(result)), k) + expect_true(all(result >= 1) && all(result <= n)) +}) + +test_that("dqsample_int w/o replacement and w/ weights works with high rate", { + dqset.seed(seed) + n <- 1e5 + k <- 6e4 + result <- dqsample(n, k, replace = FALSE, prob = dqrunif(n)) + expect_equal(length(result), k) + expect_equal(length(unique(result)), k) + expect_true(all(result >= 1) && all(result <= n)) +}) + +test_that("dqsample_int w/o replacement and w/ weights works with medium rate", { + dqset.seed(seed) + n <- 1e5 + k <- 1e3 + result <- dqsample(n, k, replace = FALSE, prob = dqrunif(n)) + expect_equal(length(result), k) + expect_equal(length(unique(result)), k) + expect_true(all(result >= 1) && all(result <= n)) +}) + +test_that("dqsample_int w/o replacement and w/ weights works with low rate", { + dqset.seed(seed) + n <- 1e5 + k <- 1e1 + result <- dqsample(n, k, replace = FALSE, prob = dqrunif(n)) + expect_equal(length(result), k) + expect_equal(length(unique(result)), k) + expect_true(all(result >= 1) && all(result <= n)) +}) + +test_that("dqsample_num w/ replacement and w/ weights works", { + skip_if(.Machine$sizeof.pointer <= 4, "No long-vector support") + dqset.seed(seed) + # use a shorter vector and internal function for performance reasons + n <- 1e5 + k <- 1e2 + result <- dqrng:::dqsample_num(n, k, replace = TRUE, prob = dqrunif(n), offset = 1L) + expect_equal(length(result), k) + expect_lte(length(unique(result)), k) + expect_true(all(result >= 1) && all(result <= n)) }) test_that("error cases", { From 9a436a780712c1a34bd13e55575d96224cbacfad Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Sat, 7 Oct 2023 23:15:23 +0200 Subject: [PATCH 02/31] additional test --- tests/testthat/test-sample.R | 26 ++++++++++++++++++-------- 1 file changed, 18 insertions(+), 8 deletions(-) diff --git a/tests/testthat/test-sample.R b/tests/testthat/test-sample.R index 05b1fb1..5ed329f 100644 --- a/tests/testthat/test-sample.R +++ b/tests/testthat/test-sample.R @@ -118,14 +118,24 @@ test_that("dqsample_num w/o replacement works with medium rate", { expect_true(all(result >= 1) && all(result <= n)) }) -test_that("dqsample_int w/ replacement and w/ weights works", { - dqset.seed(seed) - n <- 1e5 - k <- 1e3 - result <- dqsample(n, k, replace = FALSE, prob = dqrunif(n)) - expect_equal(length(result), k) - expect_lte(length(unique(result)), k) - expect_true(all(result >= 1) && all(result <= n)) +test_that("dqsample_int w/ replacement and w/ weights works with few sampled elements", { + dqset.seed(seed) + n <- 1e5 + k <- 1e3 + result <- dqsample(n, k, replace = TRUE, prob = dqrunif(n)) + expect_equal(length(result), k) + expect_lte(length(unique(result)), k) + expect_true(all(result >= 1) && all(result <= n)) +}) + +test_that("dqsample_int w/ replacement and w/ weights works with many sampled elements", { + dqset.seed(seed) + n <- 1e3 + k <- 1e5 + result <- dqsample(n, k, replace = TRUE, prob = dqrunif(n)) + expect_equal(length(result), k) + expect_lte(length(unique(result)), k) + expect_true(all(result >= 1) && all(result <= n)) }) test_that("dqsample_int w/o replacement and w/ weights works with high rate", { From e7407e2b49a3de1a42b54626fcc8a9ed0afa14a3 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Sat, 7 Oct 2023 23:31:34 +0200 Subject: [PATCH 03/31] Reduce false positive misses in test coverage --- R/dqrmv.R | 5 +---- codecov.yml | 3 +++ 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/R/dqrmv.R b/R/dqrmv.R index d373f13..e4700a3 100644 --- a/R/dqrmv.R +++ b/R/dqrmv.R @@ -17,10 +17,7 @@ #' plot(x) dqrmvnorm <- function(n, ...) { if (!requireNamespace("mvtnorm", quietly = TRUE)) { - stop( - "Package \"mvtnorm\" must be installed to use this function.", - call. = FALSE - ) + stop("Package \"mvtnorm\" must be installed to use this function.", call. = FALSE) } mvtnorm::rmvnorm(n, ..., rnorm = dqrnorm) } diff --git a/codecov.yml b/codecov.yml index 8f36b6c..223913f 100644 --- a/codecov.yml +++ b/codecov.yml @@ -10,3 +10,6 @@ coverage: default: target: auto threshold: 1% +ignore: + - "R/zzz.R" + - "inst/include/pcg_*" From dbe307222e3b31959574e161680d465407583b6d Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Sun, 8 Oct 2023 18:50:19 +0200 Subject: [PATCH 04/31] Implement weighted samlping w/o replacement in C++ --- R/dqsample.R | 7 ++++--- README.md | 32 +++++++++++++++++--------------- inst/include/dqrng_sample.h | 31 ++++++++++++++++++++++++++++--- 3 files changed, 49 insertions(+), 21 deletions(-) diff --git a/R/dqsample.R b/R/dqsample.R index a93555d..88c6ad3 100644 --- a/R/dqsample.R +++ b/R/dqsample.R @@ -19,9 +19,10 @@ dqsample <- function(x, size, replace = FALSE, prob = NULL) { ##' @rdname dqsample ##' @export dqsample.int <- function(n, size = n, replace = FALSE, prob = NULL) { - if (!is.null(prob) && replace == FALSE) { - utils::head(order(dqrexp(n)/prob), size) - } else if (n <= .Machine$integer.max) + if (!is.null(prob)) + stopifnot(n == length(prob)) + + if (n <= .Machine$integer.max) dqsample_int(n, size, replace, prob, 1L) else dqsample_num(n, size, replace, prob, 1L) diff --git a/README.md b/README.md index c175af2..784e313 100644 --- a/README.md +++ b/README.md @@ -61,8 +61,8 @@ bm[, 1:4] #> # A tibble: 2 × 4 #> expression min median `itr/sec` #> -#> 1 rnorm(N) 609µs 682µs 1416. -#> 2 dqrnorm(N) 103µs 109µs 8312. +#> 1 rnorm(N) 607µs 673µs 1421. +#> 2 dqrnorm(N) 104µs 106µs 8608. ``` This is also true for the provided sampling functions with replacement: @@ -79,10 +79,10 @@ bm[, 1:4] #> # A tibble: 4 × 4 #> expression min median `itr/sec` #> -#> 1 sample.int(m, n, replace = TRUE) 6.91ms 7.3ms 131. -#> 2 sample.int(1000 * m, n, replace = TRUE) 8.68ms 9.17ms 105. -#> 3 dqsample.int(m, n, replace = TRUE) 395.46µs 443.99µs 2014. -#> 4 dqsample.int(1000 * m, n, replace = TRUE) 465.94µs 520.09µs 1632. +#> 1 sample.int(m, n, replace = TRUE) 6.92ms 7.2ms 130. +#> 2 sample.int(1000 * m, n, replace = TRUE) 8.59ms 9.08ms 108. +#> 3 dqsample.int(m, n, replace = TRUE) 346.46µs 379.47µs 2434. +#> 4 dqsample.int(1000 * m, n, replace = TRUE) 455.38µs 762.84µs 1306. ``` And without replacement: @@ -100,11 +100,11 @@ bm[, 1:4] #> # A tibble: 5 × 4 #> expression min median `itr/sec` #> -#> 1 sample.int(m, n) 23.32ms 24.42ms 36.3 -#> 2 sample.int(1000 * m, n) 13.09ms 15.71ms 62.6 -#> 3 sample.int(m, n, useHash = TRUE) 10.07ms 12ms 81.3 -#> 4 dqsample.int(m, n) 730.61µs 861.28µs 955. -#> 5 dqsample.int(1000 * m, n) 1.53ms 2.05ms 443. +#> 1 sample.int(m, n) 41.8ms 43.96ms 22.8 +#> 2 sample.int(1000 * m, n) 12.11ms 14.64ms 67.4 +#> 3 sample.int(m, n, useHash = TRUE) 9.53ms 10.48ms 89.1 +#> 4 dqsample.int(m, n) 730.74µs 847.78µs 990. +#> 5 dqsample.int(1000 * m, n) 1.55ms 1.97ms 450. ``` Note that sampling from `10^10` elements triggers “long-vector support” @@ -123,8 +123,8 @@ bm[, 1:4] #> # A tibble: 2 × 4 #> expression min median `itr/sec` #> -#> 1 sample.int(m, n, replace = TRUE, prob = prob) 22.78ms 23.96ms 40.2 -#> 2 dqsample.int(m, n, replace = TRUE, prob = prob) 8.01ms 8.25ms 119. +#> 1 sample.int(m, n, replace = TRUE, prob = prob) 25.64ms 26.28ms 37.9 +#> 2 dqsample.int(m, n, replace = TRUE, prob = prob) 5.02ms 5.21ms 188. ``` And without replacement: @@ -133,12 +133,14 @@ And without replacement: bm <- bench::mark(sample.int(m, n, prob = prob), dqsample.int(m, n, prob = prob), check = FALSE) +#> Warning: Some expressions had a GC in every iteration; so filtering is +#> disabled. bm[, 1:4] #> # A tibble: 2 × 4 #> expression min median `itr/sec` #> -#> 1 sample.int(m, n, prob = prob) 14.8s 14.8s 0.0677 -#> 2 dqsample.int(m, n, prob = prob) 87.9ms 93.1ms 10.7 +#> 1 sample.int(m, n, prob = prob) 15.6s 15.6s 0.0642 +#> 2 dqsample.int(m, n, prob = prob) 18.7ms 20.4ms 43.7 ``` Especially for weighted sampling without replacement the performance diff --git a/inst/include/dqrng_sample.h b/inst/include/dqrng_sample.h index 46c916d..73fa91b 100644 --- a/inst/include/dqrng_sample.h +++ b/inst/include/dqrng_sample.h @@ -122,6 +122,28 @@ inline VEC no_replacement_set(dqrng::random_64bit_generator &rng, INT n, INT siz return result; } +template +struct member { + INT index; + double weight; +}; + +template +inline VEC no_replacement_exp(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, int offset) { + VEC index(n); + std::iota(index.begin(), index.end(), (offset)); + FVEC weight(n); + dqrng::exponential_distribution exponential; + std::transform(prob.begin(), prob.end(), weight.begin(), + [&rng, &exponential] (double x) {return exponential(rng) / x;}); + std::partial_sort(index.begin(), index.begin() + size, index.end(), + [&weight](size_t i1, size_t i2) {return weight[i1] < weight[i2];}); + if (n == size) + return index; + else + return VEC(index.begin(), index.begin() + size); +} + template inline VEC sample(dqrng::random_64bit_generator &rng, INT n, INT size, bool replace, int offset = 0) { if (replace || size <= 1) { @@ -142,14 +164,17 @@ inline VEC sample(dqrng::random_64bit_generator &rng, INT n, INT size, bool repl template inline VEC sample(dqrng::random_64bit_generator &rng, INT n, INT size, bool replace, FVEC prob, int offset = 0) { if (replace || size <= 1) { - double *max_prob = std::max_element(prob.begin(), prob.end()); double prob_sum = std::accumulate(prob.begin(), prob.end(), 0.0); - if (size < n && *max_prob * n / prob_sum < 3.) + if (size >= n) + return dqrng::sample::replacement_alias(rng, n, size, prob, prob_sum, offset); + + double *max_prob = std::max_element(prob.begin(), prob.end()); + if (*max_prob * n / prob_sum < 3.) return dqrng::sample::replacement_prob(rng, n, size, prob, *max_prob, offset); else return dqrng::sample::replacement_alias(rng, n, size, prob, prob_sum, offset); } else { - Rcpp::stop("Weighted sampling w/o replacement not supported"); + return dqrng::sample::no_replacement_exp(rng, n, size, prob, offset); } } } // sample From 9c9402b3f7d76cfceecb0347f9b778828795c9ff Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Sun, 8 Oct 2023 22:32:40 +0200 Subject: [PATCH 05/31] Remove unnecessary struct --- inst/include/dqrng_sample.h | 6 ------ 1 file changed, 6 deletions(-) diff --git a/inst/include/dqrng_sample.h b/inst/include/dqrng_sample.h index 73fa91b..7f544a6 100644 --- a/inst/include/dqrng_sample.h +++ b/inst/include/dqrng_sample.h @@ -122,12 +122,6 @@ inline VEC no_replacement_set(dqrng::random_64bit_generator &rng, INT n, INT siz return result; } -template -struct member { - INT index; - double weight; -}; - template inline VEC no_replacement_exp(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, int offset) { VEC index(n); From 29ce7b426eaa2fc08ac39027cda59cb3217043d2 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Tue, 10 Oct 2023 09:52:11 +0200 Subject: [PATCH 06/31] Replace int with INT --- inst/include/dqrng_sample.h | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/inst/include/dqrng_sample.h b/inst/include/dqrng_sample.h index 7f544a6..1acf2b1 100644 --- a/inst/include/dqrng_sample.h +++ b/inst/include/dqrng_sample.h @@ -41,7 +41,7 @@ inline VEC replacement_prob(dqrng::random_64bit_generator &rng, INT n, INT size, std::generate(result.begin(), result.end(), [&n, &prob, &max_prob, &rng, &offset] () { while (true) { - int index = rng(n); + INT index = rng(n); if (dqrng::uniform01(rng()) < prob[index] / max_prob) return index + offset; } @@ -65,9 +65,9 @@ inline VEC replacement_alias(dqrng::random_64bit_generator &rng, INT n, INT size high.push(i); } while(!low.empty() && !high.empty()) { - int l = low.front(); + INT l = low.front(); low.pop(); - int h = high.front(); + INT h = high.front(); alias[l] = h; p[h] = (p[h] + p[l]) - 1.0; if (p[h] < 1.0) { From 8414aec19ec8c76a04d1147294e45f152eab6de1 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Tue, 10 Oct 2023 22:28:22 +0200 Subject: [PATCH 07/31] Add some checks --- inst/include/dqrng_sample.h | 14 ++++++++++++++ tests/testthat/test-sample.R | 2 ++ 2 files changed, 16 insertions(+) diff --git a/inst/include/dqrng_sample.h b/inst/include/dqrng_sample.h index 1acf2b1..8b2e568 100644 --- a/inst/include/dqrng_sample.h +++ b/inst/include/dqrng_sample.h @@ -140,6 +140,10 @@ inline VEC no_replacement_exp(dqrng::random_64bit_generator &rng, INT n, INT siz template inline VEC sample(dqrng::random_64bit_generator &rng, INT n, INT size, bool replace, int offset = 0) { + static_assert(std::is_integral::value && std::is_unsigned::value); + static_assert(std::is_floating_point::value || + std::is_integral::value || + std::is_reference::value); if (replace || size <= 1) { return dqrng::sample::replacement(rng, n, size, offset); } else { @@ -157,6 +161,14 @@ inline VEC sample(dqrng::random_64bit_generator &rng, INT n, INT size, bool repl template inline VEC sample(dqrng::random_64bit_generator &rng, INT n, INT size, bool replace, FVEC prob, int offset = 0) { + static_assert(std::is_integral::value && std::is_unsigned::value); + static_assert(std::is_floating_point::value || + std::is_integral::value || + std::is_reference::value); + static_assert(std::is_floating_point::value || + std::is_reference::value); + if (n != prob.size()) + Rcpp::stop("Argument requirements not fulfilled: n == prob.size()"); if (replace || size <= 1) { double prob_sum = std::accumulate(prob.begin(), prob.end(), 0.0); if (size >= n) @@ -168,6 +180,8 @@ inline VEC sample(dqrng::random_64bit_generator &rng, INT n, INT size, bool repl else return dqrng::sample::replacement_alias(rng, n, size, prob, prob_sum, offset); } else { + if (!(n >= size)) + Rcpp::stop("Argument requirements not fulfilled: n >= size"); return dqrng::sample::no_replacement_exp(rng, n, size, prob, offset); } } diff --git a/tests/testthat/test-sample.R b/tests/testthat/test-sample.R index 5ed329f..ae97b1f 100644 --- a/tests/testthat/test-sample.R +++ b/tests/testthat/test-sample.R @@ -183,6 +183,8 @@ test_that("dqsample_num w/ replacement and w/ weights works", { test_that("error cases", { dqset.seed(seed) expect_error(dqsample(10, 20), "Argument requirements not fulfilled: n >= size") + expect_error(dqsample(10, 20, prob = 1:10), "Argument requirements not fulfilled: n >= size") + expect_error(dqsample(10, 20, prob = 1:20), "n == length(prob) is not TRUE", fixed = TRUE) expect_silent(dqsample(10, 20, replace = TRUE)) expect_error(dqsample(10, -20), "Argument requirements not fulfilled: n > 0 && size >= 0") expect_error(dqsample(-10, -20), "Argument requirements not fulfilled: n > 0 && size >= 0") From 42814fffc2a9d81c5693b7fc2c51057c871f873a Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Tue, 10 Oct 2023 23:33:52 +0200 Subject: [PATCH 08/31] Add fair and biased coin for n == 2 --- inst/include/dqrng_sample.h | 39 ++++++++++++++++++++++++++++++++++++ tests/testthat/test-sample.R | 21 +++++++++++++++++++ 2 files changed, 60 insertions(+) diff --git a/inst/include/dqrng_sample.h b/inst/include/dqrng_sample.h index 8b2e568..390bdfd 100644 --- a/inst/include/dqrng_sample.h +++ b/inst/include/dqrng_sample.h @@ -35,6 +35,39 @@ inline VEC replacement(dqrng::random_64bit_generator &rng, INT n, INT size, int return result; } +template +inline VEC fair_coin(dqrng::random_64bit_generator &rng, INT n, INT size, int head, int tail) { + VEC result(size); + INT k = 0; + while (k < size) { + uint64_t bits = rng(); + + for (INT j = 0; j < 64 && k < size; ++k, ++j) + result[k] = (bits >> j) & 1 ? head : tail; + } + return result; +} + + +template +inline VEC biased_coin(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, int head, int tail) { + VEC result(size); + + // smaller probability scaled by 2^64 in order to compare directly with RNG output + uint64_t p; + if (prob[0] < 0.5) + p = 0x1p64 * prob[0] / (prob[0] + prob[1]); + else { + p = 0x1p64 * prob[1] / (prob[0] + prob[1]); + std::swap(head, tail); + } + std::generate(result.begin(), result.end(), + [&p, &rng, &head, &tail] () { + return rng() < p ? head : tail; + }); + return result; +} + template inline VEC replacement_prob(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, double max_prob, int offset) { VEC result(size); @@ -145,6 +178,9 @@ inline VEC sample(dqrng::random_64bit_generator &rng, INT n, INT size, bool repl std::is_integral::value || std::is_reference::value); if (replace || size <= 1) { + if (n == 2) + return dqrng::sample::fair_coin(rng, n, size, offset, 1 + offset); + return dqrng::sample::replacement(rng, n, size, offset); } else { if (!(n >= size)) @@ -170,6 +206,9 @@ inline VEC sample(dqrng::random_64bit_generator &rng, INT n, INT size, bool repl if (n != prob.size()) Rcpp::stop("Argument requirements not fulfilled: n == prob.size()"); if (replace || size <= 1) { + if (n == 2) + return dqrng::sample::biased_coin(rng, n, size, prob, offset, 1 + offset); + double prob_sum = std::accumulate(prob.begin(), prob.end(), 0.0); if (size >= n) return dqrng::sample::replacement_alias(rng, n, size, prob, prob_sum, offset); diff --git a/tests/testthat/test-sample.R b/tests/testthat/test-sample.R index ae97b1f..25b36c7 100644 --- a/tests/testthat/test-sample.R +++ b/tests/testthat/test-sample.R @@ -50,6 +50,17 @@ test_that("dqsample_int w/ replacement works", { expect_true(all(result >= 1) && all(result <= n)) }) +test_that("dqsample_int w/ replacement works for n = 2", { + dqset.seed(seed) + n <- 2 + k <- 1e3 + result <- dqsample(n, k, replace = TRUE) + expect_equal(length(result), k) + expect_lte(length(unique(result)), k) + expect_true(all(result >= 1) && all(result <= n)) +}) + + test_that("dqsample_int w/o replacement works with medium rate", { dqset.seed(seed) n <- 1e5 @@ -138,6 +149,16 @@ test_that("dqsample_int w/ replacement and w/ weights works with many sampled el expect_true(all(result >= 1) && all(result <= n)) }) +test_that("dqsample_int w/ replacement and w/ weights works with many sampled elements for n = 2", { + dqset.seed(seed) + n <- 2 + k <- 1e5 + result <- dqsample(n, k, replace = TRUE, prob = dqrunif(n)) + expect_equal(length(result), k) + expect_lte(length(unique(result)), k) + expect_true(all(result >= 1) && all(result <= n)) +}) + test_that("dqsample_int w/o replacement and w/ weights works with high rate", { dqset.seed(seed) n <- 1e5 From 60cdf8f86beef08fd767d3d7f393479c3b06b0e7 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Tue, 10 Oct 2023 23:42:20 +0200 Subject: [PATCH 09/31] Documentation --- inst/include/dqrng_sample.h | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/inst/include/dqrng_sample.h b/inst/include/dqrng_sample.h index 390bdfd..adbb9e5 100644 --- a/inst/include/dqrng_sample.h +++ b/inst/include/dqrng_sample.h @@ -68,6 +68,7 @@ inline VEC biased_coin(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC return result; } +// stochastic acceptance template inline VEC replacement_prob(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, double max_prob, int offset) { VEC result(size); @@ -82,6 +83,7 @@ inline VEC replacement_prob(dqrng::random_64bit_generator &rng, INT n, INT size, return result; } +// alias method (Walker/Voss) template inline VEC replacement_alias(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, double prob_sum, int offset) { VEC result(size); @@ -119,15 +121,14 @@ inline VEC replacement_alias(dqrng::random_64bit_generator &rng, INT n, INT size std::generate(result.begin(), result.end(), [&n, &p, &alias, &rng, &offset] () { INT index = rng(n); - if (dqrng::uniform01(rng()) < p[index]) - return index + offset; - else - return alias[index] + offset; + return (dqrng::uniform01(rng()) < p[index]) ? index + offset : + alias[index] + offset; }); return result; } +// Fisher-Yates shuffle template inline VEC no_replacement_shuffle(dqrng::random_64bit_generator &rng, INT n, INT size, int offset) { VEC tmp(n); @@ -141,6 +142,7 @@ inline VEC no_replacement_shuffle(dqrng::random_64bit_generator &rng, INT n, INT return VEC(tmp.begin(), tmp.begin() + size); } +// set-based rejection sampling template inline VEC no_replacement_set(dqrng::random_64bit_generator &rng, INT n, INT size, int offset) { VEC result(size); @@ -155,6 +157,7 @@ inline VEC no_replacement_set(dqrng::random_64bit_generator &rng, INT n, INT siz return result; } +// exponential rank (Efraimidis/Spirakis) template inline VEC no_replacement_exp(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, int offset) { VEC index(n); From ce16f22f7a4126679707694e55311f77320bf835 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Wed, 11 Oct 2023 15:30:00 +0200 Subject: [PATCH 10/31] Allow for large output size to trigger dqsample_num --- R/dqsample.R | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/R/dqsample.R b/R/dqsample.R index 88c6ad3..1f7e777 100644 --- a/R/dqsample.R +++ b/R/dqsample.R @@ -22,7 +22,7 @@ dqsample.int <- function(n, size = n, replace = FALSE, prob = NULL) { if (!is.null(prob)) stopifnot(n == length(prob)) - if (n <= .Machine$integer.max) + if (n <= .Machine$integer.max && size <= .Machine$integer.max) dqsample_int(n, size, replace, prob, 1L) else dqsample_num(n, size, replace, prob, 1L) From 8ed7d338e2e765dbf1af33fd65a3ee048bec2cd7 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Thu, 12 Oct 2023 14:39:54 +0200 Subject: [PATCH 11/31] Factor out creation of alias table --- inst/include/dqrng_sample.h | 39 +++++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/inst/include/dqrng_sample.h b/inst/include/dqrng_sample.h index adbb9e5..caee3b0 100644 --- a/inst/include/dqrng_sample.h +++ b/inst/include/dqrng_sample.h @@ -83,18 +83,15 @@ inline VEC replacement_prob(dqrng::random_64bit_generator &rng, INT n, INT size, return result; } -// alias method (Walker/Voss) -template -inline VEC replacement_alias(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, double prob_sum, int offset) { - VEC result(size); - std::vector alias(n); - FVEC p(n); - std::transform(prob.begin(), prob.end(), p.begin(), - [&n, &prob_sum] (double x) {return x * n / prob_sum;}); +// create table for alias method (Walker/Voss) +template +inline std::vector> create_alias_table(INT n, FVEC prob, double prob_sum) { + std::vector> prob_alias(n); std::queue high; std::queue low; for(INT i = 0; i < n; ++i) { - if (p[i] < 1.0) + prob_alias[i].first = prob[i] * n / prob_sum; + if (prob_alias[i].first < 1.0) low.push(i); else high.push(i); @@ -103,26 +100,34 @@ inline VEC replacement_alias(dqrng::random_64bit_generator &rng, INT n, INT size INT l = low.front(); low.pop(); INT h = high.front(); - alias[l] = h; - p[h] = (p[h] + p[l]) - 1.0; - if (p[h] < 1.0) { + prob_alias[l].second = h; + prob_alias[h].first = (prob_alias[h].first + prob_alias[l].first) - 1.0; + if (prob_alias[h].first < 1.0) { low.push(h); high.pop(); } } while (!low.empty()) { - p[low.front()] = 1.0; + prob_alias[low.front()].first = 1.0; low.pop(); } while (!high.empty()) { - p[high.front()] = 1.0; + prob_alias[high.front()].first = 1.0; high.pop(); } + return prob_alias; +} + +// alias method (Walker/Voss) +template +inline VEC replacement_alias(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, double prob_sum, int offset) { + VEC result(size); + std::vector> prob_alias = create_alias_table(n, prob, prob_sum); std::generate(result.begin(), result.end(), - [&n, &p, &alias, &rng, &offset] () { + [&n, &prob_alias, &rng, &offset] () { INT index = rng(n); - return (dqrng::uniform01(rng()) < p[index]) ? index + offset : - alias[index] + offset; + return (dqrng::uniform01(rng()) < prob_alias[index].first) ? + index + offset : prob_alias[index].second + offset; }); return result; From 41498c4df570bbee83dda29726aa94838141755a Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Thu, 12 Oct 2023 14:40:17 +0200 Subject: [PATCH 12/31] Remove a compiler warning --- inst/include/dqrng_sample.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/include/dqrng_sample.h b/inst/include/dqrng_sample.h index caee3b0..6c35fc2 100644 --- a/inst/include/dqrng_sample.h +++ b/inst/include/dqrng_sample.h @@ -211,7 +211,7 @@ inline VEC sample(dqrng::random_64bit_generator &rng, INT n, INT size, bool repl std::is_reference::value); static_assert(std::is_floating_point::value || std::is_reference::value); - if (n != prob.size()) + if (n != INT(prob.size())) Rcpp::stop("Argument requirements not fulfilled: n == prob.size()"); if (replace || size <= 1) { if (n == 2) From 8c7683c22b11493ee9da86409b4d1162d27e9e46 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Thu, 12 Oct 2023 14:43:19 +0200 Subject: [PATCH 13/31] Add set-based no-replacement methods for weighted sampling Similar to unweighted case. Two variants with stochastic acceptance (fast for even weight distribution) and alias method. These methods seem to be interesting for selection ratios < 0.5 (also similar to unweighted case). --- inst/include/dqrng_sample.h | 38 +++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/inst/include/dqrng_sample.h b/inst/include/dqrng_sample.h index 6c35fc2..d07f2bf 100644 --- a/inst/include/dqrng_sample.h +++ b/inst/include/dqrng_sample.h @@ -179,6 +179,44 @@ inline VEC no_replacement_exp(dqrng::random_64bit_generator &rng, INT n, INT siz return VEC(index.begin(), index.begin() + size); } +// set-based rejection sampling with stochastic acceptance +template +inline VEC no_replacement_prob_set(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, int offset) { + VEC result(size); + SET elems(n, size); + double *max_prob = std::max_element(prob.begin(), prob.end()); + + for (INT i = 0; i < size; ++i) { + INT v; + do { + do { + v = rng(n); + } while (dqrng::uniform01(rng()) >= prob[v] / *max_prob); + } while (!elems.insert(v)); + result[i] = (offset + v); + } + return result; +} + +// set-based rejection sampling with alias selection +template +inline VEC no_replacement_alias_set(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, int offset) { + VEC result(size); + double prob_sum = std::accumulate(prob.begin(), prob.end(), 0); + std::vector> prob_alias = create_alias_table(n, prob, prob_sum); + SET elems(n, size); + for (INT i = 0; i < size; ++i) { + INT v; + do { + INT index = rng(n); + v = (dqrng::uniform01(rng()) < prob_alias[index].first) ? + index : prob_alias[index].second; + } while (!elems.insert(v)); + result[i] = (offset + v); + } + return result; +} + template inline VEC sample(dqrng::random_64bit_generator &rng, INT n, INT size, bool replace, int offset = 0) { static_assert(std::is_integral::value && std::is_unsigned::value); From 54aa1fdd29b374e1f4d687d36882193b0893f62e Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Thu, 12 Oct 2023 21:20:18 +0200 Subject: [PATCH 14/31] Add messages to static_assert to not force usage of C++17 --- inst/include/dqrng_sample.h | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/inst/include/dqrng_sample.h b/inst/include/dqrng_sample.h index d07f2bf..bdcfae0 100644 --- a/inst/include/dqrng_sample.h +++ b/inst/include/dqrng_sample.h @@ -219,10 +219,12 @@ inline VEC no_replacement_alias_set(dqrng::random_64bit_generator &rng, INT n, I template inline VEC sample(dqrng::random_64bit_generator &rng, INT n, INT size, bool replace, int offset = 0) { - static_assert(std::is_integral::value && std::is_unsigned::value); + static_assert(std::is_integral::value && std::is_unsigned::value, + "Provided INT has the wrong type."); static_assert(std::is_floating_point::value || std::is_integral::value || - std::is_reference::value); + std::is_reference::value, + "Provided VEC has the wrong type."); if (replace || size <= 1) { if (n == 2) return dqrng::sample::fair_coin(rng, n, size, offset, 1 + offset); @@ -243,12 +245,15 @@ inline VEC sample(dqrng::random_64bit_generator &rng, INT n, INT size, bool repl template inline VEC sample(dqrng::random_64bit_generator &rng, INT n, INT size, bool replace, FVEC prob, int offset = 0) { - static_assert(std::is_integral::value && std::is_unsigned::value); + static_assert(std::is_integral::value && std::is_unsigned::value, + "Provided INT has the wrong type."); static_assert(std::is_floating_point::value || std::is_integral::value || - std::is_reference::value); + std::is_reference::value, + "Provided VEC has the wrong type."); static_assert(std::is_floating_point::value || - std::is_reference::value); + std::is_reference::value, + "Provided FVEC has the wrong type."); if (n != INT(prob.size())) Rcpp::stop("Argument requirements not fulfilled: n == prob.size()"); if (replace || size <= 1) { From 36b01c9f2b7738a388d64485ded8bb30c8185344 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Thu, 12 Oct 2023 22:52:57 +0200 Subject: [PATCH 15/31] Initial rules when to use which algorithm --- README.md | 10 ++++------ inst/include/dqrng_sample.h | 27 +++++++++++++++++++++------ 2 files changed, 25 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 784e313..71c60a9 100644 --- a/README.md +++ b/README.md @@ -123,8 +123,8 @@ bm[, 1:4] #> # A tibble: 2 × 4 #> expression min median `itr/sec` #> -#> 1 sample.int(m, n, replace = TRUE, prob = prob) 25.64ms 26.28ms 37.9 -#> 2 dqsample.int(m, n, replace = TRUE, prob = prob) 5.02ms 5.21ms 188. +#> 1 sample.int(m, n, replace = TRUE, prob = prob) 22.94ms 24.33ms 39.8 +#> 2 dqsample.int(m, n, replace = TRUE, prob = prob) 5.76ms 5.96ms 166. ``` And without replacement: @@ -133,14 +133,12 @@ And without replacement: bm <- bench::mark(sample.int(m, n, prob = prob), dqsample.int(m, n, prob = prob), check = FALSE) -#> Warning: Some expressions had a GC in every iteration; so filtering is -#> disabled. bm[, 1:4] #> # A tibble: 2 × 4 #> expression min median `itr/sec` #> -#> 1 sample.int(m, n, prob = prob) 15.6s 15.6s 0.0642 -#> 2 dqsample.int(m, n, prob = prob) 18.7ms 20.4ms 43.7 +#> 1 sample.int(m, n, prob = prob) 14.34s 14.34s 0.0697 +#> 2 dqsample.int(m, n, prob = prob) 5.09ms 5.34ms 184. ``` Especially for weighted sampling without replacement the performance diff --git a/inst/include/dqrng_sample.h b/inst/include/dqrng_sample.h index bdcfae0..b00fc04 100644 --- a/inst/include/dqrng_sample.h +++ b/inst/include/dqrng_sample.h @@ -181,17 +181,16 @@ inline VEC no_replacement_exp(dqrng::random_64bit_generator &rng, INT n, INT siz // set-based rejection sampling with stochastic acceptance template -inline VEC no_replacement_prob_set(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, int offset) { +inline VEC no_replacement_prob_set(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, double max_prob, int offset) { VEC result(size); SET elems(n, size); - double *max_prob = std::max_element(prob.begin(), prob.end()); for (INT i = 0; i < size; ++i) { INT v; do { do { v = rng(n); - } while (dqrng::uniform01(rng()) >= prob[v] / *max_prob); + } while (dqrng::uniform01(rng()) >= prob[v] / max_prob); } while (!elems.insert(v)); result[i] = (offset + v); } @@ -200,9 +199,8 @@ inline VEC no_replacement_prob_set(dqrng::random_64bit_generator &rng, INT n, IN // set-based rejection sampling with alias selection template -inline VEC no_replacement_alias_set(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, int offset) { +inline VEC no_replacement_alias_set(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, double prob_sum, int offset) { VEC result(size); - double prob_sum = std::accumulate(prob.begin(), prob.end(), 0); std::vector> prob_alias = create_alias_table(n, prob, prob_sum); SET elems(n, size); for (INT i = 0; i < size; ++i) { @@ -272,7 +270,24 @@ inline VEC sample(dqrng::random_64bit_generator &rng, INT n, INT size, bool repl } else { if (!(n >= size)) Rcpp::stop("Argument requirements not fulfilled: n >= size"); - return dqrng::sample::no_replacement_exp(rng, n, size, prob, offset); + if (n < 2 * size) + return dqrng::sample::no_replacement_exp(rng, n, size, prob, offset); + + double prob_sum = std::accumulate(prob.begin(), prob.end(), 0.0); + double *max_prob = std::max_element(prob.begin(), prob.end()); + if (n < 1000 * size) {// check this factor + using set_t = dqrng::minimal_bit_set; + if (*max_prob * n / prob_sum < 3.) + return dqrng::sample::no_replacement_prob_set(rng, n, size, prob, *max_prob, offset); + else + return dqrng::sample::no_replacement_alias_set(rng, n, size, prob, prob_sum, offset); + } else { + using set_t = dqrng::minimal_hash_set; + if (*max_prob * n / prob_sum < 3.) + return dqrng::sample::no_replacement_prob_set(rng, n, size, prob, *max_prob, offset); + else + return dqrng::sample::no_replacement_alias_set(rng, n, size, prob, prob_sum, offset); + } } } } // sample From 66c7bb7a591603142d49a2525eb97f28dbbc4eb6 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Thu, 12 Oct 2023 22:53:49 +0200 Subject: [PATCH 16/31] Draft documentation --- vignettes/data/no-replacement-long.RDS | Bin 1737 -> 1808 bytes vignettes/data/weighted-no-replacement.RDS | Bin 0 -> 812 bytes vignettes/data/weighted-replacement.RDS | Bin 0 -> 1207 bytes vignettes/sample.Rmd | 63 +++++++++++++++++++-- 4 files changed, 59 insertions(+), 4 deletions(-) create mode 100644 vignettes/data/weighted-no-replacement.RDS create mode 100644 vignettes/data/weighted-replacement.RDS diff --git a/vignettes/data/no-replacement-long.RDS b/vignettes/data/no-replacement-long.RDS index 7cecb1639f4a407dbd6e546273027d7b31ad1c9f..02541ac87f3d779696853f9692198d4509133617 100644 GIT binary patch literal 1808 zcmV+r2k-bFiwFP!000001MOK0P*hbIzUw{&6m!x_t*IQxQG6h2We(^ry%ZmarY7w3 z?(SW(xlzfz#uTe1-9nFYwKv75Y1wO(|&Bh@mv+*%$3f=piy~OT- z4Kql2S6Mgp$hnOG-X|+`E0>;QKo8Mz|ka@gD{M zkx()!l*cd+%{gsMBy0EjN5v5d7u;dz|I`G{Z)17@E#?^%Ir0s+;Wp>oI z4E{nnF>K+Cx=0kY4U2nOj`8=jwol?1H){$YTQI2fiaS4 zrH=}qu{V9KC=wf^oG4Jo_MCr}YFwlZ5izEF`DMR{3KdbYeY$V7s%x8!Kb__AWXqub zo%v6(=%@5+soMKjP)zx3LBD4Ve9AwC9?d$}^pwRtS`%nv?@Ik-QgM6GHk-qA4}-)k zjqRCgz)D3?QHcGkt77o=Y2^(Z3I7IT(r8-)*CE2S-eDJWX%iD`ci7W8$0W~?{}ZWD zD!EuHadl;rQ)rP^UVr<@y>8mX1f91~w_|doc($=~X7GP%YisW|vJ*naI^7Nn$8cgU zX4*?fTHHJZDSbf66%ShShuRqm)inQZ&JV(zT?CVfE$$%yj!^{FA@C;HY~^jCZGKus zFs+`y|1`T)(+^ZgZP59--PH3_ck2{(dKcxQlV#cbg>tcP@W;Rd2{(Z`Lqh~y`iXak zfWE!0Ghvs>o)s|v_bYADKh&-e+&NY_R?58ir-8Y{wTECI9g8?}&J;i|PqO_c4r0@v z&m~IsshyhyGRvw2VYbq`yq8KqL+qIx0X4p!!tyJV)~!OnKDS(uR3_f_pt*<5 zeq+G+@ww*&O!-Yk#=EOvPn-=zTS#F&DCXyi>|(ec>FJAO2Y~b>SZjx zfp}9Eeoo?Arz7>+eu?lL8vxrBaRPdYRku}Sy)Kh_y*(3oI8JM@j`|fe{OES;pl4dY z6Z-1EI)TTy`V_{KZk>dkdUZPZQievO-}c2KxZsu(G(VhvY zL*hHv;Ag&e3i+k<&Lp_wOVrIQISAWQcoBXXzAD^YH1XHZk@%7b@1+9h>e}4^YI|J3 zxIOwH^6*CPfu8!%RPg9JaTrfrKMV6s~rn@aaezP zAO{^|^m4>!?3xSPw4(^?;`#al{L_pPh?l7zN$PxFf%V{`x`E%=yBG9X!z|>R^j=3& z*NkaIZ*YI`=~ikm&w6Dz^vz|rV6)2QN5C8R9r{z}y^4POgagROm0F4UmZ5{7M_)Wl z(B&fap52PnAEK&L{V^ zR96@1vX{4_KUuyJ@n}PKV4i7pH1ea3C5YSb(H+z!ZNi}}_}|LMxMoWQ^o`H?FyHt? z2iT?$_khP%&>1@Jxy3|p{&=!Z=B22&we-B;|1ZC+)V-++&+RT$^EJtR#+zI3e(e$K z1r$Ymi&A)vHoe*6x1_w)&7C68_)0^0pH z#gp7xVt+jCzmENJo`;s!(w?-|avoY*ORHq8ZQs`(opJ1TNn8~^~0mZjDJ literal 1737 zcmV;)1~&O0iwFP!000001MOLRY!h`Hzpd>Udyqwp;7}d`aq<`ir=l|3@tg>e5Y(Y2 z-Szrwd+pt|y}L3-cua#Ji4}>W-Q++? z7cw!Lq|6DdlB}HJBogO!kjX(gDlrSZq9&PUx`@Kbd{E^B(zU(O@Jt=(nr+T>#iiZY zN{5`>5Q`)&(z0`v7fDpoP6~@e=D7s0MF$*>6wLeWHst9qnkla0@9Ld$c)`$KEwX!A!>XUy>|p8BbUq}MN&X27XxACsT-Jff@vAAdL3bf$PO{d)i{}jXny2aZ?&5HwFi?JZOEYh91t5x1myrn6vg3@1L0tP z{8Dzp(v6eOGW6ZNaGeGuh}s(6*66lI|F0TNj~R<`%orzwxy;KNt+vD;eHK+_Ig&Ih zw3h>A`Nmv=Q?EjMi$o$b7UWPwD!>u$yrrozi)|UmF7Y=IH{+ zyEbj0bnd$H3D94+x&rbp?A??aGk@i}wtJ$ z?V!s?AlR}QhY^&Jc{oUEaQ&`#Ddj(G{Ekv_O>fARS(Tu^&kKO-JaZZA9`#k=vZICr z*I9Z3{tI1ofQjwFvyjyJ6=mVoTv?T?6c*UvzAxpET)yf26fzZ0_2(!Si)> zx__c}r_^h20G|8HIlz&9UD3Qr1skwVKHY)1T#NgHm-qdNCi^b@0lg`|?naZ;N4_Y5 zym~#FA?7RqF0qH8Pt+rb&)aV&Ug><0(m?r1*tySb!n&`%K*uX^ zBQE)X?-JIZoeQ43xC!>Y7c6>R?%I-vc+QvN;Rv2qk$<3YAmR?cUxRuHyT>6euJWF7 zsNYv(5SK7!WDfGWZw~Tey@L=>^gE?3^yGHrDUI&~f8_WT;Bsf`^*VL*L(Wy~LENr~ zR_XQK(No9mRRi46=}VBaTk`Zid@~p{_@WE`h&31cU{ZO1`1NL1A?{G^%q`##sd|08 zyaZf##WwWcw>${y&f|e6T%L$^e%M~*NhT7+=YDtu@X2QbpyxR@2zI2n8{!hC=O8aN zwGe)!4`jrl6zze&f7j2j7kdtep3nIV{E$Qa5vN@IGWJXP>`v&HP`e8C2==m|AD-GD zfa`Cphuo8~74`GpyA|PxNQ9utUGhp=y~^W!QMZym)?gNVZ;@h zDuQ|r4nn=T{lDn_stkfx+S&18S9YpK*Lz}=ZvXg3y^pg}f$y6AJ?h4FTLJ3Ny3k$6 zU8?u3$645UHgAHQ+jj)ukd>{Y#A~3jN0{8kEQzw`n4A@vOnM<5hWp z68kZwy+}ky{Qoa$9xiU#A~`gD;};Fd;fehSqXtw~h#xxBv;e|_dex~Ikjo9rIK5O2 fqvhH(CzacrIN*w`?Egm%V4D91Hx}2BSsefX7A<_t diff --git a/vignettes/data/weighted-no-replacement.RDS b/vignettes/data/weighted-no-replacement.RDS new file mode 100644 index 0000000000000000000000000000000000000000..7f0509f4dbce5e4e2b90e53715aeb3ad007c5ff9 GIT binary patch literal 812 zcmV+{1JnE;iwFP!000001Lam-NEA^NzU%y~yPG2DW4()znn7hoyZa&p5uq7I;ySx~ zR|n^3n;A7B&Gdq95obf(VM9BCH-N3wr7`@UdSCLc(^s_s$%5W}Gcud#Z)m z^K2dPL5}>mK(|7(?tW;s>r4l2u%x7dZOBxiVZmz4z}Ejss}?1EP1!%>fyo9i>dC9dppIh_mCuASm~tD>B9FP zze$pCl4K_>a_p6}xaWaVeTP;@Uw=B|(8}cq30XI<1+>7HpG@bM9#_9*;Bm=sGk$X} z7!UN26h+T%)NnSyrzl52_bjMWgQ-uln}j^>KR>w z4JHnxHC>xj^)d6{e-BDYAp$8l2%i{{09No4Rj>>xhXXe|X6O^G&_x(W&yqjewpS}~ zuC|BtvVw|L*h^lrq}GB#ARLnU$i;1rPaNnoPWFHDT_babC1e}nXgN1{*d;L$}1;dtT4azW-xs*`Im`) zCbv(|qVlURIe&X#09C!YbuGINIqwiuS@$J^3X4`&$>a;J#Sts4IH6^>E09K1@Hkf5 zebz3Y)q(sifuc5f7VVXw2mN8bpdWB6{URIm1^s`*t@8J`3-n>D1@cALL0Z~&iE%c;bMFiTP~TG1QkzefrKui0@{?rBCpz&yYQ=oHMo@|d2Px)9Eff~hShYZ8` zYo3~`Xv6(2DhU#cCBkdGFREY)T4a{ua+InX$J|2()!{Ie-S#dSnoE$ibN)9;^BT4s z8H>$P;Xx$nsPT_9Pl|ZrA3k{}K=A#s@d<+O9C+y?f=BnBdIIDp{bK}=4>n&Sc<}e_ zK{!|22D=R<%Ei9x{5H>m!=hd%*!c<4Hp83%l8Umd~JCs+DFUY*%V zP_K7@Uhm=YAy~i2rwL}yd=Hq}={iFF*_HsDUR?`V{c(`;yazm~+4^pf+x`Im%vTj& zpQidsCtOCRes?3tmm7gU^`$}Ma-IhN^~e?)-=%Y4Pe1V;-M{e=wRbEAmy**au7f-> z^)C3kcX%Vgo^~(9o9X%dIauHF0_0V{Z$IQQn;bm{dIL$o><44ucgEL1^IU%c_|xC6 zy9oO=GL<`Kn?P@H1NC$0S+JX)(80fK%P(MGAAAJzk(;gtyP5Q1s@G($C-&309)E2g z!B<;c^d9<71CKu03x4O?pr-ukFZ$s=bE`s-PyOkqDBrpZz@PJ6h5OW11@1BXa4+@q z#XqUu(Fo)}_xxI#7bygM`ubZCZ|2%0g0ZAmVxdcs=edRwLL)*&^M%UA9Cn_C$fY>$ zb~tPaVV%vbb%~)!)Rdf9D%F%qwzpsBX_jtL*dvG=Ez%~7^cb?f3J7a(3Bj!lI#%+y zJYyw~%QBX`;fyY|;aE;rF}vjBR!~*)?P@wD#n{v>36U7jr1F@iJgN%pTgQX{!i9=I ze%!mlMcXbpg!S1!NIA5NZFse~hW~*Uy@cG@fuyL-8I|IS&Q2ETm0^z3xyjqo%~@Y~ V60hvOs|!H+zX3%Il!!hN001WiWB&jE literal 0 HcmV?d00001 diff --git a/vignettes/sample.Rmd b/vignettes/sample.Rmd index b644348..d04e1d5 100644 --- a/vignettes/sample.Rmd +++ b/vignettes/sample.Rmd @@ -14,7 +14,7 @@ knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) -evaluate <- FALSE +evaluate <- TRUE require(bench) ``` @@ -45,9 +45,6 @@ if (evaluate) { knitr::kable(bm[, 1:5]) ``` - - - Note that sampling from `10^10` integers triggers "[long-vector support](https://stat.ethz.ch/R-manual/R-devel/library/base/html/LongVectors.html)" in R. When sampling _without_ replacement one has to consider an appropriate algorithm for making sure that no entry is repeated. When more than 50% of the population are sampled, dqrng shuffles an appropriate part of the full list and returns that. The algorithm used in R is similar but dqrng has the edge with respect to performance: @@ -128,6 +125,46 @@ if (evaluate) { knitr::kable(bm[, 1:5]) ``` +The case of of weighted sampling is more complicated. +In addition to with or without replacement, one also has to consider the distribution of weights: +Is it fairly even as produced by `dqrunif()`? +Or is the weight concentrated in one or only a few possibilities? +Here only a few examples for weighted sampling both with replacement: + +```{r weighted-replacement, eval=evaluate} +m <- 1e6 +n <- 1e4 +prob <- dqrunif(m) +bm <- bench::mark(sample.int(m, n, replace = TRUE, prob = prob), + dqsample.int(m, n, replace = TRUE, prob = prob), + check = FALSE) +``` +```{r, echo=FALSE} +if (evaluate) { + saveRDS(bm, "data/weighted-replacement.RDS") +} else { + bm <- readRDS("data/weighted-replacement.RDS") +} +knitr::kable(bm[, 1:5]) +``` + +And without replacement: + +```{r weighted-no-replacement, eval=evaluate} +bm <- bench::mark(sample.int(m, n, prob = prob), + dqsample.int(m, n, prob = prob), + check = FALSE) +``` +```{r, echo=FALSE} +if (evaluate) { + saveRDS(bm, "data/weighted-no-replacement.RDS") +} else { + bm <- readRDS("data/weighted-no-replacement.RDS") +} +knitr::kable(bm[, 1:5]) +``` + +Especially for weighted sampling without replacement the performance advantage compared with R's default methods can be particularly large. ## Technicalities @@ -161,3 +198,21 @@ no_replace_set <- function(m, n) { ``` Here `elems.insert(v)` returns `TRUE` if the insert was successful, i.e. `v` was not in `elems` before, and `FALSE` otherwise. There are different strategies for implementing such a set. For intermediate sampling rates (currently between 0.1% and 50%) dqrng uses a bitset, i.e. a vector of `m` bits each representing one of the possible values. For lower sampling rates the memory usage of this algorithm is to expensive, which is why a hashset^[For the specialists: Open addressing with a power-of-two size between 1.5 and 3 times `n`, identity hash function for the stored integers and quadratic probing.] is used, since there the used memory scales with `n` and not with `m`. One could expect that [Robert Floyd's sampling algorithm](https://stackoverflow.com/a/2394292/8416610) would be superior, but this was not the case in my tests, probably because it requires a final shuffling of the result to get a random _permutation_ instead of a random _combination_. + +So far only un-weighted sampling was considered. +However, the some of the algorithms can be used for weighted sampling, when `random_int(m)`, which uniformly selects one of `m` elements, is replaced with a function that selects one of `m` elements based on their weights. +One such algorithm is [stochastic acceptance](https://doi.org/10.1016/j.physa.2011.12.004), which is particularly well suited in combination with fast RNGs: + +> 1. Select randomly one of the individuals (say, $i$). The selection is done with uniform probability $1/N$, which does not depend on the individual’s fitness $w_i$. +> 2. With probability $w_i/w_\max$, where $w_\max = \max\{w_i\}_{i=1}^N$ is the maximal fitness in the population, the selection is accepted. Otherwise, the procedure is repeated from step 1 (i.e., in the case of rejection, another selection attempt is made). + +For sampling with replacement the above algorithm can be directly applied. +For sampling without replacement together with the set based rejection sampling, one might consider updating $w_\max$ whenever the element with the maximum weight has been selected. +However, this is not necessary since one can stick to the original $w_\max$ at the cost of a slightly reduced acceptance rate. + +The stochastic acceptance method works well when the weights are more or less uniform. +However, the performance degrades quickly when the weight is concentrated on one or only a few items. +In this case, the alias method [...] is being used. + +The final case would be high sampling rates without replacement. +For this Algorithm A from [...] in the exponential formulation from [...] has been implemented. From 60a53035b8289f6c94dbe66a1e2bd944f8f0c50e Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Thu, 12 Oct 2023 22:54:11 +0200 Subject: [PATCH 17/31] Test both weighted coin options --- tests/testthat/test-sample.R | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/tests/testthat/test-sample.R b/tests/testthat/test-sample.R index 25b36c7..bc09e80 100644 --- a/tests/testthat/test-sample.R +++ b/tests/testthat/test-sample.R @@ -153,7 +153,12 @@ test_that("dqsample_int w/ replacement and w/ weights works with many sampled el dqset.seed(seed) n <- 2 k <- 1e5 - result <- dqsample(n, k, replace = TRUE, prob = dqrunif(n)) + result <- dqsample(n, k, replace = TRUE, prob = c(0.3, 0.7)) + expect_equal(length(result), k) + expect_lte(length(unique(result)), k) + expect_true(all(result >= 1) && all(result <= n)) + + result <- dqsample(n, k, replace = TRUE, prob = c(1.3, 0.7)) expect_equal(length(result), k) expect_lte(length(unique(result)), k) expect_true(all(result >= 1) && all(result <= n)) From 06e2ced69462862d9120c0d475b0f8766ea1eaac Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Fri, 13 Oct 2023 09:04:40 +0200 Subject: [PATCH 18/31] Add references --- vignettes/.gitignore | 1 + vignettes/bibliography.bib | 67 ++++++++++++++++++++++++++++++++++++++ vignettes/sample.Rmd | 19 +++++++---- 3 files changed, 80 insertions(+), 7 deletions(-) create mode 100644 vignettes/bibliography.bib diff --git a/vignettes/.gitignore b/vignettes/.gitignore index 097b241..16ef9a7 100644 --- a/vignettes/.gitignore +++ b/vignettes/.gitignore @@ -1,2 +1,3 @@ *.html *.R +packages.bib diff --git a/vignettes/bibliography.bib b/vignettes/bibliography.bib new file mode 100644 index 0000000..30e6202 --- /dev/null +++ b/vignettes/bibliography.bib @@ -0,0 +1,67 @@ + +@article{bentley1987a, + title = {Programming pearls: a sample of brilliance}, + author = {Bentley, Jon and Floyd, Bob}, + year = {1987}, + month = {09}, + date = {1987-09}, + journal = {Communications of the ACM}, + pages = {754--757}, + volume = {30}, + number = {9}, + doi = {10.1145/30401.315746}, + url = {https://dl.acm.org/doi/10.1145/30401.315746}, + langid = {en} +} + +@article{efraimidis2006, + title = {Weighted random sampling with a reservoir}, + author = {Efraimidis, Pavlos S. and Spirakis, Paul G.}, + year = {2006}, + month = {03}, + date = {2006-03}, + journal = {Information Processing Letters}, + pages = {181--185}, + volume = {97}, + number = {5}, + doi = {10.1016/j.ipl.2005.11.003}, + url = {https://linkinghub.elsevier.com/retrieve/pii/S002001900500298X}, + langid = {en} +} + +@article{walker1977, + title = {An Efficient Method for Generating Discrete Random Variables with General Distributions}, + author = {Walker, Alastair J.}, + year = {1977}, + month = {09}, + date = {1977-09}, + journal = {ACM Transactions on Mathematical Software}, + pages = {253--256}, + volume = {3}, + number = {3}, + doi = {10.1145/355744.355749}, + url = {https://dl.acm.org/doi/10.1145/355744.355749}, + langid = {en} +} + +@article{vose1991, + title = {A linear algorithm for generating random numbers with a given distribution}, + author = {Vose, M.D.}, + year = {1991}, + month = {09}, + date = {1991-09}, + journal = {IEEE Transactions on Software Engineering}, + pages = {972--975}, + volume = {17}, + number = {9}, + doi = {10.1109/32.92917}, + url = {http://ieeexplore.ieee.org/document/92917/} +} +@Manual{R-wrswoR, + title = {wrswoR: Weighted Random Sampling without Replacement}, + author = {Kirill Müller}, + year = {2020}, + note = {R package version 1.1.1}, + url = {http://krlmlr.github.io/wrswoR}, +} + diff --git a/vignettes/sample.Rmd b/vignettes/sample.Rmd index d04e1d5..e5b9cbd 100644 --- a/vignettes/sample.Rmd +++ b/vignettes/sample.Rmd @@ -3,6 +3,7 @@ title: "Fast sampling methods" author: "Ralf Stubner" date: "`r Sys.Date()`" output: rmarkdown::html_vignette +bibliography: bibliography.bib vignette: > %\VignetteIndexEntry{Fast sampling methods} %\VignetteEngine{knitr::rmarkdown} @@ -14,13 +15,14 @@ knitr::opts_chunk$set( collapse = TRUE, comment = "#>" ) -evaluate <- TRUE +evaluate <- FALSE require(bench) +#knitr::write_bib("wrswoR", file = "packages.bib") ``` Random sampling from a fixed set is used in many areas of statistical computing. The performance of this operation can be critical, especially when the sampled set is large. -The fast RNGs provided in this package make very fast sampling possible when combined with suitably fast algorithms. +The fast RNGs provided in this package make very fast sampling possible when combined with suitably fast algorithms. ## Benchmarks @@ -106,7 +108,7 @@ if (evaluate) { knitr::kable(bm[, 1:5]) ``` -For larger sampling ranges R uses the hashset by default, though `dqsample.int` is still faster: +For larger sampling ranges R uses the hashset by default, though `dqsample.int` is still faster: ```{r no-replacement-long, eval=evaluate} library(dqrng) @@ -179,7 +181,7 @@ no_replace_shuffle <- function(m, n) { } ``` -where `random_int(m-i)` returns a random integer in `[0, m-i]`. Since the full population is kept in memory, this method is only suitable for high selection rates. One could expect that [reservoir sampling](https://en.wikipedia.org/wiki/Reservoir_sampling) should work well for lower selection rates. However, in my tests set based algorithms were faster: +where `random_int(m-i)` returns a random integer in `[0, m-i]`. Since the full population is kept in memory, this method is only suitable for high selection rates. One could expect that [reservoir sampling](https://en.wikipedia.org/wiki/Reservoir_sampling) should work well for lower selection rates. However, in my tests set based algorithms were faster: ```{r, eval=FALSE} no_replace_set <- function(m, n) { @@ -197,7 +199,7 @@ no_replace_set <- function(m, n) { } ``` -Here `elems.insert(v)` returns `TRUE` if the insert was successful, i.e. `v` was not in `elems` before, and `FALSE` otherwise. There are different strategies for implementing such a set. For intermediate sampling rates (currently between 0.1% and 50%) dqrng uses a bitset, i.e. a vector of `m` bits each representing one of the possible values. For lower sampling rates the memory usage of this algorithm is to expensive, which is why a hashset^[For the specialists: Open addressing with a power-of-two size between 1.5 and 3 times `n`, identity hash function for the stored integers and quadratic probing.] is used, since there the used memory scales with `n` and not with `m`. One could expect that [Robert Floyd's sampling algorithm](https://stackoverflow.com/a/2394292/8416610) would be superior, but this was not the case in my tests, probably because it requires a final shuffling of the result to get a random _permutation_ instead of a random _combination_. +Here `elems.insert(v)` returns `TRUE` if the insert was successful, i.e. `v` was not in `elems` before, and `FALSE` otherwise. There are different strategies for implementing such a set. For intermediate sampling rates (currently between 0.1% and 50%) dqrng uses a bitset, i.e. a vector of `m` bits each representing one of the possible values. For lower sampling rates the memory usage of this algorithm is to expensive, which is why a hashset^[For the specialists: Open addressing with a power-of-two size between 1.5 and 3 times `n`, identity hash function for the stored integers and quadratic probing.] is used, since there the used memory scales with `n` and not with `m`. One could expect that [Robert Floyd's sampling algorithm](https://stackoverflow.com/a/2394292/8416610) [@bentley1987a] would be superior, but this was not the case in my tests, probably because it requires a final shuffling of the result to get a random _permutation_ instead of a random _combination_. So far only un-weighted sampling was considered. However, the some of the algorithms can be used for weighted sampling, when `random_int(m)`, which uniformly selects one of `m` elements, is replaced with a function that selects one of `m` elements based on their weights. @@ -212,7 +214,10 @@ However, this is not necessary since one can stick to the original $w_\max$ at t The stochastic acceptance method works well when the weights are more or less uniform. However, the performance degrades quickly when the weight is concentrated on one or only a few items. -In this case, the alias method [...] is being used. +In this case, the alias method [@walker1977; @vose1991] is being used. The final case would be high sampling rates without replacement. -For this Algorithm A from [...] in the exponential formulation from [...] has been implemented. +For this Algorithm A from @efraimidis2006 in the exponential formulation from @R-wrswoR has been implemented. + + +## Refernces From ed142a3a097cf6412182ab1793a4199b83146e80 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Fri, 13 Oct 2023 09:17:58 +0200 Subject: [PATCH 19/31] Use n/size instead of m/n as arguments --- vignettes/sample.Rmd | 80 ++++++++++++++++++++++---------------------- 1 file changed, 40 insertions(+), 40 deletions(-) diff --git a/vignettes/sample.Rmd b/vignettes/sample.Rmd index e5b9cbd..5057087 100644 --- a/vignettes/sample.Rmd +++ b/vignettes/sample.Rmd @@ -30,12 +30,12 @@ By combining fast RNGs with a fast methods for creating [integers in a range](ht ```{r replacement, eval=evaluate} library(dqrng) -m <- 1e6 -n <- 1e4 -bm <- bench::mark(sample.int(m, n, replace = TRUE), - sample.int(1e4*m, n, replace = TRUE), - dqsample.int(m, n, replace = TRUE), - dqsample.int(1e4*m, n, replace = TRUE), +n <- 1e6 +size <- 1e4 +bm <- bench::mark(sample.int(n, size, replace = TRUE), + sample.int(1e4*n, size, replace = TRUE), + dqsample.int(n, size, replace = TRUE), + dqsample.int(1e4*n, size, replace = TRUE), check = FALSE) ``` ```{r, echo=FALSE} @@ -53,10 +53,10 @@ When sampling _without_ replacement one has to consider an appropriate algorithm ```{r no-replacement-high, eval=evaluate} library(dqrng) -m <- 1e6 -n <- 6e5 -bm <- bench::mark(sample.int(m, n), - dqsample.int(m, n), +n <- 1e6 +size <- 6e5 +bm <- bench::mark(sample.int(n, size), + dqsample.int(n, size), check = FALSE, min_iterations = 50) ``` ```{r, echo=FALSE} @@ -72,11 +72,11 @@ For lower sampling ratios a set based rejection sampling algorithm is used by dq ```{r no-replacement-medium, eval=evaluate} library(dqrng) -m <- 1e6 -n <- 1e4 -bm <- bench::mark(sample.int(m, n), - sample.int(m, n, useHash = TRUE), - dqsample.int(m, n), +n <- 1e6 +size <- 1e4 +bm <- bench::mark(sample.int(n, size), + sample.int(n, size, useHash = TRUE), + dqsample.int(n, size), check = FALSE) ``` ```{r, echo=FALSE} @@ -92,11 +92,11 @@ As one decreases the sampling rate even more, dqrng switches to a hashset based ```{r no-replacement-low, eval=evaluate} library(dqrng) -m <- 1e6 -n <- 1e2 -bm <- bench::mark(sample.int(m, n), - sample.int(m, n, useHash = TRUE), - dqsample.int(m, n), +n <- 1e6 +size <- 1e2 +bm <- bench::mark(sample.int(n, size), + sample.int(n, size, useHash = TRUE), + dqsample.int(n, size), check = FALSE) ``` ```{r, echo=FALSE} @@ -112,10 +112,10 @@ For larger sampling ranges R uses the hashset by default, though `dqsample.int` ```{r no-replacement-long, eval=evaluate} library(dqrng) -m <- 1e10 -n <- 1e5 -bm <- bench::mark(sample.int(m, n), - dqsample.int(m, n), +n <- 1e10 +size <- 1e5 +bm <- bench::mark(sample.int(n, size), + dqsample.int(n, size), check = FALSE) ``` ```{r, echo=FALSE} @@ -134,11 +134,11 @@ Or is the weight concentrated in one or only a few possibilities? Here only a few examples for weighted sampling both with replacement: ```{r weighted-replacement, eval=evaluate} -m <- 1e6 -n <- 1e4 -prob <- dqrunif(m) -bm <- bench::mark(sample.int(m, n, replace = TRUE, prob = prob), - dqsample.int(m, n, replace = TRUE, prob = prob), +n <- 1e6 +size <- 1e4 +prob <- dqrunif(n) +bm <- bench::mark(sample.int(n, size, replace = TRUE, prob = prob), + dqsample.int(n, size, replace = TRUE, prob = prob), check = FALSE) ``` ```{r, echo=FALSE} @@ -153,8 +153,8 @@ knitr::kable(bm[, 1:5]) And without replacement: ```{r weighted-no-replacement, eval=evaluate} -bm <- bench::mark(sample.int(m, n, prob = prob), - dqsample.int(m, n, prob = prob), +bm <- bench::mark(sample.int(n, size, prob = prob), + dqsample.int(n, size, prob = prob), check = FALSE) ``` ```{r, echo=FALSE} @@ -173,21 +173,21 @@ Especially for weighted sampling without replacement the performance advantage c The following methods are used for sampling without replacement. The algorithms are presented in R-like pseudo code, even though the real implementation is in C++. For sampling rates above 50%, a partial [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle) is used: ```{r, eval=FALSE} -no_replace_shuffle <- function(m, n) { +no_replace_shuffle <- function(m, size) { tmp <- seq_len(m) - for (i in seq_len(n)) + for (i in seq_len(size)) swap(tmp[i], tmp[i + random_int(m-i)]) - tmp[1:n] + tmp[1:size] } ``` where `random_int(m-i)` returns a random integer in `[0, m-i]`. Since the full population is kept in memory, this method is only suitable for high selection rates. One could expect that [reservoir sampling](https://en.wikipedia.org/wiki/Reservoir_sampling) should work well for lower selection rates. However, in my tests set based algorithms were faster: ```{r, eval=FALSE} -no_replace_set <- function(m, n) { - result <- vector(mode = "...", length = n) # integer or numeric - elems <- new(set, m, n) # set object for storing n objects out of m possible values - for (i in seq_len(n)) +no_replace_set <- function(m, size) { + result <- vector(mode = "...", length = size) # integer or numeric + elems <- new(set, m, size) # set object for storing n objects out of m possible values + for (i in seq_len(size)) while (TRUE) { v = random_int(m) if (elems.insert(v)) { @@ -199,10 +199,10 @@ no_replace_set <- function(m, n) { } ``` -Here `elems.insert(v)` returns `TRUE` if the insert was successful, i.e. `v` was not in `elems` before, and `FALSE` otherwise. There are different strategies for implementing such a set. For intermediate sampling rates (currently between 0.1% and 50%) dqrng uses a bitset, i.e. a vector of `m` bits each representing one of the possible values. For lower sampling rates the memory usage of this algorithm is to expensive, which is why a hashset^[For the specialists: Open addressing with a power-of-two size between 1.5 and 3 times `n`, identity hash function for the stored integers and quadratic probing.] is used, since there the used memory scales with `n` and not with `m`. One could expect that [Robert Floyd's sampling algorithm](https://stackoverflow.com/a/2394292/8416610) [@bentley1987a] would be superior, but this was not the case in my tests, probably because it requires a final shuffling of the result to get a random _permutation_ instead of a random _combination_. +Here `elems.insert(v)` returns `TRUE` if the insert was successful, i.e. `v` was not in `elems` before, and `FALSE` otherwise. There are different strategies for implementing such a set. For intermediate sampling rates (currently between 0.1% and 50%) dqrng uses a bitset, i.e. a vector of `n` bits each representing one of the possible values. For lower sampling rates the memory usage of this algorithm is to expensive, which is why a hashset^[For the specialists: Open addressing with a power-of-two size between 1.5 and 3 times `size`, identity hash function for the stored integers and quadratic probing.] is used, since there the used memory scales with `size` and not with `n`. One could expect that [Robert Floyd's sampling algorithm](https://stackoverflow.com/a/2394292/8416610) [@bentley1987a] would be superior, but this was not the case in my tests, probably because it requires a final shuffling of the result to get a random _permutation_ instead of a random _combination_. So far only un-weighted sampling was considered. -However, the some of the algorithms can be used for weighted sampling, when `random_int(m)`, which uniformly selects one of `m` elements, is replaced with a function that selects one of `m` elements based on their weights. +However, the some of the algorithms can be used for weighted sampling, when `random_int(n)`, which uniformly selects one of `n` elements, is replaced with a function that selects one of `n` elements based on their weights. One such algorithm is [stochastic acceptance](https://doi.org/10.1016/j.physa.2011.12.004), which is particularly well suited in combination with fast RNGs: > 1. Select randomly one of the individuals (say, $i$). The selection is done with uniform probability $1/N$, which does not depend on the individual’s fitness $w_i$. From 22c557099c508acb1603c30a060623c5a4c32241 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Fri, 13 Oct 2023 14:21:00 +0200 Subject: [PATCH 20/31] Add more formal references --- vignettes/bibliography.bib | 231 ++++++++++++++++++++++++++++--------- vignettes/dqrng.Rmd | 11 +- vignettes/sample.Rmd | 10 +- 3 files changed, 189 insertions(+), 63 deletions(-) diff --git a/vignettes/bibliography.bib b/vignettes/bibliography.bib index 30e6202..d913e9d 100644 --- a/vignettes/bibliography.bib +++ b/vignettes/bibliography.bib @@ -1,67 +1,190 @@ +@article{bentley1987, + title = {Programming Pearls: A Sample of Brilliance}, + shorttitle = {Programming Pearls}, + author = {Bentley, Jon and Floyd, Bob}, + year = {1987}, + month = sep, + journal = {Communications of the ACM}, + volume = {30}, + number = {9}, + pages = {754--757}, + issn = {0001-0782, 1557-7317}, + doi = {10.1145/30401.315746}, + url = {https://dl.acm.org/doi/10.1145/30401.315746}, + urldate = {2023-09-26}, + langid = {english} +} -@article{bentley1987a, - title = {Programming pearls: a sample of brilliance}, - author = {Bentley, Jon and Floyd, Bob}, - year = {1987}, - month = {09}, - date = {1987-09}, - journal = {Communications of the ACM}, - pages = {754--757}, - volume = {30}, - number = {9}, - doi = {10.1145/30401.315746}, - url = {https://dl.acm.org/doi/10.1145/30401.315746}, - langid = {en} +@article{blackman2021, + title = {Scrambled {{Linear Pseudorandom Number Generators}}}, + author = {Blackman, David and Vigna, Sebastiano}, + year = {2021}, + month = dec, + journal = {ACM Transactions on Mathematical Software}, + volume = {47}, + number = {4}, + eprint = {1805.01407}, + pages = {1--32}, + issn = {0098-3500, 1557-7295}, + doi = {10.1145/3460772}, + url = {https://dl.acm.org/doi/10.1145/3460772}, + urldate = {2023-09-06}, + abstract = {F\_2-linear pseudorandom number generators are very popular due to their high speed, to the ease with which generators with a sizable state space can be created, and to their provable theoretical properties. However, they suffer from linear artifacts that show as failures in linearity-related statistical tests such as the binary-rank and the linear-complexity test. In this article, we give two new contributions. First, we introduce two new F\_2-linear transformations that have been handcrafted to have good statistical properties and at the same time to be programmable very efficiently on superscalar processors, or even directly in hardware. Then, we describe some scramblers, that is, nonlinear functions applied to the state array that reduce or delete the linear artifacts, and propose combinations of linear transformations and scramblers that give extremely fast pseudorandom number generators of high quality. A novelty in our approach is that we use ideas from the theory of filtered linear-feedback shift registers to prove some properties of our scramblers, rather than relying purely on heuristics. In the end, we provide simple, extremely fast generators that use a few hundred bits of memory, have provable properties, and pass strong statistical tests.}, + archiveprefix = {arxiv}, + langid = {english}, + keywords = {Computer Science - Cryptography and Security,Computer Science - Data Structures and Algorithms,Computer Science - Mathematical Software,random number generation} } @article{efraimidis2006, - title = {Weighted random sampling with a reservoir}, - author = {Efraimidis, Pavlos S. and Spirakis, Paul G.}, - year = {2006}, - month = {03}, - date = {2006-03}, - journal = {Information Processing Letters}, - pages = {181--185}, - volume = {97}, - number = {5}, - doi = {10.1016/j.ipl.2005.11.003}, - url = {https://linkinghub.elsevier.com/retrieve/pii/S002001900500298X}, - langid = {en} + title = {Weighted Random Sampling with a Reservoir}, + author = {Efraimidis, Pavlos S. and Spirakis, Paul G.}, + year = {2006}, + month = mar, + journal = {Information Processing Letters}, + volume = {97}, + number = {5}, + pages = {181--185}, + issn = {00200190}, + doi = {10.1016/j.ipl.2005.11.003}, + url = {https://linkinghub.elsevier.com/retrieve/pii/S002001900500298X}, + urldate = {2023-09-01}, + langid = {english} } -@article{walker1977, - title = {An Efficient Method for Generating Discrete Random Variables with General Distributions}, - author = {Walker, Alastair J.}, - year = {1977}, - month = {09}, - date = {1977-09}, - journal = {ACM Transactions on Mathematical Software}, - pages = {253--256}, - volume = {3}, - number = {3}, - doi = {10.1145/355744.355749}, - url = {https://dl.acm.org/doi/10.1145/355744.355749}, - langid = {en} +@misc{keithschwarz2011, + title = {Darts, {{Dice}}, and {{Coins}}}, + author = {{Keith Schwarz}}, + year = {2011}, + month = dec, + url = {https://www.keithschwarz.com/darts-dice-coins/}, + urldate = {2023-09-07} } -@article{vose1991, - title = {A linear algorithm for generating random numbers with a given distribution}, - author = {Vose, M.D.}, - year = {1991}, - month = {09}, - date = {1991-09}, - journal = {IEEE Transactions on Software Engineering}, - pages = {972--975}, - volume = {17}, - number = {9}, - doi = {10.1109/32.92917}, - url = {http://ieeexplore.ieee.org/document/92917/} +@article{lipowski2012, + title = {Roulette-Wheel Selection via Stochastic Acceptance}, + author = {Lipowski, Adam and Lipowska, Dorota}, + year = {2012}, + month = mar, + journal = {Physica A: Statistical Mechanics and its Applications}, + volume = {391}, + number = {6}, + eprint = {1109.3627}, + primaryclass = {cond-mat, physics:physics}, + pages = {2193--2196}, + issn = {03784371}, + doi = {10.1016/j.physa.2011.12.004}, + url = {http://arxiv.org/abs/1109.3627}, + urldate = {2022-12-29}, + abstract = {Roulette-wheel selection is a frequently used method in genetic and evolutionary algorithms or in modeling of complex networks. Existing routines select one of N individuals using search algorithms of O(N) or O(log(N)) complexity. We present a simple roulette-wheel selection algorithm, which typically has O(1) complexity and is based on stochastic acceptance instead of searching. We also discuss a hybrid version, which might be suitable for highly heterogeneous weight distributions, found, for example, in some models of complex networks. With minor modifications, the algorithm might also be used for sampling with fitness cut-off at a certain value or for sampling without replacement.}, + archiveprefix = {arxiv}, + keywords = {Computer Science - Computational Complexity,Computer Science - Neural and Evolutionary Computing,Condensed Matter - Statistical Mechanics,Physics - Computational Physics}, + note = {Comment: 4 pages, Physica A, accepted} +} + +@article{marsaglia2000, + title = {The {{Ziggurat Method}} for {{Generating Random Variables}}}, + author = {Marsaglia, George and Tsang, Wai Wan}, + year = {2000}, + journal = {Journal of Statistical Software}, + volume = {5}, + number = {8}, + issn = {1548-7660}, + doi = {10.18637/jss.v005.i08}, + url = {http://www.jstatsoft.org/v05/i08/}, + urldate = {2018-06-14}, + langid = {english} } -@Manual{R-wrswoR, - title = {wrswoR: Weighted Random Sampling without Replacement}, - author = {Kirill Müller}, + +@misc{muller2016, + title = {Accelerating Weighted Random Sampling without Replacement}, + author = {Müller, Kirill}, + year = {2016}, + url = {https://ethz.ch/content/dam/ethz/special-interest/baug/ivt/ivt-dam/vpl/reports/1101-1200/ab1141.pdf}, + abstract = {Random sampling from discrete populations is one of the basic primitives in statistical computing. This article briefly introduces weighted and unweighted sampling with and without replacement. The case of weighted sampling without replacement appears to be most difficult to implement efficiently, which might be one reason why the R implementation performs slowly for large problem sizes. This paper presents four alternative implementations for the case of weighted sampling without replacement, with an analysis of their run time and correctness.}, + langid = {english} +} + +@misc{oneill2014, + title = {{{PCG}}: {{A Family}} of {{Simple Fast Space-Efficient Statistically Good Algorithms}} for {{Random Number Generation}}}, + author = {O'Neill, Melissa}, + year = {2014}, + number = {HMC-CS-2014-0905}, + url = {https://www.cs.hmc.edu/tr/hmc-cs-2014-0905.pdf}, + abstract = {This paper presents a new uniform pseudorandom number generation scheme that is both extremely practical and statistically good (easily passing L’Ecuyer’s TestU suite [ ]). It has a number of important properties, including solid mathematical foundations, good time and space performance, small code size, multiple random streams, and better cryptographic properties than are typical for a general-purpose generator. The key idea is to pass the output of a fast well-understood “medium quality” random number generator to an efficient permutation function (a.k.a. hash function), built from composable primitives, that enhances the quality of the output. The algorithm can be applied at variety of bit sizes, including and bits (which provide - and -bit outputs, with periods of 264 and 2128). Optionally, we can provide each b-bit generator with a b−1 bit stream-selection constant, thereby providing 2b−1 random streams, which are full period and entirely distinct. An extension adds up to 2b -dimensional equidistribution for a total period of 2b2b . The construction of the permutation function and the periodextension technique are both founded on the idea of permutation functions on tuples. In its standard variants, b-bit generators use a 2b/2-to- function to produce b/2 bits of output. These functions can be designed to make it difficult for an adversary to discover the generator’s internal state by examining its output, and thus make it challenging to predict. This property, coupled with the ability to easily switch between random streams, provides many of the benefits provided by cryptographically secure generators without the overheads usually associated with those generators.}, + langid = {english} +} + +@manual{R-wrswoR, + type = {Manual}, + title = {{{wrswoR}}: {{Weighted}} Random Sampling without Replacement}, + author = {Müller, Kirill}, year = {2020}, - note = {R package version 1.1.1}, url = {http://krlmlr.github.io/wrswoR}, + note = {R package version 1.1.1} } +@inproceedings{salmon2011, + title = {Parallel {{Random Numbers}}: {{As Easy As}} 1, 2, 3}, + shorttitle = {Parallel {{Random Numbers}}}, + booktitle = {Proceedings of 2011 {{International Conference}} for {{High Performance Computing}}, {{Networking}}, {{Storage}} and {{Analysis}}}, + author = {Salmon, John K. and Moraes, Mark A. and Dror, Ron O. and Shaw, David E.}, + year = {2011}, + month = nov, + series = {{{SC}} '11}, + pages = {16:1--16:12}, + publisher = {{ACM}}, + address = {{New York, NY, USA}}, + doi = {10.1145/2063384.2063405}, + url = {http://doi.acm.org/10.1145/2063384.2063405}, + urldate = {2018-06-14}, + abstract = {Most pseudorandom number generators (PRNGs) scale poorly to massively parallel high-performance computation because they are designed as sequentially dependent state transformations. We demonstrate that independent, keyed transformations of counters produce a large alternative class of PRNGs with excellent statistical properties (long period, no discernable structure or correlation). These counter-based PRNGs are ideally suited to modern multi-core CPUs, GPUs, clusters, and special-purpose hardware because they vectorize and parallelize well, and require little or no memory for state. We introduce several counter-based PRNGs: some based on cryptographic standards (AES, Threefish) and some completely new (Philox). All our PRNGs pass rigorous statistical tests (including TestU01's BigCrush) and produce at least 264 unique parallel streams of random numbers, each with period 2128 or more. In addition to essentially unlimited parallel scalability, our PRNGs offer excellent single-chip performance: Philox is faster than the CURAND library on a single NVIDIA GPU.}, + isbn = {978-1-4503-0771-0}, + langid = {english}, + keywords = {parallel computation,random number generation} +} + +@article{vose1991, + title = {A Linear Algorithm for Generating Random Numbers with a given Distribution}, + author = {Vose, M.D.}, + year = {1991}, + month = sep, + journal = {IEEE Transactions on Software Engineering}, + volume = {17}, + number = {9}, + pages = {972--975}, + issn = {00985589}, + doi = {10.1109/32.92917}, + url = {http://ieeexplore.ieee.org/document/92917/}, + urldate = {2023-08-31} +} + +@article{walker1974, + title = {New Fast Method for Generating Discrete Random Numbers with Arbitrary Frequency Distributions}, + author = {Walker, Alastair J.}, + year = {1974}, + journal = {Electronics Letters}, + volume = {10}, + number = {8}, + pages = {127}, + issn = {00135194}, + doi = {10.1049/el:19740097}, + url = {https://digital-library.theiet.org/content/journals/10.1049/el_19740097}, + urldate = {2023-09-07}, + langid = {english} +} + +@article{walker1977, + title = {An {{Efficient Method}} for {{Generating Discrete Random Variables}} with {{General Distributions}}}, + author = {Walker, Alastair J.}, + year = {1977}, + month = sep, + journal = {ACM Transactions on Mathematical Software}, + volume = {3}, + number = {3}, + pages = {253--256}, + issn = {0098-3500, 1557-7295}, + doi = {10.1145/355744.355749}, + url = {https://dl.acm.org/doi/10.1145/355744.355749}, + urldate = {2023-09-07}, + langid = {english} +} diff --git a/vignettes/dqrng.Rmd b/vignettes/dqrng.Rmd index 4690099..a67454a 100644 --- a/vignettes/dqrng.Rmd +++ b/vignettes/dqrng.Rmd @@ -3,6 +3,7 @@ title: "Fast Pseudo Random Number Generators for R" author: "Ralf Stubner" date: "`r Sys.Date()`" output: rmarkdown::html_vignette +bibliography: bibliography.bib vignette: > %\VignetteIndexEntry{Fast Pseudo Random Number Generators for R} %\VignetteEngine{knitr::rmarkdown} @@ -26,13 +27,13 @@ Support for the following 64bit RNGs are currently included: * **pcg64** The default 64 bit variant from the PCG family developed by Melissa O'Neill. -See https://www.pcg-random.org/ for more details. +See @oneill2014 and https://www.pcg-random.org/ for more details. * **Xoroshiro128++** and **Xoshiro256++** RNGs developed by David Blackman and Sebastiano Vigna. -See https://xoroshiro.di.unimi.it/ for more details. +See @blackman2021 and https://xoroshiro.di.unimi.it/ for more details. The older generators Xoroshiro128+ and Xoshiro256+ should be used only for backwards compatibility. * **Threefry** -The 64 bit version of the 20 rounds Threefry engine (Salmon et al., 2011) as provided by the package 'sitmo'. +The 64 bit version of the 20 rounds Threefry engine [@salmon2011] as provided by the package 'sitmo'. Of these RNGs Xoroshiro128++ is used as default since it is fast, small and has good statistical properties. @@ -316,7 +317,7 @@ system.time(boost_pcg_rnorm(1e7)) */ ``` -This is quite fast since `boost::random::normal_distribution` uses the fast Ziggurat algorithm. +This is quite fast since `boost::random::normal_distribution` uses the fast Ziggurat algorithm [@marsaglia2000]. For some applications it is necessary to draw random numbers from multiple distributions with varying parameters. The following function uses a binomial distribution (from `boost.random`) as well as the normal distribution from `dqrng`. The parameters of the distributions are adjusted for every draw using `::param_type`: @@ -396,3 +397,5 @@ dqset.seed(42) multiple_distributions(5) */ ``` + +## References diff --git a/vignettes/sample.Rmd b/vignettes/sample.Rmd index 5057087..e81c057 100644 --- a/vignettes/sample.Rmd +++ b/vignettes/sample.Rmd @@ -199,11 +199,11 @@ no_replace_set <- function(m, size) { } ``` -Here `elems.insert(v)` returns `TRUE` if the insert was successful, i.e. `v` was not in `elems` before, and `FALSE` otherwise. There are different strategies for implementing such a set. For intermediate sampling rates (currently between 0.1% and 50%) dqrng uses a bitset, i.e. a vector of `n` bits each representing one of the possible values. For lower sampling rates the memory usage of this algorithm is to expensive, which is why a hashset^[For the specialists: Open addressing with a power-of-two size between 1.5 and 3 times `size`, identity hash function for the stored integers and quadratic probing.] is used, since there the used memory scales with `size` and not with `n`. One could expect that [Robert Floyd's sampling algorithm](https://stackoverflow.com/a/2394292/8416610) [@bentley1987a] would be superior, but this was not the case in my tests, probably because it requires a final shuffling of the result to get a random _permutation_ instead of a random _combination_. +Here `elems.insert(v)` returns `TRUE` if the insert was successful, i.e. `v` was not in `elems` before, and `FALSE` otherwise. There are different strategies for implementing such a set. For intermediate sampling rates (currently between 0.1% and 50%) dqrng uses a bitset, i.e. a vector of `n` bits each representing one of the possible values. For lower sampling rates the memory usage of this algorithm is to expensive, which is why a hashset^[For the specialists: Open addressing with a power-of-two size between 1.5 and 3 times `size`, identity hash function for the stored integers and quadratic probing.] is used, since there the used memory scales with `size` and not with `n`. One could expect that [Robert Floyd's sampling algorithm](https://stackoverflow.com/a/2394292/8416610) [@bentley1987] would be superior, but this was not the case in my tests, probably because it requires a final shuffling of the result to get a random _permutation_ instead of a random _combination_. So far only un-weighted sampling was considered. However, the some of the algorithms can be used for weighted sampling, when `random_int(n)`, which uniformly selects one of `n` elements, is replaced with a function that selects one of `n` elements based on their weights. -One such algorithm is [stochastic acceptance](https://doi.org/10.1016/j.physa.2011.12.004), which is particularly well suited in combination with fast RNGs: +One such algorithm is stochastic acceptance [@lipowski2012], which is particularly well suited in combination with fast RNGs: > 1. Select randomly one of the individuals (say, $i$). The selection is done with uniform probability $1/N$, which does not depend on the individual’s fitness $w_i$. > 2. With probability $w_i/w_\max$, where $w_\max = \max\{w_i\}_{i=1}^N$ is the maximal fitness in the population, the selection is accepted. Otherwise, the procedure is repeated from step 1 (i.e., in the case of rejection, another selection attempt is made). @@ -214,10 +214,10 @@ However, this is not necessary since one can stick to the original $w_\max$ at t The stochastic acceptance method works well when the weights are more or less uniform. However, the performance degrades quickly when the weight is concentrated on one or only a few items. -In this case, the alias method [@walker1977; @vose1991] is being used. +In this case, the alias method is used, which has been originally suggested by Walker [-@walker1974; -@walker1977] in the efficient formulation of @vose1991, which is also used by R in certain cases. +@keithschwarz2011 gives a detailed introduction into this method. The final case would be high sampling rates without replacement. -For this Algorithm A from @efraimidis2006 in the exponential formulation from @R-wrswoR has been implemented. - +For this Algorithm A from @efraimidis2006 in the exponential formulation of Müller [-@R-wrswoR; -@muller2016] has been implemented. ## Refernces From 17f6b94a711fbe24460cf02c0b8c22efe03717c2 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Fri, 13 Oct 2023 22:31:10 +0200 Subject: [PATCH 21/31] Document n=2 case --- vignettes/data/n-2.RDS | Bin 0 -> 75692 bytes vignettes/data/no-replacement-high.RDS | Bin 1404 -> 1409 bytes vignettes/data/no-replacement-long.RDS | Bin 1808 -> 1987 bytes vignettes/data/no-replacement-low.RDS | Bin 60371 -> 60688 bytes vignettes/data/no-replacement-medium.RDS | Bin 19534 -> 27336 bytes vignettes/data/replacement.RDS | Bin 55362 -> 55676 bytes vignettes/data/weighted-no-replacement.RDS | Bin 812 -> 1265 bytes vignettes/data/weighted-replacement.RDS | Bin 1207 -> 1394 bytes vignettes/sample.Rmd | 37 ++++++++++++++++----- 9 files changed, 29 insertions(+), 8 deletions(-) create mode 100644 vignettes/data/n-2.RDS diff --git a/vignettes/data/n-2.RDS b/vignettes/data/n-2.RDS new file mode 100644 index 0000000000000000000000000000000000000000..ec8e2871324d4e15f9a604c766f3fbeb05a2f46b GIT binary patch literal 75692 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

*_bAYwnh;_!X&fhY&yYNINXYEQq`*}8|ZDS9r_ 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 K{x=6f82|u-0KRDe diff --git a/vignettes/data/no-replacement-long.RDS b/vignettes/data/no-replacement-long.RDS index 02541ac87f3d779696853f9692198d4509133617..c057ce731e6b93852e1ff01242b2b020e6d0fdbc 100644 GIT binary patch literal 1987 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 diff --git a/vignettes/data/no-replacement-low.RDS b/vignettes/data/no-replacement-low.RDS index 5d5eef33beca8d52c613a8b3fb9d7246cca4ad34..7a0073cd7b4002085bd8aeccd130f0e83c492dce 100644 GIT binary patch literal 60688 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

FA%$zfo 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 M&N%wx#@0>$3$r4%KL7v# literal 60371 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 M7x11%r=36jFPhdrCIA2c diff --git a/vignettes/data/no-replacement-medium.RDS b/vignettes/data/no-replacement-medium.RDS index dee5361b34779fc58cce4ba6ab7cfd39fe00d221..3e722d0981af06feaff7267c3428b5dc72dcd3d1 100644 GIT binary patch literal 27336 zcmXVWdpr}~|NrORO;M>-DzQpY385N>RgzqnB*|ro2-TAN*j7r&EhP8NCCPP3a@#DC zOD=Pt>*g|yVH=y>w{MT%<9Gf(ug5u$b6)55d_G^#1Bl!CzyCM3uHt1r9vc41n4(%2 z;X%>(kW`P*Z&_K4EczkE7O1Zq0~Jur84y_e%H&RG3j$UOO}H-|6{b$fQP!c#I7 zrq^}2I|sCgBKtao_+6@me<8()Lo~}og^uJ8!ZIZ7anM<@IdS>8lnbhUxUh2I4Z%Rp zJH0#Gfb-T;9c?s%y(DGcB-|0EG)fiH)OcwNTH@bLRkLs2Pbw_~UF<-t@kvJjBD8fo zYDFhuQ{}t2qk{t8FNo~6Jphb9KLdX9a_#POaY@#H?#5%!AG$V@?J+7mvlRN$0sStq^K z*_bRvu#dzVY(k`Uis@faUNH~;6cq&&OJo$ijz9dy{Sfz@)$YIOuJ-{|d1aNd|IU#b zPdoo5!bZqcDM7s_*Q0GP&zxZpu$W^UzV@46EP=S$tV3Om0-ED3(jq~yf%sX2K})NJ zqX({h6+C8l^Yw~9X8pyNI)|lg%{Ew!N2;5+I>Q1Sum@Vwh}Kyq(Mk!W;}7oR@;nEI z{*t8ahzdWn-f(Y@p3k_oYQ-K6tXJ28Q@{iukF$8Nd*Cr$&^dq<XdFC)B`P*<}Ro^LnW$GrM$>wogR zpJhL*T-%0*T#O1wUtFs|{j8}u+^vCru&!-ujSmY@tkp}jPYbJPDqlynCjq2%)Wc)+ zz1Wo{_Sl)~J-@#k(mwkfh;Vy+XxF;A#A*e4y`~hoZBu(%c$NGA*N_%%V%>(FrJMyV zv;)t(@ZKuGy$aS^%6idow4pP=S|B4tX9#!RH+;Ax4f5pvyMrowIA9T7!XO}$nUh^Q=w(Jqht=Krs;j?TaX1qOGRUV4WlkIgg zB%+>=5eYC3CV)i4Q!pDCB{981BAmNo%brl;3~iT$7lu5&zX0YAAtd6ZAUL1cQ+gST zlkIJsjzT)T@UPBxzS~?+`l(SGxp)Ehhd~+L6Che_SF89J9zOrDX3%puSZa9BI~Rpt z-A(|^z3X95oKxbwgEGpiKM6?QDl04CkcD}W7}+y!+>1i_FPS01H=8n7z(9D<^JYEU ze>)0tgGlifT?NO8#G{hXo7%{J)bo*PyT>NS$%9zf!iUstep7UAz}je%n5%^oB)oBW zv2IKh%w_k@J|mC^0nRj%-pr`6BtQZ6WG$)1b6fG6!5^%*fAJfTNZ^HrS8)*78YnBj9NgaCxmC8Ll8DPr$EVfb9+A2YuA;`Ht49v< z#Tj9O=mID=_Frt{$_5`b6o%oG6kv_N+KFGIFk2kXg2guV-ElJ_>^;-#WY^`zm@-yyuY%-TQ#xR;;w#btp+ z35cSs(PY$x;^Q0(QvhlXxQ8{9p;AB)x z*IA}rdrZg+(8C-2No)1^h6^Ny^y_wa0=a6q*P)S{t7+tRKaZ|FOFx=)Qw;ao{Z-A# z)oG@F=>UIk#mXZfdY8_mq>R;4L36!$DpR2&E5Slfinyd!jZ%|`Wl4;?XVyHC4T}$-1XkNt3=l)Laq=mttO+`fm7IxtTsYk6IvP+E59KF zF5NU)J%{`8cbKyl{G0ycjw?9CdQ}Tt;4ivpD+Vv!9Io|?M1r|r1wmo?m5OOJu33RS zrN(EO*nC)kSeElG<~-qqn1wf2VRiw!&JXogbC>Ys0(-Jv$TBjT@-{u-CyhITxLgS# z?fT?WzKQMX3tHHM2kY3)!B5z)!U(rHMn5O9#ScAIhigR&35%~kEfXd7+v3#9$m`B* z7Zj(OSr*5}X`Ix|K*gdP8w;f_GfApL%$M?$Yp>&#mj&2gUSkKtB)c zhDG9oQrd#pr#W+lm!u7pQV$6uD#W$if30!}%ANQ=N?0S6Vxh!ug5*wz7rf^Ns)bih zV>jG4PZH4A9cw?`=|ky}FC#d6ElJ{DChpjM5VauIy~c$pBIWMf`4w*cp?>5ymSTqjt<8qu z)4`fn+;BpL(D8b$+_9ZR@O!{|*S%!{KQS_Z^2N1=r0u%iS8JsyMP93c3&iIkp$v5s z6&_L{p?2n}D@imJEmk7+hsU+Wp}nUnS(lcy4aGm4#pC05LmNi=H!!=oGks^-XbF0a zI8e8~87tk;s=Gax;h$NVjy>o$k<_=5S>zkytS4@I{&|`m5HVVt&2D`K_NC!xT<=QT z$Vjm8vb2w|=6nIE{5=pYNEH{6t>`ClQ~eHe80puCo{a)1<1S!RyP`yx;Qdu%V<8E0 z%M=W9d;gOJ&5T(^F_c=>x650h4x+;vrEW8A7ZQrQY^MO}`CPRcHiKKy-+`(`S#>gg z84hl9wv<;SXRSdMhZ{Gq9y&gBUo-@q*+0zP31?|9Wr|?)H>e@E98m;=hcRQ&)_KO-sSvUt%QS{AjBz62~Eg$5QuNx6~l~gieaCp zu`foiPH9uVavRU{&X-Tv5`axkt6Y?sIE+F+vQ9 zvADKR#5ph{bQz067J5Qtv+<>i(I**mvX`1j*kO**QaUmd!ehuI7cT)4?=MttQ2b8g zy2-(pX2FWeYhVobA&679;z?-2DT0~pcFgEyA^>|L51PN?GZSi15mg*Zl;Ivx71VXT zCHjU5@FhGAX?+7y9M*{1hx0EVuXs|nNmjZL>hjVpl%pzPY|jOch|S-Ng<*~#h1?DG z-UB&4W$1);imaTcRPbyR8w?O+3#7h^u1ViSi#tR=udTWmUFGafQNHl>EZ!~jTRj@J zU{TX(AGii8u9CV?j45Bq+|xvU@kc+L0j(W$qg|vl??_b^+b|Odm(bCtrD5q!>Jiq6 zJEVX`A!)nQI!LI}^ba?+jXzQv{}s78nHug9xL`?+J^3|Afap;^)*ignFUqP2lwMz1 zEYgl;MRte|6o=Z-MCr@03ntoi78aQ} zjRjv(`rZTNL0=m8)QkqX|5qPNR0;U^A$oY$6K6JtznFpT>w2vB`%ap)r) zx{w^X807jv6KnwE7&J((Bl}J`3QB1SG9-s)_u>^c3b5bUnJZtjN!M(!k}SWvGe$=e zHFztahuH#SfI*$a8L;_G`W*_Pc*)BpMSGP_O{5*~Y#jVI|0}DMIc`N*#H=jWe`UM6 zPpwLX;;hajr4N!4c_C>DyEw7(pZshpt}C4P?IIV+SxhFIT)2g_AqDIx6{jCuS>WD8 zYrmE6b;%PlxVMGX%t1i#HrVZ)wAz@uhdP^_K$a7wM!OU|vAo1Di-FKdH9{LG}Aath>@ z(Qt3o=mbH7k)sk{c%R{VN~*(H@I6MHgDltknG1=BkQ&IdE-&AY6P$tzr)l;L$hGr$ z;D**4sH=RkF%9@aU;N`Oh5KYNn4cM@Q6}eB??Oyl9p)`}L5{o-A|(1dE~J3(ytx0; zsg8DPcw-N1e5vc-TR0ps(~@r{Bc?=?A~s*iE1`b$MmwG(tNh&94cH5-@021&o8;LM z#Q!AX0x-rwthKJcws$5##As-`A-RTJp8pN~W7nK!IWq5h#-y{cX$XbQn^P}^Eea*# z$Yb)p$GfOduGI%HiTkV*A^l{jn_UrE~w$bysyhrs?|U6 zA-70^2>s~-5~B7z$}Y6M<=7sOjAC$9#=zoGDr%CGs zS;6_(jF2gJ*QA^hWVi;~1+LN0Ikv*G9>a^ayC=|Vz#KOLwn6$_v)b3~=>V#)ke z-AJ_fx#K`};DF6zNx1eoKq}^pNe@MuJl>dZ%`jFAzpY<56utFREsLS3DWd;_mx%Lo z(yB7~=p5uN0yM}alwRi`u7j?Bf5qF{dsoyKoy zG8L$!z+qnqZOh{Au>~Zu%`qa#7yE5OQNsCFw6vc9<(`W*n10tK5{lPj3FyO^-Lz7p zJI&62%MQh-DW9WNA2zgtP{9cpJ>K=^xwyBrNmSB&S}LL8p6D(UE$YO{iWU$3)mW%# zvI{(S8=cR{E(n=PdEFpwN@0t$O!8Q{r=?{tnwUA@B&kgNEMW!r2 z$=;>m$Q15S5=eU;#o%U%D3N0!WoU=iuJnD;DAgv7P-}mrWV92$Ryb11Rj?r+vKCno zP*=>k(aF&dP+4e9Bq4aUg$*>Dt6zy()7IfPLwi4@*cTSOYpx_Kz=8)k-E42Nk`_^#Q~#nM{=<~I z(?zG=YU2i%Z(nlc8WVHwOceWH*QSe)yJEERt0W&&A5EQI_~u5+D~|@z>z6GJ?*lvQ zCjQ8-*{eU>%;$dihz)2Eqy=`JFy@*kPaj1o7@2cM<M<3NL0gr7} z6JBg^>P(|eOd*bpJZQnCSs@QZNseUBsZueW} z#T;%P|E)8X{e&X{sz z%R8;(C4l}3%5XsV!Ov!Lo-2h4+KNvrJbl?M4Uw8_hpj`cINhPPbCy$ibi1sBG(5C( zvKK3!X?bq9D`4ZA_AD-v|Tk$_@9fM;xH=?>wA>Z;mc$DnHG( z6xmv^hX}ER-^f}8c$Du_7_2g7I+*%RzTypY@DVvsGI3>Q@J1xofj^W^nVTmQ%APhuqX5E3tSE6KZ$k3XpX6|-qmmMhY<=SR_ph4; z%KQ#vX6*Ee=n(j!2mFKbIuCBKWA1cY+1hawz#dTv<*`Ta@> zCRpi=`%}64=jDD~wfSkJ!8Oo+srMs_?E7uiGa=5wE$4Ro@0lVG)uf*kr~P#5b^RO2 zYUF-oSLVLUIhZboF7C7qA99E{7fiX``x1Qk$>a#Ymt>e?+Q<&qffvWJYw$yda|D+I zQ*(FMIO5laR@K>h{+JcJ_4899kn|>&t{K>SD?8LW)E{kpwhpqX$&y_PYAjm|rw;)Z zL9C>ZJ%KNWn>dNI=VG-8C$P_PTj017A<3&`P9) zK8fV0-GYV6s~pZb1Bb(6-N;3jTk1fUkle>hA+;_d+K59+U-pHDsPVsAmz>Ke3Y2hH z;xm2wRmNfQhzA@?kdk^G9 zzf2xYvEod2r3MlrzRT-zVKK+;5n#Wj&MowoSPv zntyT0B%!4qvTE?=v-X|k7?Y}rv+aHy?X! zR+=kM!Np7-H2`jgqQ`3?C0M%pXJWZ=$INp!(l~)4xcBlQsX0k}d;OuZIpc)+i1(;j zAyMf)c2&h!yQ=32;0st2R}A=w?>=_Y;4k}aJKH0L$d2^|dVCU5ZY8H|ByX892-pLs z?p?Y}*A%5N_R^6hZQkB7;MELKF#Rj@N%2V(jPpP6esPnTpw;lS;65Qgqy^G%8`-vT zDEL`zq zKO7Z6cU(oD;H_ZA63XVS8H(F$K=74KR0EGfB ze{l12P-L!~H;$)z@}IK2q1`y_-aHf==~@I^ty*s^Pnu~QnbpRY@Fq3W+}PyPCL#sg zm3h8r8)<)d)6LB*;&c3}bJ#xe|CXSjJqA0=2qXSXwChRQ!E5Scij9gQGV$=!8#pB$ zfBJvT50B98zCl%z<>3i#`n znYEy1b5|x1oJ`)en%oq?72m?s3U4gQG{%Zt{bblrWKcI*8}ztDTh}&}p1&PPly~KQ z^~wTUZx@_vhbQl5rG~4AUY0C5waRERDWJS`7Zx7qB;LijMwF--yCc*PAA_r?rveo= zMW<(mZBitV3&xaacXrIw8_ASR?mLwNSHYoV#QL4jkW*)fWoYw*>Tk1dL7m$B0NTG8 zL3vgOapuVYUW;M5Wc*y;;Fc>Naze|Zi1Cz>5~=f<;&UgL4#5&dSLn{nyNSvr^5B!& zn}IawyD5JreQ>(^DX%pZ@qOb%p?$yA*nsNcIOUbVwnk{+&!$e6`?{^>qwfL9Z+bhz z_1Jk8Rn?LY z4Vd=2&H}yjXc_!$=Er_(w!dC0v=U6Z&!5~{;O$wX1~F~df9x3SE@p0CgNhYn!)mskjmsBK{d&VzMFvF#Y$etnQs1 zSfXnC?gJFPZr`LWK3I;PiiIQ75bU*n9xy8VQ+ou(qfyPpG{H;0J zo`Y^HE-P0{*Cz5~@;V_uryGv(6-9b{h4+_#D|q5rtre-d71;ZT)u?w18B={j?Ej@p1*9kkuB5o68Ceh?5WD2# zh51L>^y9QwQ19q(#B=NI<;DYrJ||g@e{VC9#|ilgNGmy>k)kmrg?>S_e2*3v%z?Axc{33UU{-zu{{R4-hW2R9lBPNe#y<8zbp zqE!pb|LQI)MY{kCF{*iv=lC^6(=hOy>s#be3zd^eeuXISNX*($h&fv2kKM2)xJ8%@#d-46g_`+icO;FPXeK5MZ0k8w~rlof`|3o&qB;i@bb{diT#v z7-Vw?WzwVKwk0fVMjt<9(Ju8$Fi(Pp#WOx`amlSXo!YU~I2CP?U8J4c)oGu00LWI8zmlLY^jO;Oz3EO? zH-Ytt*Cq*x$l=2P1I}mSTO7skQJsw3j;@zKBfUtg`o0I2z54tgdlk`t!yq z|GN{0C=rD&UR%$>3?%tYsL(!4LMO6C%+x{_)kF#FJA6GXsgJSN7j$ub*eL>#zHx0f0Jt50G0&O=+b0uodmCcOQ48)Zx7xFS?>#i_ zp2>7pld7&~9L~RyYOC1o&^V+1jj-4Z4Re9q#(7X%C5Z2pkl39+BjuO7Dh*ucWf}uM zRC}UfuT_>`sTd_hxQFvD$RU98O$i;n#pFNXbJn=+Q>mA<)Z2KVR3Kq7g!wz-Ni2wIurRzx2S|dtr5WqG!fHSOletN;vzgr@^I^IaW*)l`cTVS&cH&q;* zbc;NxVzl^I+y8J&H1IumN~6ldY(A193m_j^ug(6vIJN6H);ZUR8r3Z)K8tGO-}0|; zc3chXc?%#OXfkGhOV8s@dGhtvs@I{{i}nN5_NJ-as<&9r8F313$=zn$^f96i^3WW0 zUB3J-!WPKx!&6%xbYX+nI|6KL5Jxf#%&x}HK&c)HdiNaTiVML{kcNVr z%FV{zsX+>qn}aoTx+y0kJP*Z^oiLUFGnHiId#Yc*9d)QBvbaM#VfV;v>n(Hs9w(3F zYR5n3PR5_rtA9S5=YzKU`BhncIs=bV=(7UuN^)Otnv-mv<%#~4)Jz_w!`w?@8KWgm z;b`*NhX!DF&?(1}Mk{g1^Mlfxm5L^M*_K$Zv{I=LxXa{5hGX}*hM^gGIP}z_UlV9E zihV2CxYIS&-fhEO&zw_C)~JUVi(gG^cGwhD6?RC~;~9B0#VhW?K+R{N&UyAO2o5DKnuz1iQ{6o_c=xvq^+w_Q|E6I4|i5JXtt7` zgZO{^33NwZ@Cm`^BZzmB;7R01Gjw!V^q(HT%n|P`V4A+vk z6`#2t3OBeb)eewN7k*Kdau(qIv+^^cQM?PmRd|IG?AtSvdQ8Wj=+lvVaJZX6-8Qcul=Br!}^C3)ItP zro`sD`&z>_He3b5Pb2-F>Rpg01G^CL&9lu@1L6I`L(w-uw|WQObwIlfYi|(~NI1u* zy^Zl!{-)(cS5n)`4>B)8nWvupOwb%zcz<7_-<(OyCB;}F4@%U|+w87V%43vFFR?n0F(yjYuTTvISR19P@=MKnz4a~!7d9I=F0M`iiQ*Ykz1b7s>O&jOd z?Nb_$fom6|I+{)Xl#G!&q)Eu~KVqLz*8Tbga}S0+rua{MRlrfHR?o!EM!zYCvv#4@ zR)?fFJMG(5us0j0Io9)fkK{YF{@m-w_>ccM)ClD-9YI<@-SLt&;27!mqvXWTok%0| z;7e^HuctLDp({>Hv1-6mGU*n3AGH>Z&B*_v=r%V6Z1?t2fS339kEiE&0zZmllNkxC zhmqAXPsA>p!r8$U#UGto;h8jaZjLQ@o^k`LK=CdHFx{y=-RyUI^pyHK;}=6d@6%^Y1h5KkSc=Z|jO zEqswsiQmm;X&+0UutE|*rV^-E&;kcA{H5&Uwj~to&5HXEF5p;5)p+cc{yM$dzb2m% zrGi5Ktg!ELifVD{`c2#Oo9d~dr_>q@#2M)}`KYmDn8A0VDZpR9(RNlbUFGo8TcYW+ zMA~W0Uq-i{D3Ow7Yf{A5nv&|7Gfzmq#L6q}U-Xv4c6xM+-mGK>Wr#+*WnEF4qEU

ZZm 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 literal 19534 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 K9ZDO-#r_Q_pz^W+ diff --git a/vignettes/data/replacement.RDS b/vignettes/data/replacement.RDS index f580b8c44fbea352c11595a5357832651d700fa6..4fabb532f203a2a8e118c4b857ddf9ede140ffeb 100644 GIT binary patch literal 55676 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%0DQ)_Cz$0R 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 L=0{sD`R%^|{_+}H literal 55362 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 A#sB~S literal 1207 zcmV;o1W5ZIiwFP!000001MOFTXd6`=e`zjhldeD5{Dq(^be1w$+*Gi`+N2EpfiOc| z$FR`snq1bfyGy*gEV(4MW%iE^q!g4{WOM7f9}2p46J!)|ElfL+&P@Z~&iE%c;bMFiTP~TG1QkzefrKui0@{?rBCpz&yYQ=oHMo@|d2Px)9Eff~hShYZ8` zYo3~`Xv6(2DhU#cCBkdGFREY)T4a{ua+InX$J|2()!{Ie-S#dSnoE$ibN)9;^BT4s z8H>$P;Xx$nsPT_9Pl|ZrA3k{}K=A#s@d<+O9C+y?f=BnBdIIDp{bK}=4>n&Sc<}e_ zK{!|22D=R<%Ei9x{5H>m!=hd%*!c<4Hp83%l8Umd~JCs+DFUY*%V zP_K7@Uhm=YAy~i2rwL}yd=Hq}={iFF*_HsDUR?`V{c(`;yazm~+4^pf+x`Im%vTj& zpQidsCtOCRes?3tmm7gU^`$}Ma-IhN^~e?)-=%Y4Pe1V;-M{e=wRbEAmy**au7f-> z^)C3kcX%Vgo^~(9o9X%dIauHF0_0V{Z$IQQn;bm{dIL$o><44ucgEL1^IU%c_|xC6 zy9oO=GL<`Kn?P@H1NC$0S+JX)(80fK%P(MGAAAJzk(;gtyP5Q1s@G($C-&309)E2g z!B<;c^d9<71CKu03x4O?pr-ukFZ$s=bE`s-PyOkqDBrpZz@PJ6h5OW11@1BXa4+@q z#XqUu(Fo)}_xxI#7bygM`ubZCZ|2%0g0ZAmVxdcs=edRwLL)*&^M%UA9Cn_C$fY>$ zb~tPaVV%vbb%~)!)Rdf9D%F%qwzpsBX_jtL*dvG=Ez%~7^cb?f3J7a(3Bj!lI#%+y zJYyw~%QBX`;fyY|;aE;rF}vjBR!~*)?P@wD#n{v>36U7jr1F@iJgN%pTgQX{!i9=I ze%!mlMcXbpg!S1!NIA5NZFse~hW~*Uy@cG@fuyL-8I|IS&Q2ETm0^z3xyjqo%~@Y~ V60hvOs|!H+zX3%Il!!hN001WiWB&jE diff --git a/vignettes/sample.Rmd b/vignettes/sample.Rmd index e81c057..1677462 100644 --- a/vignettes/sample.Rmd +++ b/vignettes/sample.Rmd @@ -168,28 +168,49 @@ knitr::kable(bm[, 1:5]) Especially for weighted sampling without replacement the performance advantage compared with R's default methods can be particularly large. +There are also specialized functions for the case `n = 2` with both weighted and un-weighted sampling: + +```{r n-2, eval=evaluate} +n <- 2 +prob <- dqrunif(n) +bm <- bench::mark(sample.int(n, size, replace = TRUE), + dqsample.int(n, size, replace = TRUE), + sample.int(n, size, replace = TRUE, prob = prob), + dqsample.int(n, size, replace = TRUE, prob = prob), + check = FALSE) +``` +```{r, echo=FALSE} +if (evaluate) { + saveRDS(bm, "data/n-2.RDS") +} else { + bm <- readRDS("data/n-2.RDS") +} +knitr::kable(bm[, 1:5]) +``` + + ## Technicalities The following methods are used for sampling without replacement. The algorithms are presented in R-like pseudo code, even though the real implementation is in C++. For sampling rates above 50%, a partial [Fisher-Yates shuffle](https://en.wikipedia.org/wiki/Fisher%E2%80%93Yates_shuffle) is used: ```{r, eval=FALSE} -no_replace_shuffle <- function(m, size) { - tmp <- seq_len(m) +no_replace_shuffle <- function(n, size) { + tmp <- seq_len(n) for (i in seq_len(size)) - swap(tmp[i], tmp[i + random_int(m-i)]) + swap(tmp[i], tmp[i + random_int(n-i)]) tmp[1:size] } ``` -where `random_int(m-i)` returns a random integer in `[0, m-i]`. Since the full population is kept in memory, this method is only suitable for high selection rates. One could expect that [reservoir sampling](https://en.wikipedia.org/wiki/Reservoir_sampling) should work well for lower selection rates. However, in my tests set based algorithms were faster: +where `random_int(n-i)` returns a random integer in `[0, n-i]`. Since the full population is kept in memory, this method is only suitable for high selection rates. One could expect that [reservoir sampling](https://en.wikipedia.org/wiki/Reservoir_sampling) should work well for lower selection rates. However, in my tests set based algorithms were faster: ```{r, eval=FALSE} -no_replace_set <- function(m, size) { +no_replace_set <- function(n, size) { result <- vector(mode = "...", length = size) # integer or numeric - elems <- new(set, m, size) # set object for storing n objects out of m possible values + elems <- new(set, n, size) # set object for storing n objects out of m possible values for (i in seq_len(size)) while (TRUE) { - v = random_int(m) + v = random_int(n) if (elems.insert(v)) { result[i] = v break @@ -199,7 +220,7 @@ no_replace_set <- function(m, size) { } ``` -Here `elems.insert(v)` returns `TRUE` if the insert was successful, i.e. `v` was not in `elems` before, and `FALSE` otherwise. There are different strategies for implementing such a set. For intermediate sampling rates (currently between 0.1% and 50%) dqrng uses a bitset, i.e. a vector of `n` bits each representing one of the possible values. For lower sampling rates the memory usage of this algorithm is to expensive, which is why a hashset^[For the specialists: Open addressing with a power-of-two size between 1.5 and 3 times `size`, identity hash function for the stored integers and quadratic probing.] is used, since there the used memory scales with `size` and not with `n`. One could expect that [Robert Floyd's sampling algorithm](https://stackoverflow.com/a/2394292/8416610) [@bentley1987] would be superior, but this was not the case in my tests, probably because it requires a final shuffling of the result to get a random _permutation_ instead of a random _combination_. +Here `elems.insert(v)` returns `TRUE` if the insert was successful, i.e. `v` was not in `elems` before, and `FALSE` otherwise. There are different strategies for implementing such a set. For intermediate sampling rates (currently between 0.1% and 50%) dqrng uses a bitset, i.e. a vector of `n` bits each representing one of the possible values. For lower sampling rates the memory usage of this algorithm is to expensive, which is why a hashset^[For the specialists: Open addressing with a power-of-two size between 1.5 and 3 times `size`, identity hash function for the stored integers and quadratic probing.] is used, since there the used memory scales with `size` and not with `n`. One could expect that [Robert Floyd's sampling algorithm](https://stackoverflow.com/a/2394292/8416610) [@bentley1987] would be superior, but this was not the case in my tests, probably because it requires a final shuffling of the result to get a random _permutation_ instead of a random _combination_.^[That is true for algorithm F2. There is also algorithm P, which would produce a random permutation, but that requires some specialized data structure.] So far only un-weighted sampling was considered. However, the some of the algorithms can be used for weighted sampling, when `random_int(n)`, which uniformly selects one of `n` elements, is replaced with a function that selects one of `n` elements based on their weights. From cd6285fcc3c0660d6cb7b7a5fd63b320caf842e4 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Fri, 13 Oct 2023 22:39:20 +0200 Subject: [PATCH 22/31] Add news and bump version --- DESCRIPTION | 2 +- NEWS.md | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/DESCRIPTION b/DESCRIPTION index 1036106..a11f45f 100644 --- a/DESCRIPTION +++ b/DESCRIPTION @@ -1,7 +1,7 @@ Package: dqrng Type: Package Title: Fast Pseudo Random Number Generators -Version: 0.3.1.5 +Version: 0.3.1.6 Authors@R: c( person("Ralf", "Stubner", email = "ralf.stubner@gmail.com", role = c("aut", "cre")), person("daqana GmbH", role = "cph"), diff --git a/NEWS.md b/NEWS.md index c5e5dbf..255427c 100644 --- a/NEWS.md +++ b/NEWS.md @@ -11,6 +11,7 @@ * Make the internal RNG accessible from the outside (Henrik Sloot fixing [#41](https://github.com/daqana/dqrng/issues/41) in [#58](https://github.com/daqana/dqrng/pull/58)) * Add Xoroshiro128\*\*/++ and Xoshiro256\*\*/++ to `xoshiro.h` * Allow uniform and normal distributions to be registered as user-supplied RNG within R. This happens automatically if the option `dqrng.register_methods` is set to `TRUE`. +* Implement weighted sampling with and without replacement. ([#72](https://github.com/daqana/dqrng/pull/72) fixing [#18](https://github.com/daqana/dqrng/issues/18), [#45](https://github.com/daqana/dqrng/issues/45) and [#52](https://github.com/daqana/dqrng/issues/52)) # dqrng 0.3.1 From f736a66e6ff7ce9324b50787cd06a3bebb563993 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Wed, 18 Oct 2023 21:03:35 +0200 Subject: [PATCH 23/31] Fix off-by-one error --- inst/include/dqrng_sample.h | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/inst/include/dqrng_sample.h b/inst/include/dqrng_sample.h index b00fc04..cad2910 100644 --- a/inst/include/dqrng_sample.h +++ b/inst/include/dqrng_sample.h @@ -166,17 +166,18 @@ inline VEC no_replacement_set(dqrng::random_64bit_generator &rng, INT n, INT siz template inline VEC no_replacement_exp(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC prob, int offset) { VEC index(n); - std::iota(index.begin(), index.end(), (offset)); + std::iota(index.begin(), index.end(), 0); FVEC weight(n); dqrng::exponential_distribution exponential; std::transform(prob.begin(), prob.end(), weight.begin(), [&rng, &exponential] (double x) {return exponential(rng) / x;}); std::partial_sort(index.begin(), index.begin() + size, index.end(), [&weight](size_t i1, size_t i2) {return weight[i1] < weight[i2];}); - if (n == size) - return index; - else - return VEC(index.begin(), index.begin() + size); + + VEC result(size); + std::transform(index.begin(), index.begin() + size, result.begin(), + [&offset] (auto x) {return x + offset;}); + return result; } // set-based rejection sampling with stochastic acceptance From d7dcac34c4447ef935429096340ce5f59c34f0c7 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Sat, 20 Jan 2024 18:57:50 +0100 Subject: [PATCH 24/31] C++11 does not allow `auto` with arguments --- inst/include/dqrng_sample.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/include/dqrng_sample.h b/inst/include/dqrng_sample.h index cad2910..f08c83d 100644 --- a/inst/include/dqrng_sample.h +++ b/inst/include/dqrng_sample.h @@ -176,7 +176,7 @@ inline VEC no_replacement_exp(dqrng::random_64bit_generator &rng, INT n, INT siz VEC result(size); std::transform(index.begin(), index.begin() + size, result.begin(), - [&offset] (auto x) {return x + offset;}); + [&offset] (INT x) {return x + offset;}); return result; } From 386558a4e202a2d8073c0640d604de552ac03ffc Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Sat, 20 Jan 2024 18:59:56 +0100 Subject: [PATCH 25/31] Changes from version 0.3.2 Recreate RcppExports.cpp with current development version of Rcpp to fix WARN on CRAN --- src/RcppExports.cpp | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/RcppExports.cpp b/src/RcppExports.cpp index 91ee9dc..e097d94 100644 --- a/src/RcppExports.cpp +++ b/src/RcppExports.cpp @@ -42,7 +42,7 @@ RcppExport SEXP _dqrng_dqset_seed(SEXP seedSEXP, SEXP streamSEXP) { if (rcpp_isError_gen) { SEXP rcpp_msgSEXP_gen = Rf_asChar(rcpp_result_gen); UNPROTECT(1); - Rf_error(CHAR(rcpp_msgSEXP_gen)); + Rf_error("%s", CHAR(rcpp_msgSEXP_gen)); } UNPROTECT(1); return rcpp_result_gen; @@ -75,7 +75,7 @@ RcppExport SEXP _dqrng_dqRNGkind(SEXP kindSEXP, SEXP normal_kindSEXP) { if (rcpp_isError_gen) { SEXP rcpp_msgSEXP_gen = Rf_asChar(rcpp_result_gen); UNPROTECT(1); - Rf_error(CHAR(rcpp_msgSEXP_gen)); + Rf_error("%s", CHAR(rcpp_msgSEXP_gen)); } UNPROTECT(1); return rcpp_result_gen; @@ -110,7 +110,7 @@ RcppExport SEXP _dqrng_dqrunif(SEXP nSEXP, SEXP minSEXP, SEXP maxSEXP) { if (rcpp_isError_gen) { SEXP rcpp_msgSEXP_gen = Rf_asChar(rcpp_result_gen); UNPROTECT(1); - Rf_error(CHAR(rcpp_msgSEXP_gen)); + Rf_error("%s", CHAR(rcpp_msgSEXP_gen)); } UNPROTECT(1); return rcpp_result_gen; @@ -144,7 +144,7 @@ RcppExport SEXP _dqrng_runif(SEXP minSEXP, SEXP maxSEXP) { if (rcpp_isError_gen) { SEXP rcpp_msgSEXP_gen = Rf_asChar(rcpp_result_gen); UNPROTECT(1); - Rf_error(CHAR(rcpp_msgSEXP_gen)); + Rf_error("%s", CHAR(rcpp_msgSEXP_gen)); } UNPROTECT(1); return rcpp_result_gen; @@ -179,7 +179,7 @@ RcppExport SEXP _dqrng_dqrnorm(SEXP nSEXP, SEXP meanSEXP, SEXP sdSEXP) { if (rcpp_isError_gen) { SEXP rcpp_msgSEXP_gen = Rf_asChar(rcpp_result_gen); UNPROTECT(1); - Rf_error(CHAR(rcpp_msgSEXP_gen)); + Rf_error("%s", CHAR(rcpp_msgSEXP_gen)); } UNPROTECT(1); return rcpp_result_gen; @@ -213,7 +213,7 @@ RcppExport SEXP _dqrng_rnorm(SEXP meanSEXP, SEXP sdSEXP) { if (rcpp_isError_gen) { SEXP rcpp_msgSEXP_gen = Rf_asChar(rcpp_result_gen); UNPROTECT(1); - Rf_error(CHAR(rcpp_msgSEXP_gen)); + Rf_error("%s", CHAR(rcpp_msgSEXP_gen)); } UNPROTECT(1); return rcpp_result_gen; @@ -247,7 +247,7 @@ RcppExport SEXP _dqrng_dqrexp(SEXP nSEXP, SEXP rateSEXP) { if (rcpp_isError_gen) { SEXP rcpp_msgSEXP_gen = Rf_asChar(rcpp_result_gen); UNPROTECT(1); - Rf_error(CHAR(rcpp_msgSEXP_gen)); + Rf_error("%s", CHAR(rcpp_msgSEXP_gen)); } UNPROTECT(1); return rcpp_result_gen; @@ -280,7 +280,7 @@ RcppExport SEXP _dqrng_rexp(SEXP rateSEXP) { if (rcpp_isError_gen) { SEXP rcpp_msgSEXP_gen = Rf_asChar(rcpp_result_gen); UNPROTECT(1); - Rf_error(CHAR(rcpp_msgSEXP_gen)); + Rf_error("%s", CHAR(rcpp_msgSEXP_gen)); } UNPROTECT(1); return rcpp_result_gen; @@ -312,7 +312,7 @@ RcppExport SEXP _dqrng_get_rng() { if (rcpp_isError_gen) { SEXP rcpp_msgSEXP_gen = Rf_asChar(rcpp_result_gen); UNPROTECT(1); - Rf_error(CHAR(rcpp_msgSEXP_gen)); + Rf_error("%s", CHAR(rcpp_msgSEXP_gen)); } UNPROTECT(1); return rcpp_result_gen; @@ -345,7 +345,7 @@ RcppExport SEXP _dqrng_dqrrademacher(SEXP nSEXP) { if (rcpp_isError_gen) { SEXP rcpp_msgSEXP_gen = Rf_asChar(rcpp_result_gen); UNPROTECT(1); - Rf_error(CHAR(rcpp_msgSEXP_gen)); + Rf_error("%s", CHAR(rcpp_msgSEXP_gen)); } UNPROTECT(1); return rcpp_result_gen; @@ -382,7 +382,7 @@ RcppExport SEXP _dqrng_dqsample_int(SEXP nSEXP, SEXP sizeSEXP, SEXP replaceSEXP, if (rcpp_isError_gen) { SEXP rcpp_msgSEXP_gen = Rf_asChar(rcpp_result_gen); UNPROTECT(1); - Rf_error(CHAR(rcpp_msgSEXP_gen)); + Rf_error("%s", CHAR(rcpp_msgSEXP_gen)); } UNPROTECT(1); return rcpp_result_gen; @@ -419,7 +419,7 @@ RcppExport SEXP _dqrng_dqsample_num(SEXP nSEXP, SEXP sizeSEXP, SEXP replaceSEXP, if (rcpp_isError_gen) { SEXP rcpp_msgSEXP_gen = Rf_asChar(rcpp_result_gen); UNPROTECT(1); - Rf_error(CHAR(rcpp_msgSEXP_gen)); + Rf_error("%s", CHAR(rcpp_msgSEXP_gen)); } UNPROTECT(1); return rcpp_result_gen; From 499ab57812e9839ac4a0c369e3ffdafac944b2d7 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Sat, 13 Apr 2024 21:08:14 +0200 Subject: [PATCH 26/31] Compare the two weights directly for n=2 --- inst/include/dqrng_sample.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/inst/include/dqrng_sample.h b/inst/include/dqrng_sample.h index f08c83d..13ed421 100644 --- a/inst/include/dqrng_sample.h +++ b/inst/include/dqrng_sample.h @@ -55,7 +55,7 @@ inline VEC biased_coin(dqrng::random_64bit_generator &rng, INT n, INT size, FVEC // smaller probability scaled by 2^64 in order to compare directly with RNG output uint64_t p; - if (prob[0] < 0.5) + if (prob[0] <= prob[1]) p = 0x1p64 * prob[0] / (prob[0] + prob[1]); else { p = 0x1p64 * prob[1] / (prob[0] + prob[1]); From d489a1bbd83293e4338b47343df0ec81e11cbfca Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Mon, 22 Apr 2024 21:20:20 +0200 Subject: [PATCH 27/31] Update sampling code to not use deprected dqrng::uniform01() --- inst/include/dqrng_sample.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/inst/include/dqrng_sample.h b/inst/include/dqrng_sample.h index 13ed421..169a5b9 100644 --- a/inst/include/dqrng_sample.h +++ b/inst/include/dqrng_sample.h @@ -76,7 +76,7 @@ inline VEC replacement_prob(dqrng::random_64bit_generator &rng, INT n, INT size, [&n, &prob, &max_prob, &rng, &offset] () { while (true) { INT index = rng(n); - if (dqrng::uniform01(rng()) < prob[index] / max_prob) + if (rng.uniform01() < prob[index] / max_prob) return index + offset; } }); @@ -126,7 +126,7 @@ inline VEC replacement_alias(dqrng::random_64bit_generator &rng, INT n, INT size std::generate(result.begin(), result.end(), [&n, &prob_alias, &rng, &offset] () { INT index = rng(n); - return (dqrng::uniform01(rng()) < prob_alias[index].first) ? + return (rng.uniform01() < prob_alias[index].first) ? index + offset : prob_alias[index].second + offset; }); @@ -191,7 +191,7 @@ inline VEC no_replacement_prob_set(dqrng::random_64bit_generator &rng, INT n, IN do { do { v = rng(n); - } while (dqrng::uniform01(rng()) >= prob[v] / max_prob); + } while (rng.uniform01() >= prob[v] / max_prob); } while (!elems.insert(v)); result[i] = (offset + v); } @@ -208,7 +208,7 @@ inline VEC no_replacement_alias_set(dqrng::random_64bit_generator &rng, INT n, I INT v; do { INT index = rng(n); - v = (dqrng::uniform01(rng()) < prob_alias[index].first) ? + v = (rng.uniform01() < prob_alias[index].first) ? index : prob_alias[index].second; } while (!elems.insert(v)); result[i] = (offset + v); From 557bf066e7f5f9d91478d334324256ed70cd9b9f Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Mon, 22 Apr 2024 21:50:06 +0200 Subject: [PATCH 28/31] Get closer to original touchstone config --- touchstone/config.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/touchstone/config.json b/touchstone/config.json index 9fef4fe..749efbf 100644 --- a/touchstone/config.json +++ b/touchstone/config.json @@ -1,7 +1,7 @@ { - "os": "ubuntu-22.04", - "r": "4.3.1", - "rspm": "https://packagemanager.rstudio.com/all/__linux__/jammy/latest", + "os": "ubuntu-latest", + "r": "4.3", + "rspm": "https://packagemanager.rstudio.com/all/__linux__/focal/2024-03-01", // "benchmarking_repo": "lorenzwalthert/here", // "benchmarking_ref": "ca9c8e69c727def88d8ba1c8b85b0e0bcea87b3f", "benchmarking_path": "touchstone/sources/here", From 74ef89a5c959cc5327095aeaf19ab99e19647fb9 Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Mon, 22 Apr 2024 22:03:31 +0200 Subject: [PATCH 29/31] Use GHA files from styler package --- .github/workflows/touchstone-comment.yaml | 7 +++--- .github/workflows/touchstone-receive.yaml | 28 ++++++++++++----------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/.github/workflows/touchstone-comment.yaml b/.github/workflows/touchstone-comment.yaml index aa3d40d..c3b8eea 100644 --- a/.github/workflows/touchstone-comment.yaml +++ b/.github/workflows/touchstone-comment.yaml @@ -14,8 +14,9 @@ jobs: upload: runs-on: ubuntu-latest if: > - ${{ github.event.workflow_run.event == 'pull_request' }} + ${{ github.event.workflow_run.event == 'pull_request' && + github.event.workflow_run.conclusion == 'success' }} steps: - - uses: lorenzwalthert/touchstone/actions/comment@v1 - with: + - uses: lorenzwalthert/touchstone/actions/comment@main + with: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} diff --git a/.github/workflows/touchstone-receive.yaml b/.github/workflows/touchstone-receive.yaml index e1ff739..3613687 100644 --- a/.github/workflows/touchstone-receive.yaml +++ b/.github/workflows/touchstone-receive.yaml @@ -4,24 +4,27 @@ concurrency: group: ${{ github.workflow }}-${{ github.head_ref }} cancel-in-progress: true -on: +on: pull_request: + paths: + # Directories with source code and benchmarking code + - "inst/**" + - "R/**" + - "src/**" + - "touchstone/**" + # Benchmarking config file + - ".github/workflows/touchstone-*.yaml" + # Package metadata + - DESCRIPTION jobs: prepare: - runs-on: ubuntu-latest - if: - true && - ( - github.event.comment.author_association == 'OWNER' || - github.event.comment.author_association == 'MEMBER' || - github.event.comment.author_association == 'COLLABORATOR' - ) + runs-on: ubuntu-latest outputs: config: ${{ steps.read_touchstone_config.outputs.config }} steps: - name: Checkout repo - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 @@ -47,10 +50,9 @@ jobs: RSPM: ${{ matrix.config.rspm }} GITHUB_PAT: ${{ secrets.GITHUB_TOKEN }} steps: - - uses: lorenzwalthert/touchstone/actions/receive@v1 + - uses: lorenzwalthert/touchstone/actions/receive@main with: cache-version: 1 benchmarking_repo: ${{ matrix.config.benchmarking_repo }} benchmarking_ref: ${{ matrix.config.benchmarking_ref }} - benchmarking_path: ${{ matrix.config.benchmarking_path }} - force_upstream: true + benchmarking_path: ${{ matrix.config.benchmarking_path }} From 482687a115f8b238c1ea93ef1633203ae41d406c Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Tue, 23 Apr 2024 18:59:56 +0200 Subject: [PATCH 30/31] Update performance testing --- touchstone/config.json | 5 +---- touchstone/script.R | 6 +++--- 2 files changed, 4 insertions(+), 7 deletions(-) diff --git a/touchstone/config.json b/touchstone/config.json index 749efbf..30b5b05 100644 --- a/touchstone/config.json +++ b/touchstone/config.json @@ -1,8 +1,5 @@ { "os": "ubuntu-latest", "r": "4.3", - "rspm": "https://packagemanager.rstudio.com/all/__linux__/focal/2024-03-01", - // "benchmarking_repo": "lorenzwalthert/here", - // "benchmarking_ref": "ca9c8e69c727def88d8ba1c8b85b0e0bcea87b3f", - "benchmarking_path": "touchstone/sources/here", + "rspm": "https://packagemanager.rstudio.com/all/__linux__/jammy/latest" } diff --git a/touchstone/script.R b/touchstone/script.R index 3523db1..21975c3 100644 --- a/touchstone/script.R +++ b/touchstone/script.R @@ -11,21 +11,21 @@ touchstone::branch_install() # benchmark a function call from your package (two calls per branch) touchstone::benchmark_run( # expr_before_benchmark = source("dir/data.R"), #<-- TODO OTPIONAL setup before benchmark - runif_test = dqrng::dqrunif(1e6), #<- TODO put the call you want to benchmark here + runif_test = dqrng::dqrunif(1e7), #<- TODO put the call you want to benchmark here n = 10 ) # benchmark a function call from your package (two calls per branch) touchstone::benchmark_run( # expr_before_benchmark = source("dir/data.R"), #<-- TODO OTPIONAL setup before benchmark - rnorm_test = dqrng::dqrnorm(1e6), #<- TODO put the call you want to benchmark here + rnorm_test = dqrng::dqrnorm(1e7), #<- TODO put the call you want to benchmark here n = 10 ) # benchmark a function call from your package (two calls per branch) touchstone::benchmark_run( # expr_before_benchmark = source("dir/data.R"), #<-- TODO OTPIONAL setup before benchmark - rexp_test = dqrng::dqrexp(1e6), #<- TODO put the call you want to benchmark here + rexp_test = dqrng::dqrexp(1e7), #<- TODO put the call you want to benchmark here n = 10 ) From 60cb41440f13c7d514cbd4a422dd963c02581a3a Mon Sep 17 00:00:00 2001 From: Ralf Stubner Date: Sat, 27 Apr 2024 21:30:50 +0200 Subject: [PATCH 31/31] Add tests with uneven weight distribution --- inst/include/dqrng_sample.h | 2 +- tests/testthat/test-sample.R | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/inst/include/dqrng_sample.h b/inst/include/dqrng_sample.h index 169a5b9..06fb29a 100644 --- a/inst/include/dqrng_sample.h +++ b/inst/include/dqrng_sample.h @@ -1,5 +1,5 @@ // Copyright 2018-2019 Ralf Stubner (daqana GmbH) -// Copyright 2022-2023 Ralf Stubner +// Copyright 2022-2024 Ralf Stubner // // This file is part of dqrng. // diff --git a/tests/testthat/test-sample.R b/tests/testthat/test-sample.R index bc09e80..de52d6b 100644 --- a/tests/testthat/test-sample.R +++ b/tests/testthat/test-sample.R @@ -172,6 +172,10 @@ test_that("dqsample_int w/o replacement and w/ weights works with high rate", { expect_equal(length(result), k) expect_equal(length(unique(result)), k) expect_true(all(result >= 1) && all(result <= n)) + result <- dqsample(n, k, replace = FALSE, prob = c(dqrunif(n-1), 2)) + expect_equal(length(result), k) + expect_equal(length(unique(result)), k) + expect_true(all(result >= 1) && all(result <= n)) }) test_that("dqsample_int w/o replacement and w/ weights works with medium rate", { @@ -182,6 +186,10 @@ test_that("dqsample_int w/o replacement and w/ weights works with medium rate", expect_equal(length(result), k) expect_equal(length(unique(result)), k) expect_true(all(result >= 1) && all(result <= n)) + result <- dqsample(n, k, replace = FALSE, prob = c(dqrunif(n-1), 2)) + expect_equal(length(result), k) + expect_equal(length(unique(result)), k) + expect_true(all(result >= 1) && all(result <= n)) }) test_that("dqsample_int w/o replacement and w/ weights works with low rate", { @@ -192,6 +200,10 @@ test_that("dqsample_int w/o replacement and w/ weights works with low rate", { expect_equal(length(result), k) expect_equal(length(unique(result)), k) expect_true(all(result >= 1) && all(result <= n)) + result <- dqsample(n, k, replace = FALSE, prob = c(dqrunif(n-1), 2)) + expect_equal(length(result), k) + expect_equal(length(unique(result)), k) + expect_true(all(result >= 1) && all(result <= n)) }) test_that("dqsample_num w/ replacement and w/ weights works", { @@ -204,6 +216,10 @@ test_that("dqsample_num w/ replacement and w/ weights works", { expect_equal(length(result), k) expect_lte(length(unique(result)), k) expect_true(all(result >= 1) && all(result <= n)) + result <- dqrng:::dqsample_num(n, k, replace = TRUE, prob = c(dqrunif(n-1), 2), offset = 1L) + expect_equal(length(result), k) + expect_lte(length(unique(result)), k) + expect_true(all(result >= 1) && all(result <= n)) }) test_that("error cases", {