# Random Number Generators
library(randtoolbox)
library(lhs)

# Graphics
library(plotly)
library(ggplot2)
library(ggthemes)
library(dplyr)


Quasi Random {randtoolbox}

# Generate three sets of Quasi random numbers
n_samp <- 25
set.seed(1234)
d_torus <- data.frame(algo = "Torus", torus(n_samp, dim = 3))
d_halton <- data.frame(algo = "Halton", halton(n_samp, dim = 3))
d_sobol <- data.frame(algo = "Sobol", sobol(n_samp, dim = 3))

# Combine
d_all <- rbind(d_torus, d_halton, d_sobol)
colnames(d_all) <- c("algo", "x", "y", "z")

# Plotly
pal <- tableau_color_pal(palette = "tableau10")(10)[3]
p <- plot_ly(d_all, x = x, y = y, z = z, group = algo,
        type = "scatter3d", mode = "markers", colors = pal) %>%
  layout(title = "Comparison of Quasi Random Number Generators")
p


Latin Hypercube Sampling {lhs}

# Generate five sets of LHS
n_samp <- 25
set.seed(1234)
d_ga <- data.frame(algo = "Genetic", geneticLHS(n = n_samp, k = 3))
d_imp <- data.frame(algo = "Improved", improvedLHS(n = n_samp, k = 3))
d_maxmin <- data.frame(algo = "Maxmin", maximinLHS(n = n_samp, k = 3))
d_opt <- data.frame(algo = "Optimum", optimumLHS(n = n_samp, k = 3))
d_rand <- data.frame(algo = "Random", randomLHS(n = n_samp, k = 3))

# Combine
d_all <- rbind(d_ga, d_imp, d_maxmin, d_opt, d_rand)
colnames(d_all) <- c("algo", "x", "y", "z")

# Plotly
pal <- tableau_color_pal(palette = "tableau10")(10)[5]
p <- plot_ly(d_all, x = x, y = y, z = z, group = algo,
        type = "scatter3d", mode = "markers", colors = pal) %>%
  layout(title = "Latin Hypercube Sampling")
p