任务调度问题-使用拟阵进行解决

前置知识

     可以参见:拟阵的有关知识,图拟阵

问题描述

       输入:

  • 单位时间任务集S={1, 2, …, n}
  • 正整数任务期限D={d1 ,d2 ,…,dn }, 任务i须在di前完成
  • 非负权集W={w1 ,w2 ,…,wn }, 任务i不在di前完成罚款wi

       输出:

  • S的一个调度(S的一个执行顺序), 具有最小总罚款

转换为加权拟阵上寻找优化子集问题

       定义1,设S是一个任务调度.一个任务在S中是迟的,如果它在规定的期限之后完成; 否则,该任务是早的.。

       定义2,如果在一个任务调度中, 早任务总是排列于迟任务之前, 则称该调度具有早任务优先形式。

       命题1,该问题存在早任务优先形式的优化解。

       证明1:如果该问题不存在早任务优先形式的优化解。那么,可以将排列较前的迟任务与排列较后的早任务进行换位,这并不会影响对于该任务迟早的分类,因为,迟任务的执行只能更迟,早任务的执行只能更早。

       定义3,如果一个调度具有早任务优先形式而且按期限单调递增顺序执行各任务, 则称该调度具有规范化形式。

       命题2,问题存在规范化形式的优化解。

       证明2,证明类型同证明1,同样交换位置,不会改边任务的迟早分类。

       以上的定义以及命题给出了S的优化解的形式说明,说明该问题可以转换为寻找早任务集合的问题,一旦早任务集合被确定,可以构造出满足条件的原问题的解,即:规范化形式+迟任务任意排序。

       定义4,任务集合A称为独立的,如果存在一个关于A的调度, 使得A中的任务皆非迟任务。

       定义5,用Nt(A)表示A中期限小于等于t的任务数,而t有一层含义是t内可以执行的任务数,若Nt(A) ≤ t,则这几个任务都可以在期限之前被执行。

       引理1,对于任何任务集合A, 下边的命题等价: 

  1. A是独立集合。
  2. 对于t=1, 2, …, n, Nt(A) ≤ t。
  3. 如果按照期限递增顺序调度A中任务, 则A中无迟任务。

       证明3,

  • 1→2,如果2不成立,即:Nt(A) > t,则有多于t个任务需要在t 时间内完成, 不存在使得A中无迟任务的调度。
  • 2→3,若A中任务依其期限递增排列, 则2意味着排序后, 在时间t之前必须完成的A中任务数至多为t. 于是, 按期限递增顺序调度A中任务, A无迟任务。
  • 3→1,显然。

 

      定理1,若S是一个带期限的单位时间任务的集合, 且I为所有独立任务集构成的集族, 则M=(S, I)是 一个拟阵。

      证明:

  • S是非空有限集合。
  • I是S的子集的非空集族,。因为单个任务集属于I,所以I非空。而I为所有独立任务集构成的集族,显然I是S的子集的集族。
  • 遗传性。显然,独立任务集的子集合仍然是独立任务集。
  • 变换性。设A, B是I的元素, |B| > |A|, k=max1≤t≤n {t | Nt(B)≤Nt(A)}。

 

 于是, B中包含了比A中更多的具有期限k+1的任务. 设 x∈B-A, x具有期限k+1. 令A'=AU{x}. 往证A'独立。

  1. 对于1 ≤ t ≤ k, Nt(A')=Nt(A) ≤ t, 因为A是独立的。
  2. 对于k < t ≤ n, Nt(A') ≤ Nt(B) ≤ t, 因为B是独立的。

      于是, A’是独立的。

 

       原问题转换为:

       输入:拟阵 M=(S, I), M的加权函数 W.

  • S = {1, 2, …, n}。
  • I为所有独立任务集构成的集族。
  • W(i) = Wi这里实际上非常巧妙,并没有直接计算惩罚代价,而是计算期限内结束的任务的惩罚代价,期限内结束的任务的惩罚代价与原问题的惩罚代价成反比。这里迎合了拟阵的最优子集问题。

       输出:M的最优子集。

算法

       直接调用算法即可,对于I只需要增加判断条件就行,没必要求出I,只需要判断是否独立就可以,具体参见:拟阵的最优子集问题的算法

posted @ 2020-09-01 15:52  zqybegin  阅读(664)  评论(0编辑  收藏  举报