答案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
按钮,您的问题将得到优化,如果找到了优化问题的解决方案,您将收到通知: