Excel:根据表中的选择创建随机项目组(独家和详尽组)

Excel:根据表中的选择创建随机项目组(独家和详尽组)

我有一张表,其中一列是名称,其他列是布尔日期选择。

以下是数据可能呈现的图像。


您可以假设:

  • 每个名字和日期都是独一无二的
  • 每个姓名至少有一个日期选择

我正在尝试从该表中创建随机组,例如:

  1. 每个小组都有指定的日期和明确的成员姓名列表
  2. 组大小受最小值和最大值限制
  3. 每个名字都只属于一个组
  4. 如果可能的话,分配给各组的日期不要重叠

对于上述数据(见图),大小为 2-3 的有效组的一个示例是:

  • A 组 - 星期二:Alice、Bob
  • B 组 - 星期三:Charlie、Frank
  • C 组 - 星期四:德斯汀、埃里克

任何帮助都值得感激,我甚至不知道从哪里开始解决这个问题。

答案1

最后,这是一个优化问题,似乎也与著名的“背包问题”有些关联。您可以尝试解决此问题,例如,使用Excel Solver下面概述的方法。可能还有其他选项,但 Solver 对于此类问题相对方便。

首先,稍微调整一下数据条目,将 x 设置为 1,并将空单元格设置为适当的高值(惩罚),例如 999。然后您的数据将如下所示:

数据输入

下一步,您需要创建第二个数组来指定可变变量单元格。换句话说,您需要创建一个数组来优化映射,因为您希望将每个人分配到特定的组。这个数组看起来类似于您最初的姓名数组,我假设您的天数(=5)反映了 5 个不同的组。根据您的问题,您可能需要更改这一点。您还需要添加一个总行,仅反映每个组的总和,以及一个分配列,指示一个人是否已被分配到某个组。由于这是一个优化问题,您需要一个要优化的目标,在这种情况下,它只是映射数组和输入数据的最小和乘积(您可能需要将公式中的 ; 更改为 ,)。这是可行的,因为您将映射数组限制为二进制数(请参阅下面设置求解器的上下文),其中 1 表示您在特定组中被选中,而 0 表示您未被选中。然后将选择(即映射数组)乘以您的输入数组,如果您在与您的偏好不匹配的组中被选中,则会受到很大的惩罚:

需要优化的数组

下一步,您必须设置求解器本身。为此,请转到选项卡Data-> Solver。您的目标是最小化单元格 中的和积$P$2。您的可变变量单元格位于 范围内I2:M7,您需要通过按钮 添加以下三个约束Add求解器参数

1:你的范围I2:M7只能取二进制值(Cell Reference: $I$2:$M$7 bin Constraint: binary),

2:每个组至少要有一个人(Cell Reference: $I$8:$M$8 >= Constraint: 1)。目前,我还没有限制每个组的最大人数,但你可以轻松添加此限制,

3:每个人恰好属于一个组(Cell Reference: $N$2:$N$7 = Constraint: 1)。

一切设置完成后,您可以点击Solve按钮,您的问题将得到优化,如果找到了优化问题的解决方案,您将收到通知:

求解器结果

相关内容