有截止日期的安排
先决条件:CPU调度
什么是有截止日期的调度?
调度问题的目标是调度任务以获得最大的总利润。这种有期限的调度算法不同于无期限的调度,因为这里的任务完成与利润相关。为了盈利,工作必须在截止日期之前完成。否则,工作完成根本不计入或赚取利润。这个问题的目标是构造一个可行的序列,以提供最大的利润。
如果所有作业在截止日期前结束,则序列是可行的。如果至少有一个序列是可能的,则一组作业称为可行集。与最大利润相关联的序列称为最佳序列,构成该序列的元素构成最佳工作集。
例子——
考虑下表中显示的项目和利润,让我们找到可以安排的最佳作业集,以使利润最大化。
该表描述了具有截止日期和利润的工作
JOB | DEADLINE | PROFIT(₨) |
---|---|---|
1 | 2 | 60 |
2 | 1 | 30 |
3 | 2 | 40 |
4 | 1 | 80 |
给定问题的目标是找到一组可行的解决方案。让我们应用贪婪的方法。
- 最初解决方案 = NULL,然后添加作业 1,因此解决方案 = {1}。可以观察到,作业 2 在作为任务 {2, 1} 添加时是可能的,但作为任务 {1,2} 添加时则不可能。
为什么?让我们检查一下这种情况, - 考虑序列{1,2}。可以安排任务 1。然而,调度任务 2 是不可能的,因为它的截止时间只有 1 个单位,这已经花费在等待时间。另一方面,{2,1,} 是可行的,因为作业 2 的截止日期没有被违反,而作业 1 的截止日期是 2 个单位。因此,在处理完作业 2 后,可以很好地容纳作业 1。类似地,可以观察到作业序列 {1,4}、{2,4}、{3,4}、{1,2,3}、{2,3,4} 和 {1,2,3 ,4} 是不可能的。
所有可能的序列是——job sequence total profit 2, 1 90 3, 1 or 1, 3 100 2, 3 70 4, 1 140 4, 3 120
最大利润与序列 {4,1} 相关联。因此,最优顺序是{4,1}。还可以观察到,虽然 {4,1} 是最优的,但由于违反了截止日期条件,因此序列 {1,4} 是不可能的。
算法 :
Step1: Sort the jobs in a non-increasing order by profit
Step2: Solution = null
Step3: For all the task do the following:
select the next job;
if task is feasible (i.e, the task deadline is not violated) then add this job to the solution
EEND if
Step4: If all the instances are solved then exit.
形式上,具有期限的调度问题的算法如下:
Algorithm Schedule_with_deadline
%%Input: A set of jobs 1 to n with service item
%%Output: An optimal schedule
Begin
s= sorted array of jobs based on profit in non-decreasing order
i=1
schedule=NULL
while(i <= n) do %%for all jobs do
select the next job i from S %% selection procedure
if(Scheduling job is feasible) then %%Feasibility check
solution = schedule U job i of S
i=i+1
End while
return(solution)
End
可以看出,该算法首先根据利润对作业进行排序,然后在不违反期限考虑的情况下,将作业一一选择进行调度。对所有作业重复此过程,最后,算法返回解决方案。
存在一个检查作业序列可行性的原则,该原则指出,如果作业序列按照非递减期限进行调度是可行的,则该作业序列是可行的。
- 因此,序列{1,2,3} 是可行的,因为作业是根据非递减截止日期安排的。
- 另一方面,序列 {1,2,3,4} 是不可行的。
- 原因是虽然有 4 个作业,但这个顺序意味着所有作业都应该在 3 个时间单位之前完成。
- 由于每个作业至少需要 1 个时间单位,因此该顺序是不可行的。
因此,可以使用这种观察来检查作业调度的可行性,因为这在竞争性考试期间可以节省时间。