这更像是数学问题,而不是算法问题;不过,它将在php中实现。
我有一个N个任务数组。每项任务都花了很长时间才能完成(例如,任务1花了5个小时完成)。现在,为了检查这些任务是否正确完成,我必须分配一定数量的用户U来检查其中的每个用户。每个用户都将被分配一定数量的任务,理想情况下,每个用户分配的小时数与另一个用户大致相同。
有10项任务。任务1耗时4小时,任务2耗时18小时,任务3耗时6 hours...etc。总共80小时。
有8个用户。如果理想情况下,8个用户中的每一个都有相同的工作时间(有些用户得到的任务更多,但更长,一些用户得到的任务更少,但任务更长),那么自动排序分配任务的好方法是什么?
发布于 2012-02-08 00:25:42
下面所示的算法提供了一个解决方案。我还没有对它进行彻底的测试,但它应该给你一个想法。它只能在以下情况下使用:sum(资源可用时间) >=和(所需的任务审查时间)。
这个过程从检查任务1‘S开始,需要复习时间和资源1可用时间。如果可用时间小于或等于任务所需的时间,则T1、U1的交叉单元格将填充满足所需审查时间或用户1可用时间的小时数。
接下来,我们进入任务2并重复这个过程。
如果分配耗尽了给定资源的可用时间,则逻辑转移到下一个资源。
当这个条件被违反或者所有的资源都被分配时,迭代应该停止。
在下面的图像中,步骤0是初始步骤。我已经使用橙色的颜色来显示每一步的变化,希望你能发现这个过程。
这个过程偏向于从左到右列出用户的方式,并且没有在用户之间平均分配工作。也就是说,一个用户可能会比其他用户更努力地工作,仅仅因为他/她出现在其他用户前面。

发布于 2012-02-07 19:07:25
这是开店调度问题的一个实例。问题是NP-完全的,所以您需要应用一些启发式,比如维基百科中描述的,或者本论文中的一种遗传算法。
发布于 2012-02-07 21:24:51
也许你想得太多了。将任务安排在一个简单的队列中,并根据优先级排序。让每个用户承担第一个可用的任务就足够了。较长的任务可能需要更长的时间来检查,而较短的任务可能需要更少的时间,因此,用户似乎收集下一个任务的顺序将随着他们完成前一个任务和下一个任务的出现而改变。这不需要太复杂。
预先分配任务可能有一些严重的缺点。这基本上是一个推送系统,而且往往会导致“浪费”。实现拉式系统的效率要高得多,而且在日程安排和资源方面也较少浪费,因为如果工作估计是错误的,或者被团队内不断变化的环境所打断,那么您就不需要管理同步问题。
https://softwareengineering.stackexchange.com/questions/133817
复制相似问题