资源约束项目调度

时间:2014-05-07 09:21:42

标签: scheduling mathematical-optimization job-scheduling resource-scheduling operations-research

我需要你的帮助来解决这个问题。我有一组任务,每个任务都有执行时间。我有两种类型的约束。第一种类型是任务之间的优先关系。第二种约束类型允许同时执行一组任务。例如:我有一个带有6个任务的图G和以下边(T1,T2),(T2,T3),(T4,T3),(T4,T5)和(T6,T5)。假设T1,T4能够一起执行,还有T1,T6但不能执行T4,T6。考虑每个任务的执行时间。如何找到满足任务之间优先关系的时间表,并考虑到并行执行某些任务,最小化时间表的长度。

2 个答案:

答案 0 :(得分:0)

如果排除约束(" T1,T4能够一起执行")不会存在(并且没有添加其他约束),您可以通过采取最大结束来开始每项任务所有前面任务的时间。这将是最佳的并且可以很好地扩展。您将自动获得最短的完工时间。它不是NP完全/硬,也不是作业车间安排。

不幸的是,排除约束(以及可能在将来添加的任何其他约束)将其转变为作业车间调度(如Lars所述),这是NP-complete / hard。 See this video开源java实现的作业车间调度变体,该演示了为什么某些任务比其前面的任务开始的时间已经完成。要解决这个问题,请查看启发式,Metaheuristics(禁忌搜索,...)或其他相关技术。

答案 1 :(得分:0)

为了保持简单,您可以使用基于优先级规则的建设性启发式方法以及计划生成方案或也称为SGS,请参阅this以获取进一步的参考。启发式算法将根据某些标准生成有序的活动列表,SGS将此列表作为输入并生成计划。在您的SGS实现中,您将根据第二个约束条件判断是否可以并行执行两个任务。

如果您想要更强大的功能,可以使用Metaheuristic,基本上您将生成解决方案(任务列表)并使用本地搜索技术修改此解决方案,探索您的解决方案搜索空间。您可以根据优先级规则生成解决方案,并使用SGS实现对其进行评估。这只是元启发式如何运作的简化解释,存在多种差异。 Metaheuristic的一个很好的例子是模拟退火,应用于RCPSP问题:http://www.sciencedirect.com/science/article/pii/S0377221702007610