几天的分配问题


10

我有一个可以简化为分配问题的问题。(在上一个问题中,我发现了该怎么做的。)

这意味着我们有一组代理和一套的任务以及成本函数。我们需要找到一个任务,以使总成本最小。一个ŤC一世Ĵ

匈牙利算法可以找到至少一个最优解。对我来说听起来不错。Øñ4

我的新问题是:有给定的天数。我必须每天解决分配问题,以便每个任务每天都完成,并且没有座席两次执行同​​一任务

我尝试过的操作:我们可以每天分别运行匈牙利算法,并根据前一天的结果限制可能的组合数量。但这会使我们在以后的某些日子陷入困境,在最有可能找不到可行的解决方案的地方。

另一个想法是以某种方式集成本地搜索以更改前一天做出的决定。但是我认为我们不能依靠这一点。

我要面对的问题实例将在附近。成本矩阵将具有许多相同的值(例如,大多数为1或无穷大,只有大约2或3)。因此,在匈牙利算法期间,有很大的空间可以在一天内创建不同的最佳解决方案。|一个|=|Ť|=500C一世Ĵ

我很高兴听到一些想法或建议如何为该问题找到一个好的解决方案。提前致谢。


1
这是一个很好的问题!我建议使用最小成本流,霍尔的婚姻定理和最大二分匹配。
彼得·索尔

Answers:


6

在多项式时间内有一种解决方法。我将概述算法(以相反的顺序...首先执行步骤2,然后执行步骤1)。

  1. 如果我们可以找到一组代理程序-任务对,使得每个任务恰好是对,每个代理程序恰好是对,并且没有一个对出现多次,那么我们可以找到分配一起涵盖了这些座席-任务对。为此,我们反复使用最大二分匹配算法,在对应的二分图中找到一个完美匹配,然后从图中删除该分配。霍尔的婚姻定理保证我们可以做到这一点。ñķ一世Ĵķķķñķ

  2. 我们可以通过使用最小成本流找到步骤1中的代理任务对的最小成本集。考虑一个具有源s,接收器t和每个代理和每个任务的节点的网络。将源连接到容量为k且成本为0的每个代理。将每个任务连接到容量为k且成本为0的接收器。现在,以容量1和成本c i j 的边将代理i连接到任务jñķsŤķ0ķ0一世Ĵ1个C一世Ĵ。确保该网络中的最小成本流是积分的(因为所有容量都是积分的,并且有一个定理说这意味着存在最优的积分最小成本流),因此每个代理任务边缘上的流是1。流1的边i j 在步骤1中形成一对对。01个一世Ĵ1个

有很多算法可以解决最小成本流。这是线性编程的特例。对于您的大小问题,我介绍的算法不仅应该是多项式时间,而且应该是实用的。


最后一个问题:步骤2中的最小成本流算法(我选择了取消循环作为开始)提供了一种最佳解决方案。步骤1中的最大匹配算法可以做到这一点。这是否必然意味着整个解决方案是最佳的?因为,我的猜测是问题是NP-Complete。
帕特里克·施密特

1
整个解决方案是最佳的。这是在组合优化课程中分配的一个好问题,因为您可以做到这一点有些令人惊讶。
彼得·索尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.