Let’s confirm that par is better than seq with a well-undestood example:
weights <- c(2, 3, 7)
proba <- c(0.4, 0.15, 0.45)
B <- 6 # max budget
p1 <- proba[1]
p2 <- proba[2]
near(3 * p1, DP_par(weights, proba, B, 1))
## [1] TRUE
near(-p1^3 + 2 * p1^2 + 2 * p1 - 2 * p1 * p2 + 2 * p2,
DP_par(weights, proba, B))
## [1] TRUE
There exists a smaller example for this case:
weights <- c(1, 2, 4)
proba <- c(0.35, 0.45, 0.2)
B <- 5
DP_par(weights, proba, B, 1)
## [1] 2.338458
DP_par(weights, proba, B)
## [1] 2.343883
Now, to show that preempt is sometimes better than par:
# weights <- c(1, 2, 3, 8)
# proba <- c(0.05, 0.35, 0.15, 0.45)
# B <- 7
# DP_par(weights, proba, B)
# DP_preempt(weights, proba, B)
And with a smaller example:
weights <- c(1, 2, 3, 5)
# proba <- c(0.13, 0.62, 0.14, 0.11)
proba <- c(0.15, 0.6, 0.15, 0.1)
B <- 6
DP_par(weights, proba, B)
## [1] 2.437181
DP_preempt(weights, proba, B)
## [1] 2.449681
OK, we have our hierarchy!
## R version 3.4.4 (2018-03-15)
## Platform: x86_64-pc-linux-gnu (64-bit)
## Running under: Ubuntu 16.04.4 LTS
##
## Matrix products: default
## BLAS: /usr/lib/openblas-base/libblas.so.3
## LAPACK: /usr/lib/libopenblasp-r0.2.18.so
##
## locale:
## [1] LC_CTYPE=fr_FR.UTF-8 LC_NUMERIC=C
## [3] LC_TIME=fr_FR.UTF-8 LC_COLLATE=fr_FR.UTF-8
## [5] LC_MONETARY=fr_FR.UTF-8 LC_MESSAGES=fr_FR.UTF-8
## [7] LC_PAPER=fr_FR.UTF-8 LC_NAME=C
## [9] LC_ADDRESS=C LC_TELEPHONE=C
## [11] LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C
##
## attached base packages:
## [1] stats graphics grDevices utils datasets methods base
##
## other attached packages:
## [1] forcats_0.3.0 stringr_1.3.0 dplyr_0.7.4 purrr_0.2.4
## [5] readr_1.1.1 tidyr_0.8.0 tibble_1.4.2 ggplot2_2.2.1
## [9] tidyverse_1.2.1
##
## loaded via a namespace (and not attached):
## [1] Rcpp_0.12.16 cellranger_1.1.0 pillar_1.2.1 compiler_3.4.4
## [5] plyr_1.8.4 bindr_0.1.1 tools_3.4.4 digest_0.6.15
## [9] lubridate_1.7.3 jsonlite_1.5 evaluate_0.10.1 nlme_3.1-137
## [13] gtable_0.2.0 lattice_0.20-35 pkgconfig_2.0.1 rlang_0.2.0
## [17] psych_1.7.8 cli_1.0.0 rstudioapi_0.7 yaml_2.1.18
## [21] parallel_3.4.4 haven_1.1.1 bindrcpp_0.2 xml2_1.2.0
## [25] httr_1.3.1 knitr_1.20 hms_0.4.2 rprojroot_1.3-2
## [29] grid_3.4.4 glue_1.2.0 R6_2.2.2 readxl_1.0.0
## [33] foreign_0.8-69 rmarkdown_1.9 modelr_0.1.1 reshape2_1.4.3
## [37] magrittr_1.5 backports_1.1.2 scales_0.5.0 htmltools_0.3.6
## [41] rvest_0.3.2 assertthat_0.2.0 mnormt_1.5-5 colorspace_1.3-2
## [45] stringi_1.1.7 lazyeval_0.2.1 munsell_0.4.3 broom_0.4.3
## [49] crayon_1.3.4