在DAG中查找最大并行任务的算法?

时间:2019-02-24 03:43:17

标签: optimization graph graph-algorithm job-scheduling directed-acyclic-graphs

想象一下我有一个有顶点和边的有向无环图(DAG)。

顶点可以是以下两种类型之一:

  • 计算任务(T)
  • 资源(R)

边表示依赖性。它总是源自某个计算任务顶点T,并终止于某个资源顶点R。

图形结构的限制:

  • 任务顶点仅取决于资源顶点(不依赖于其他任务)。 这意味着只有计算任务的传出边缘, 而且只有进入资源的边缘。
  • 任务顶点在同一资源顶点上不能有多个边缘。
  • 资源顶点不依赖任何东西(没有传出的边)。
  • 每个计算任务顶点可以具有最少3个输出边缘,最多4个输出边缘。这意味着,计算任务取决于最少3个资源和最多4个资源。

语义:

  • 上图是任务依赖图。每当执行任务Tx时, 它会阻塞它依赖的所有资源,直到完成为止。
  • 在任何给定时间,每个资源不能被多个任务使用。所以, 任务可以暂时阻止其他任务运行,直到它们 完成。

问题:

鉴于上图,我可以使用哪种算法来计算可以并行运行的所有可能任务,以使它们不会相互阻塞? 即,在任何给定的时间,我希望能够实现最大的并行化。我将使用该算法发现彼此不阻塞的所有任务,然后运行它们。每当任务完成时,我都希望重新评估图表,以查看是否可以剥离更多未被阻止的任务。

我想知道我可以用于这种计算的算法。这听起来像一个硬图问题,但是我怀疑这种问题并不完全是全新的。...

示例:

在提供的示例中,我可以先运行T1和T3。完成这些后,我可以运行T2和T4。

enter image description here

1 个答案:

答案 0 :(得分:0)

将资源集表示为S,并将每个任务表示为S的子集,那么您的问题就是maximum set packing。另请参见here