试图获得工作调度贪婪算法的直觉

时间:2014-06-09 00:26:29

标签: algorithm language-agnostic theory greedy

我有以下情况:(因为我不知道显示LaTeX的方法,这是截图)

enter image description here

我在概念化这里发生的事情时遇到了一些麻烦。如果我要对此进行编程,我可能会尝试将其构建为某种堆,其中每个节点代表一个工作者,从最早到最晚,然后运行Prim的/ Kruskal算法。我不知道我是否正确的想法,但我需要充实我对这个问题的理解,所以我可以做到以下几点:

  • 详细描述贪婪的选择
  • 表明如果没有贪婪选择的最佳解决方案,那么可以进行交换以符合贪婪的选择
  • 了解如何实施贪心算法解决方案及其运行时间

那么我应该把这个想法放在哪里呢?

1 个答案:

答案 0 :(得分:3)

这个问题在性质上与“名册调度问题”非常相似。可以把委员会想象成一组“主管”,并且只要有工人在场,你就想让主管在场。在这种情况下,主管来自与工人相同的设置。

以下是一些建模思路和整数编程公式。

时间切片想法

这最初听起来不错,但在实践中效果很好。我们将从第一班的开始时间到最后一班的结束时间创建许多“时间瞬间”T i 。它有时候有助于思考 T1, T2, T3....TN时间(例如)相隔五分钟。对于每个Ti,至少有一名工人正在轮班工作。因此,该时间已被覆盖(覆盖范围意味着必须至少有一名委员会成员在Ti时间工作。)

我们真的只需要担心2n时间瞬间:每个n工作人员的开始和结束时间。

覆盖范围属性要求

对于每一个瞬间Ti,我们都希望委员会的工作人员出席。

w1, w2...wn成为工作人员,按其开始时间s_i 排序。 (工人w1开始最早的班次,工人wn从最后一班开始。)

引入一个新的指标变量(布尔值):

Y_i = 1 if worker i is part of the committeee
Y_i = 0 otherwise.

可视化

现在想一下0-1矩阵,其中行是SORTED工作者,列是时刻......

构建时间工作者矩阵(0/1)

    t1 t2 t3 t4 t5 t6 ...          tN
------------------------------------------- 
w1   1  1
w2   1  1
w3      1  1  1
w4         1  1  1  
...
...
wn                               1 1 1 1
------------------------------------------- 
Total 2 4 3 ...              ... 1 2 4 5

所以问题是要确保每列至少选择1名工作人员参与委员会。总计显示每个时刻委员会的候选人的数量。

基于整数规划的公式

Objective: Minimize Sum(Y_i)

Subject to:

Y1 + Y2       >= 1 # coverage for time t1
Y1 + Y2 + Y3  >= 1 # coverage for time t2
...

更一般地说,限制是:

# Set Covering constraint for time T_i
Sum over all worker i's that are working at time t_i (Y_i) >= 1 

Y_i Binary for all i's

预处理

如果没有预处理就尝试这个整数程序可能非常困难,并最终扼杀解算器。但在实践中,有很多预处理的想法可以帮助很大。

  1. 进行任何强制分配。 (如果有一个时间只有一个 工作人员,该工作人员 参加委员会∈ C
  2. 分成好的子问题。看一下时间工作者Matrix。如果里面有漂亮的“矩形”,可以在没有的情况下剪掉 影响任何其他时刻,那是完全独立的 要解决的子问题。使解算器更快,更快。
  3. 相同的转变 - 如果很多工人有相同的开始和结束时间,那么你可以简单地选择其中任何一个(比如, 按字典顺序排列第一名工作人员(WLOG)并从中删除所有其他工作人员 考虑。 (使现实生活中的差异。)
  4. 支配转移:如果一名工人之前开始工作并且比任何其他工人晚,那么“支配”的工人可以留下,所有的 '{dominin''工作人员可以从C
  5. 中删除
  6. 时间工作者Matrix中所有相同的行(和列)都可以融合。你只需要保留其中一个。 (重覆资料删除)
  7. 你可以把它扔进IP解算器(CPLEX,Excel,lp_solve等),如果问题的大小不是问题,你就会得到一个解决方案。

    希望其中一些想法有所帮助。