1

我正在尝试解决以下与分发相关的问题-

我有一个按重要性排序的项目列表 L (I1, I2,....In),I1 是最重要的。每个项目都有多个标签分配给它,每个项目上这些标签的组合可能不同,因此 I1 可能有标签 T1 和 T2,I2 可以有标签 t2、t3 和 t4,而 I3 可以有标签 T1,依此类推.

现在,我必须从这个列表 L 中进行批处理,项目的分布(根据标签)受以下约束 -

  1. 每个批次都有一个固定的大小 B
  2. 每个标签在批次分布中都有一系列项目,范围从最小值到最大值。因此,B 应该包含最少 x1 个带有标签 t1 的项目,x2 个带有标签 t2 的项目,以及最多 y1 个 t1 项目,y2 个 t2 项目,依此类推。
  3. 我们从 L 的顶部开始挑选项目并继续填充批次,直到达到满足约束的最终分布。例如,如果 L 有 300 个项目,并且我们必须将批次大小设为 50,我们可以一直到列表中的任意数量的项目,然后选择项目以进行所需的分布。
  4. 请记住,如果从列表中选择一个项目,分配给它的所有标签的计数都会增加 1。

我正在考虑一个解决方案,首先,我列出与每个特定标签对应的项目列表。我从其列表中为特定标签选择最少的所需项目。所以,我会从带有标签 t1 的项目列表中选择带有标签 t1 的 x1 个项目,而不管这些项目是否包含任何其他标签。这样,我将确保满足所有标签的“最低”标准。但对于最大部分,每个标签肯定会过火。如何递归地用 L 中的剩余项目替换批次中的项目以进行最终所需的分配?

任何其他解决方案都会很棒。或者任何可以让我找到解决这个问题的正确方向的现有算法。

我知道这个问题有点罗嗦,可能有点令人困惑,但我已经尽力解释了它,当然,我想这个问题可能很有趣。

4

1 回答 1

0

这是一个 NP-hard 问题。例如,您可以像这样减少图形着色。每个顶点对应于列表 L 中的一个元素,每个批次对应一种颜色,每条边对应一个标签,该标签仅出现在两个入射顶点上。如果您将约束设置为每个批次最多只能有一个标签,这相当于为每个顶点分配一种颜色,使得没有两个相邻顶点具有相同的颜色。

在这种情况下,您基本上有两种选择:

  1. 提出一个看似合理的启发式方法,该启发式方法针对您认为将要遇到的输入类型进行调整。
  2. 将问题转化为整数规划问题并使用可用的求解器,例如 lpsolve http://lpsolve.sourceforge.net/5.5/
于 2013-10-10T16:54:41.163 回答