使用 R 中的线性规划为参赛作品分配评委

Assigning judges to entries using linear programming in R

提问人:Hi_Viz 提问时间:11/17/2023 更新时间:11/17/2023 访问量:43

问:

我想指派 4 名评委对 15 个参赛作品进行评分,以便:

  1. 每个参赛作品都由2名评委打分;
  2. 每位评委的参赛作品数量相等(或接近相等,因为参赛作品的数量不能被评委人数整除——在这种情况下,2 名法官应有 7 名,2 名法官应有 8 名);和
  3. 对于所有法官组合,任何 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 约束 lpsolve

评论


答: 暂无答案