我想实现以下作业/资源调度问题:
- 边编码优先关系的作业的 DAG。
- 如果作业没有优先关系,则可以并行执行
- 多个资源池,每个池包含一个或多个类似资源。
- 一项作业可能依赖于一个或多个池中的一个或多个资源。即工作 J1 说类似:“我需要来自池 P1 的 2 个资源和来自池 P2 的 7 个资源。”
- 一项工作可能表示它需要与其直接前任之一完全相同的资源。即作业 J2 可能会说“我需要池 P1 中的 1 个资源,但它必须是作业 J1 分配的资源之一”。为简化起见,我假设作业 J2 必须是 J1 的直接继任者,以应对这种约束。
- 资源依赖可以被读取或写入或两者兼而有之或“不关心”
- 当作业 J1 说它从池 P1 写入资源时,其后续作业 J2 对“与 J1 从 P1 获得的相同资源”具有读取依赖性。在这两者之间,由于资源是有状态的,因此该资源不可用于其他作业进行写入。
- 我事先不知道每个作业的执行时间,也没有对作业的优先级和截止日期要求。
我在寻找:
- 一种在正式领域表达这个问题的方法,
- 一个离线可调度性测试,它回答了作业图是否可以在给定的要求和约束下执行的问题。
- 一个在线调度算法的建议
如果没有资源池,但每种类型只有 1 个资源,问题可能会简单得多。我熟悉图论和简单数据流分析算法的基础知识。