任务分配算法

时间:2017-01-07 05:27:18

标签: algorithm math variable-assignment

我正在试图找出向人们分配任务的最有效方法。这就是我正在努力的方法:

  • 您有X个人都有资格从事工作
  • 每个人可以一次完成X个任务
  • 你有X个等待任务
  • 每项任务都需要一段可变的时间

挑战的目标是尽可能在人群中均匀分配任务。一旦一个人完成一个给定的任务,其中一个“排队”任务将被提供给他们。这是一个示例场景。

队列中有500个任务,有50个人可以“接管”它们。每个人可以同时承担2项任务。一旦一个人完成一项特定的任务,他们就会被另一个人喂养。等待时间最长的任务获得最高优先级。

可能做到这一点的一种方法是让具有执行任务能力的50人中的每一人根据他们在最后给定时间的任务分配一个。例如:

  • 任务1 - >人1
  • 任务2 - >人2
  • 任务3 - >人3

...

  • 任务4 - >人1
  • 任务5 - >人2
  • 任务6 - >人3

根据最后分配给X人的任务,最后分配了最旧任务的人员以及可以承担另一项任务的人员将其提供给他们。我不确定这是否是任务分配的正确解决方案,我很乐意听到建议!这种算法有名称吗?

另一种方法可能是根据当前服务最少任务数的人来分配任务。虽然如果有多个人被绑定到最少的任务,那么任务将被分配给最长时间内可用的人(最后一个任务被分配)。

3 个答案:

答案 0 :(得分:1)

请考虑在更高层次上查看此事。

到目前为止,这些建议一直很贪婪。他们制定了一个时间表并希望做到最好。

您需要决定的第一件事是这是否是您想要的。贪婪的任务会为某些输入产生非常糟糕的答案,但如果输入是“合理的”,并且你想要的只是一个合理的答案,那么它可能会很好。

另一方面,找到 任务的最佳分配是NP难的。您需要输入大小的时间指数,以确保您有最好的答案。

有两种中间方法。

  • 随机任务调度算法。这是一个很大的话题。 This paper仍然是一个不错的起点,虽然它现在已经过时了。理查德卡普很棒。随机算法的好处在于它们可以提供非常有用的最优保证。

  • 启发式搜索。定义计划良好性的单个数字度量。从一个合理的(贪婪或随机)开始。将其放在按度量v排序的搜索队列中,从队列中提取最佳度量标准,找到所有“子项”,即在所有可能的简单更改之前未考虑的计划,将这些添加到队列中,然后重复。你不能再等了就停下来。目前最好的是你的答案。您也可以将其构建为遗传算法,这只是一种专门的启发式搜索。

答案 1 :(得分:0)

保留2个队列。一个用于任务的另一个免费人员等待任务。如果有任务需要从队列中取出第一个人将采取和去。你不会在这个解决方案中考虑任务和人员的时间,因为这是正义的分配方式。如果您将来需要某种优先级,两个队列的变化很小,您可能会考虑优先级队列。

答案 2 :(得分:0)

作为zsiar,但使用两个优先级队列。优先级最高的队列中的顶级任务被分配给顶级工作者,假设他有能力。如果他没有,那么任务就无法完成,必须等待。

工作人员优先级队列中的工作人员按容量或时间闲置或任何看似公平的方式排序。实际上它并不是一个真正的优先级队列,因为当一个工人完成任务时,我们把他带出去并把他放回队列中,处于更高的位置。

(如果工人可以同时完成两项任务,那么他们可能是计算机而不是人,所以时间闲置并不是一个有用的指标。​​只有人类工作人员才会关心,如果他们在忙碌的同时保持忙碌的话。)