我们有一定数量,例如 300 个单位。该数量应尽可能均匀地分布在 40 个“槽”或“箱”上。如果每个插槽都相同,那将很容易-因此每个插槽将是 7,5。但是,插槽的大小各不相同,我们不能“填充”超过其“大小”允许的范围,例如如果它只有 4 个。我们不能“填充”超过 4 个。因此,我们必须在另一个上分配更多那些。
让我们假设还有另一个限制:一般填充限制例如 5。这意味着即使我们在插槽中有足够的大小来填充比如 12 并且剩余的单元足够多比如 11,我们也只能填充 5。填充所有插槽后超出的值应放置在单独的剩余插槽中。在每个填充过程中,我们还应该得到一个数字,即使用了多少百分比的最大填充容量。即如果我们填写 4 和 5 是一般的填写限制。我们使用了 80%。
我们之前已经在另一个问题中讨论过这个问题: 尽可能均匀地分配数量
我有一些想法如何进一步发展这个公式,但部分它仍然卡住。谢谢你的帮助!
# developing slots and their "size"
a <- rnorm(40,10,4)
sum(a)
# overall sum to distribute
b <- 300
# general filling in limit
c <- 8
optimal.fill <- function(a, b)
{
stopifnot(sum(a) >= b)
d <- rep(0, length(a))
info <- rep(0, length(a))
while(b > 0) {
has.room <- a > 0
num.slots <- sum(has.room)
min.size <- min(a[has.room])
add.size <- min(b / num.slots, min.size)
#maximum limitation
add.size[add.size>c] <- c
#percentage info
info[has.room] <- add.size/c
d[has.room] <- d[has.room] + add.size
a[has.room] <- a[has.room] - add.size
b <- b - num.slots * add.size
}
return(d)
}
optimal.fill(a,b)