【问题标题】:Is there polynomial algorithm to this? Possibly dynamic programming approach?这有多项式算法吗?可能是动态编程方法?
【发布时间】:2014-03-03 02:07:12
【问题描述】:

假设给定一个集合 A = {1, 2, ..., m} 和一个集合 B = {1 , 2, ..., n},这样集合A中的每个元素都必须分配给B中的某个元素>。集合 A 中的每个元素 i 和集合 B 中的每个元素 j 的以下参数是已知的:

  • Sij 是将元素 i 分配给大于或等于零的元素 j 的成本;
  • tij是元素i对元素j大于等于0的最小偏好;
  • Tij 是元素 i 对元素 j 大于或等于零的最大偏好。

对于每个固定的itij的所有值,Tij(对于所有 j 的)是不同的。 mn 为大于 0 的整数,其他变量为非负实数。

集合 A 中的元素根据 tij 的偏好分配给 B 中的元素(或Tij)。例如,如果 tij tik (偏好 TijTik 可以在任何情况下使用,请进一步阅读),然后元素 i 将被分配给 j 而不是 k。在 mn 个偏好中,恰好有 r 个必须使用 Tij 的值作为偏好值,剩下的 mn - r 必须使用 tij 的值(低于 Tij)。

如果将元素 i 分配给元素 j,则将成本 Sij 添加到分配给元素 j 的总成本,即 Cj = Cj + Sij。令Max为所有成本Cj中的最大值,Min为所有成本Cj。目标是选择分配元素 i 到元素 j 的哪些偏好将采用 Tij 的值,以及哪些偏好将采用 tij 的值,这样的值:

  1. Max 是最小的;
  2. Max - Min 是最小的。

我认为有一些动态规划算法,但我不确定。有人知道如何通过 DP 方法或其他方法解决这个问题吗?然而,它可能不是多项式,但我认为它是。

示例。m = 3,n = 2,即A = {1, 2, 3} 和 B = {1, 2, 3}。令r = 2,矩阵StT

    |5 9|      |1 3|      |10  7|
S = |7 1|, t = |4 2|, T = | 5  4|.
    |8 4|      |3 4|      | 9 12|

Solution 等于 5 在最小化 Max 值的情况下。可以构造类似的示例来最小化 Max - Min

【问题讨论】:

  • 我在问题陈述中闻到了一些垃圾箱包装的味道。因此,不确定算法是否可以是多项式
  • 您可能无法同时优化 MaxMax - Min。是那些不同的目标还是您仅将 Max - Min 用作具有相同 Max 的解决方案的决胜局?
  • 对不起,我可能不太清楚。这是两个不同的问题。第一个是最小化 Max,第二个是最小化 Max - Min
  • 所以你说你做m*n的任务。这意味着 A 的每个元素都分配给 B 中的 all 元素。我误解了什么?我认为一个例子会对这个问题有很大帮助。
  • 另外,所有变量的范围限制是什么(nmrS_ijt_ijT_ij)?它们都是整数吗?大于零?它们最大可以有多大?您需要更具体地说明这些要点。

标签: algorithm dynamic-programming


【解决方案1】:

问题是 NP 难的,可以通过将 Partition 简化为它来证明。

假设我们有一个算法M可以最佳地解决您的问题。

给定一个 Partition 实例 X = {x1, x2, ..., x m} 并希望找到一个将 S 划分为两个总和差异最小的子集。让我们定义 n = 2, Sij = xi, tij = -j, Tij = j。现在我们只需遍历所有可能的 r 并调用 M 作为子例程来找到 Max 的全局最小值。我们可以证明产生最小值 Max 的分配是 X 的最优 2-partition。

由于您使用的不是整数成本,而是实际成本,并且您的问题可能会因为 n > 2 变得更加困难(我们也可以使用 nBin packing /em> 以直接的方式解决您的问题),除非P = NP,否则您的问题似乎不太可能存在伪多项式解决方案。您应该考虑使用启发式方法来获得良好的近似解决方案。一个好的起点是查看 Bin 打包的近似方案并尝试使它们适应您的问题。也许一个简单的首次拟合方法就足以满足您的需求。还有两件事你应该记住:

  • 您可以对 Max 进行二分搜索,然后将其用作“bins”的固定上限
  • tijTij 对于固定的 i。您有一组偏好 Ti,1(从 tij 中提取)和一组替代偏好每个iTi,2(从Tij中提取)。即使考虑非最低偏好也没有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-12
    • 2022-12-16
    • 1970-01-01
    相关资源
    最近更新 更多