交互式图论学习
交互式图论学习
Guest User
Using app without sign in
图论学习资料
即时下载 · 终身使用
需要一对一帮助?
围绕资源受限项目调度 (RCPSP)的一对一辅导,适用于课程学习、面试准备或优化项目。
资源受限调度求解器
在同时满足优先级约束和全局资源限制的前提下,安排项目任务。
选择算法并生成步骤以开始可视化
资源受限项目调度问题(RCPSP)在既受先后约束、又受工人、机器或每期预算等有限可再生资源约束的条件下调度项目活动。与假设资源无限的 CPM 不同,RCPSP 是强 NP 难的。
优先规则启发式用串行或并行的进度生成方案构建排程:活动被插入到先后关系与资源可用性同时满足的最早时刻,并按总后继最多或浮动最小等规则排序。精确方法使用带基于资源下界的分支定界,而元启发式,尤其是采用活动列表编码的遗传算法,在标准 PSPLIB 基准上占据主导。
RCPSP 驱动施工班组与设备调度、人力受限下软件团队的冲刺规划、炼油厂检修停机排程以及按单制造的生产计划。它是图算法与工业运筹学之间的典范桥梁。
RCPSP 就是 CPM 加上有限资源,而仅仅这一项追加就把它从线性推到了 NP 困难。务实的做法是由优先规则引导的串行排程启发式。
RCPSP(活动集, 依赖集, 资源容量):
顺序 = 拓扑排序(活动集)
按某条优先规则对该顺序重新排序
// 例如最小时差优先,或最长工期优先
对优先排序后的每项活动 a:
t = max(结束[p],p 为 a 的前驱)
当区间 [t, t + 工期[a]) 上存在某资源 r 已满载:
t = t + 1 // 后推直到放得下
开始[a] = t; 结束[a] = t + 工期[a]
在该区间上占用 a 所需的资源
项目工期 = max(结束[a])与 CPM 的差别在于:一项活动的开始时刻不再只由它的前驱决定,它可能因为另一项毫不相干的活动正占着机器而被往后推。这就摧毁了让 CPM 保持线性的那条性质,因为对某项活动的决策现在会影响与它没有任何依赖关系的活动。正因如此,在拓扑序上做多少动态规划都不够用。
为四项争用同一种容量为 1 的资源的活动排期,并把结果与 CPM 的预测相对照。
示例图: 活动 A(3 天)、B(2 天)、C(4 天)和 D(2 天),其中 A 与 B 先于 C,C 先于 D。它们都需要同一台机器,而这台机器只有一台。
在资源无限时项目历时 9 天;只有一台机器时则是 11 天。多出来的这两天并非源于任何依赖关系,而纯粹来自资源争用。另外还要注意,关键路径这个概念在这里变得含混:决定完工日期的那条链现在包含了 B 等待机器的时间,而那根本不是一条前驱关系。这也正是资源紧张的项目上,CPM 排期会系统性偏乐观的原因。
时间: NP 困难;串行启发式为 O(V^2 · R) · 空间: O(V · R)
串行排程启发式对 V 项活动各处理一次,而对每一项可能都要通过检查 R 种资源的可用性来把开始时刻往后推,若采用直接实现,最坏情况大致是 O(V 的平方乘以 R)。这很快,也能扩展到数千项活动。它做不到的是给出最优性保证。精确的 RCPSP 是 NP 困难的,而且被认为是运筹学中最棘手的排程问题之一:仅含 60 项活动的基准算例曾多年未被解开。精确的分支定界依结构不同大约能处理 30 到 60 项活动,超出之后就要转向遗传算法、禁忌搜索之类的元启发式方法。
根据资源是否真的构成瓶颈,以及你是否需要最优性保证来选择。
| 替代算法 | 以下情况更合适 | 代价 |
|---|---|---|
| CPM | 资源充裕,不构成任何约束。线性且精确。 | O(V + E) |
| 串行排程启发式 | 大规模算例。快速、简单,配上一条好的优先规则通常与最优解只差几个百分点。 | O(V^2 · R) |
| 精确分支定界 | 几十项活动,而且你需要可证明最优的排期。 | 指数级 |
| 元启发式方法 | 数百项活动,质量比保证更重要。遗传算法、禁忌搜索、模拟退火。 | 视情况而定 |
| 资源平滑 | 工期已经固定,你想做的是削平资源使用的峰值而不是压缩工期。 | NP 困难 |
相关算法: 关键路径法 (CPM), 计划评审技术 (PERT), 拓扑排序