假设您有一组 A = {1,2,..., m }和一组 B = {1 ,2,..., n },这样 A 集合中的每个元素都必须分配给 B 中的某个元素> 的。来自集合 A 的每个元素 i 以及来自集合 B 的每个元素 j 的以下参数是已知的:
对于每个固定的 i , t ij 的所有值, T ij (对于所有 j )是不同的。 m 和 n 是大于0的整数,其他变量是非负实数。
根据 t ij t ij Ť<子> IJ 子> 的)。例如,如果 t ij &lt; t ik (首选项 T ij 或 T ik 可以在任何情况下使用,进一步阅读),然后将元素 i 分配给 j ,而不是 k 。在 mn 首选项中,它们的 r 必须使用 T ij 的值作为首选项值,剩下的 mn - r 必须使用 t ij 的值(这是较低的值,然后 T ij 的)。
如果将元素 i 分配给元素 j ,则成本 S ij 将添加到分配给元素 j 的总成本,即 C j = C j + S ij 。让 Max 成为所有费用中的最大值 C j 和 Min 所有费用中的最小费用 C <子>Ĵ子> 的。目标是选择赋值元素 i 到元素 j 的哪些首选项将取 T ij 的值,哪个首选项将采用 t ij 的值,使得值为:
我认为有一些动态编程算法,但我不确定。有人知道如何通过DP方法或其他方法解决这个问题吗?然而,它可能不是多项式的,但我认为它是。
示例。让 m = 3, n = 2,即 A = {1,2, 3}和 B = {1,2,3}。设 r = 2,矩阵 S , t 和 T 为
|5 9| |1 3| |10 7|
S = |7 1|, t = |4 2|, T = | 5 4|.
|8 4| |3 4| | 9 12|
在最小化 Max 的值的情况下,解决方案等于5 。可以构建类似的示例以最小化 Max - Min 。
答案 0 :(得分:5)
问题是NP难,可以通过减少Partition来表示。
假设我们有一个算法 M 可以最佳地解决您的问题。
我们获得了一个分区实例 X = { x 1 ,x 2 ,...,x m }并希望将 S 的分区找到两个具有最小和差的子集。设定 n = 2,S ij = x i ,t ij = -j,T ij = j 。现在我们只是迭代所有可能的 r 并调用 M 作为子例程来查找 Max 的全局最小值。我们可以证明导致最小 Max 的分配是 X 的最佳2分区。
由于您不是在处理整数成本,而是使用实际成本,因为 n&gt;可能会使您的问题变得更加困难。 2 (我们也可以直接将 n 二进制文件缩小Bin packing到你的问题中),你的问题似乎不太可能存在假的多元化解决方案除非 P = NP 。您应该考虑使用启发式方法来获得良好的近似解。一个好的起点是查看Bin打包的近似方案,并尝试使它们适应您的问题。也许简单的首选方法足以满足您的需求。还有两件事你应该记住: