Algorithm 任务分配算法

Algorithm 任务分配算法,algorithm,math,variable-assignment,Algorithm,Math,Variable Assignment,我正试图找出最有效的分配任务的方式。以下是我正在努力解决的问题: 你有X个有资格做工作的人 每个人一次可以完成X个任务 您有X个等待任务 每项任务都需要不同的时间长度 挑战的目标是尽可能在人群中平均分配任务。一旦一个人完成了一个给定的任务,其中一个“排队”任务将被馈送给他们。下面是一个示例场景 队列中有500个任务,有50个人可以“接受”它们。每个人可以同时完成两项任务。一旦一个人完成了一项给定的任务,他们就会被另一项任务喂饱。等待时间最长的任务获得最高优先级 一种可能的方法是让50名有能力

我正试图找出最有效的分配任务的方式。以下是我正在努力解决的问题:

  • 你有X个有资格做工作的人
  • 每个人一次可以完成X个任务
  • 您有X个等待任务
  • 每项任务都需要不同的时间长度
挑战的目标是尽可能在人群中平均分配任务。一旦一个人完成了一个给定的任务,其中一个“排队”任务将被馈送给他们。下面是一个示例场景

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

一种可能的方法是让50名有能力承担任务的人中的每一人根据他们最后一次完成的任务分配一个任务。例如:

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

  • 任务4->人员1
  • 任务5->人员2
  • 任务6->人员3
根据上一次分配给X个人的任务,最后分配了最旧任务并且可以承担另一个任务的人会将任务馈送给他们。我不确定这是否是一个正确的解决方案,即使是任务分配,希望听到的建议!这种算法有名字吗


另一种方法可能是根据当前服务于最低数量任务的人员分配任务。虽然如果将多个人捆绑在一起执行最少数量的任务,但任务将分配给最长时间内可用的人(上次分配的任务)。

保持两个队列。一个用于任务,另一个用于等待任务的空闲人员。若要执行任务,队列中的第一个人将执行并离开。在此解决方案中,您不会考虑任务和人员的时间,因为这是一种公平的分配方式。如果您将来需要某种优先级排序,并且两个队列都没有什么变化,那么您可以考虑使用优先级队列

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

工人优先级队列中的工人按容量、空闲时间或任何公平的方式排序。事实上,这并不是一个真正的优先级队列,因为当一个工人完成一项任务时,我们会把他带出去,让他回到队列中,处于更高的位置


(如果工人能同时做两个任务,他们可能是计算机而不是人,所以时间闲置不是一个有用的度量标准。只有人类工作者关心他们在其他事情时保持忙碌)。

< P>请考虑在更高的层次上看这个问题。

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

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

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

有两种中间方法

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

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


每个工人都是同等的,还是有些人比其他人能够完成更多的任务?有些人能够完成更多的任务@目录号那么,你是提前知道所有的任务,还是它们是动态到达的?它们是动态到达的。10:00可能有10人排队,10:05可能有30人排队。你说的“平均分配”是什么意思?您是否希望分配任务,以便工人花在工作上的时间大致相等,还是最终目标是完成相同数量的任务?