微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

R:装箱时如何增加箱内的多样性?最小箱数,每个箱容量相同,单一约束一维

如何解决R:装箱时如何增加箱内的多样性?最小箱数,每个箱容量相同,单一约束一维

我需要“优化”垃圾箱包装方面的帮助,以获得更多样的垃圾箱(但大小仍然相同)。

我将在下面解释:

通常,我根据此处的有用帖子使用 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 举报,一经查实,本站将立刻删除。