提问人:Hi_Viz 提问时间:11/17/2023 更新时间:11/17/2023 访问量:43
使用 R 中的线性规划为参赛作品分配评委
Assigning judges to entries using linear programming in R
问:
我想指派 4 名评委对 15 个参赛作品进行评分,以便:
- 每个参赛作品都由2名评委打分;
- 每位评委的参赛作品数量相等(或接近相等,因为参赛作品的数量不能被评委人数整除——在这种情况下,2 名法官应有 7 名,2 名法官应有 8 名);和
- 对于所有法官组合,任何 2 名法官共享的参赛人数相等(或接近相等 - 在这种情况下,每对独特的法官之间应有 2 或 3 个案件)
使用这个问题中提供的答案 将元素重复分配给有限数量的组,我能够使用 lpSolve 以满足条件 1 和 2 的方式分配条目。但正如你所看到的,它不满足标准3,例如,评委S+J一起标记4个条目,而评委S+T标记2。
如何将此标准作为进一步的约束添加到代码中?
library(lpSolve)
set.seed(144)
N <- c('T','E','S','J')
M <- 1:15
vars <- expand.grid(i=M, j=N)
mod <- lp(direction = "max",
objective.in = rnorm(nrow(vars)),
const.mat = rbind(t(sapply(M, function(i) as.numeric(vars$i == i))),
t(sapply(N, function(j) as.numeric(vars$j == j)))),
const.dir = rep(c("=", "<="), c(length(M), length(N))),
const.rhs = rep(c(2, 8), c(length(M), length(N))),
all.bin = TRUE)
# Extract all cases assigned to each judge
sapply(N, function(j) vars$i[mod$solution > 0.999 & vars$j == j])
$T
[1] 2 9 10 11 12 13 15
$E
[1] 5 7 8 9 11 12 14 15
$S
[1] 1 3 4 5 6 10 13 14
$J
[1] 1 2 3 4 6 7 8
答: 暂无答案
上一个:R 中频率表中的四舍五入
下一个:基于命名向量填充数据框列
评论