最好的安排工作

时间:2015-10-14 03:19:00

标签: algorithm

我一直在研究这个问题,似乎无法找到正确的答案。有人可以帮帮我吗?

我们获得N个工作[1,..,N]。我们将获得S(i) >= 0工资i来获得工作D(i) >= 0,并扣除T(i),以便每天通过。

我们需要i天才能完成工作i。假设作业dS(i) - d.D(i)天完成,我们将获得d奖励。如果{{1}}太大,奖励可能是负数。 我们可以在此过程中切换工作并以任何顺序处理工作,这意味着如果我们在第1天开始工作1需要5天,我们就不必连续工作5天工作。

我们如何决定最佳工作时间表,以便我们能够完成所有工作并获得最高工资?

3 个答案:

答案 0 :(得分:3)

我认为夏皮罗是对的。您需要为每项任务确定适当的加权成本公式。它必须考虑剩余的天数,每天的扣除额,以及可能的总扣除额。

一旦您有加权成本,您就可以按加权成本对任务列表进行排序,并对列表中的第一个任务执行一天的工作(如果没有完成,则应该花费最多的成本)。然后重新计算一天过去所有任务的加权成本,对列表进行排序,并重复直到所有任务都完成。

通常,当您在现实世界中优化计划时,这就是方法。找出应该首先处理哪个任务,对其进行一些工作,然后重新计算以查看是否应该切换任务或继续处理当前任务。

答案 1 :(得分:1)

按照上述讨论:

对于每个作业i,将一天延迟费用计算为X(i) = D(i) / T(i)并按其订购作业。也许只是按D(i)订购,因为当你选择一项工作时,你选择其他工作 - 所以选择具有最昂贵扣除的工作是有意义的。按此订单执行工作以最小化扣除费用。

同样,这假设S(i)是每项工作的固定奖励,独立于完成的确切日期,并且所有工作都需要执行。

答案 2 :(得分:0)

首先忘掉S(i)。无论如何,你正在完成所有的工作。

第二,没有必要打断任务并切换到另一个任务。让我们说你有工作A和B.你得到的最后一个完成的推论是相同的(它将采取T(A)+ T( B)无论你如何安排,都要完成它。如果你切换,其他工作的扣除只会增加,因为它需要更长的时间才能完成。所以,如果你放下开关,你最好。

现在的问题是订购任务,以便获得最低限度的罚款。我不确定下一步是什么。 你可以选择第一个工作来最小化T(x)*总和(d)(因为你承诺工作x所有东西将导致T(x)天延迟)。 或者你可以选择上一份工作,因为你知道你要支付总和(T)* d(x)(你知道什么时候结束)。 一个用T(x)表示顺序,另一个用d(x)表示顺序,它们都是错误的。

可能解决方案是在这个空间中进行一些动态编程,但此刻它让我无法理解。