suppressPackageStartupMessages(library(dplyr))
# Data generator for 2-dim anticor data
gen_data <- function(N, cor, dim = 2) {
rndvals <- matrix(runif(dim * N), N, dim)
corvals <- matrix(runif(dim * N), N, dim)
if (cor >= 0) {
corvals[,2:dim] <- corvals[,1]
} else {
corvals <- -log(corvals)
corvals <- corvals / rowSums(corvals)
}
data <- as.data.frame((1 - abs(cor)) * rndvals + abs(cor) * corvals)
names(data) <- paste0('x', 1:dim)
return(data)
}
# Run all tests for parallel AND for non-parallel mode
for (parallelity in c(FALSE, TRUE)) {
options(rPref.parallel = parallelity)
# Run all tests for pareto and intersection
for (`%op%` in list(`*`, `|`)) { # `%op%` = `|`
test_that("Compare BNL and Scalagon", {
# 2-dim anticorrelated set with some outliers
df2 <- rbind(gen_data(1E6, -0.7, 2), data.frame(x1 = c(0,0,1,10,10), x2 = c(1,10,10,1,10)))
# 2-dim grouped set
df2g <- cbind(df2, data.frame(y = c(rep(1:20, 5E4), 1:5)))
# 3-dim anticor set
df3 <- gen_data(1E6, -0.6, 3)
# Ignore different sorting (this is ok)
# Deactivate Scalagon by setting alpha = 0
# * Compare usual preference selection
options(rPref.scalagon.alpha = 0)
set1 <- sort(psel.indices(df2, low(x1) %op% low(x2)))
set2 <- sort(psel.indices(df2g, low(x1) %op% low(x2)))
set3 <- sort(psel.indices(df3, low(x1) %op% (true(x2 < 0.5) * low(x3))))
options(rPref.scalagon.alpha = 10)
expect_equal(sort(psel.indices(df2, low(x1) %op% low(x2))), set1)
expect_equal(sort(psel.indices(df2g, low(x1) %op% low(x2))), set2)
expect_equal(sort(psel.indices(df3, low(x1) %op% (true(x2 < 0.5) * low(x3)))), set3)
# * Compare top-k preference selection
# Compare tuple indices AND level values
options(rPref.scalagon.alpha = 0)
set1 <- arrange(psel.indices(df2, low(x1) %op% low(x2), at_least = 500, show_level = TRUE), .indices)
set2 <- arrange(psel.indices(df2g, high(x1) %op% low(x2), at_least = 20, show_level = TRUE), .indices)
set3 <- arrange(psel.indices(df3, high(x1) %op% (true(x2 < 0.5) * low(x3)), top_level = 2, show_level = TRUE), .indices)
options(rPref.scalagon.alpha = 10)
expect_equal(arrange(psel.indices(df2, low(x1) %op% low(x2), at_least = 500, show_level = TRUE), .indices), set1)
expect_equal(arrange(psel.indices(df2g, high(x1) %op% low(x2), at_least = 20, show_level = TRUE), .indices), set2)
expect_equal(arrange(psel.indices(df3, high(x1) %op% (true(x2 < 0.5) * low(x3)), top_level = 2, show_level = TRUE), .indices), set3)
})
}
}
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.