问题描述
我需要“优化”垃圾箱包装方面的帮助,以获得更多样的垃圾箱(但大小仍然相同)。
我将在下面解释:
通常,我根据此处的有用帖子使用 BBmisc::binPack 函数解决分箱问题:R sampling into groups of specific size based on count data
library(BBmisc)
library(dplyr)
set.seed(123)
df <- data.frame(
ID = as.numeric(1:100),Count = as.numeric(sample(1:11,size = 100,replace = T)))
binned <- df %>%
as_tibble() %>%
mutate(bin = binPack(Count,20),bin_size = ave(Count,bin,FUN = sum)) %>%
arrange(bin)
但是,我对算法创建 bin 的方式并不满意,它似乎是从最大的 Count 数到最小的 Count 数按顺序进行的,因此我在前几个垃圾箱(头部),然后是底部(尾部)的 3/3/3/3/3/3/2 选项等。
head(binned,10)
# A tibble: 10 x 4
ID Count bin bin_size
<dbl> <dbl> <int> <dbl>
1 1 9 1 20
2 35 11 1 20
3 4 9 2 20
4 41 11 2 20
5 5 9 3 20
6 48 11 3 20
7 9 9 4 20
8 69 11 4 20
9 51 9 5 20
10 78 11 5 20
> tail(binned,18)
# A tibble: 18 x 4
ID Count bin bin_size
<dbl> <dbl> <int> <dbl>
1 10 3 31 20
2 12 3 31 20
3 57 2 31 20
4 74 4 31 20
5 79 4 31 20
6 91 4 31 20
7 19 3 32 20
8 29 3 32 20
9 31 3 32 20
10 50 3 32 20
11 58 3 32 20
12 72 3 32 20
13 85 2 32 20
14 33 1 33 6
15 63 1 33 6
16 76 1 33 6
17 94 1 33 6
18 100 2 33 6
在我看来,算法正在遍历选项,然后在它看到满足条件的地方获取第一行/ID;例如。 9/11 组合由行 ID 1,35 满足,然后再次满足 ID 4,41 等。
我想知道是否可以随机化这个选择来制作看起来更像 6/11/3 或 8/3/4/5 的箱子。
任何帮助将不胜感激。目前我正在 Excel 中手动在 bin 之间重新定位,这很痛苦,而且远远不能令人满意。
我查看了多个用于装箱的包(gbp、adagio、knapsack、nilde、partitions),但没有找到解决方案。
任何帮助将不胜感激!
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)