在R语言中制定任务调度:最大化项目团队资源利用率并满足约束
任务调度最优开始时间规划方案
背景信息
- 现有
Task_List表,包含约2000项一周周期任务,每项任务耗时1小时 - 配置5个项目团队,同一时间最多可并行执行5项任务
- 任务表核心字段:
Task:任务唯一编号Earliest_Start_Task:任务最早允许启动的时间Latest_Start_Task:任务必须启动的最晚时间(逾期则无法按时完成)Window:任务启动时间可调整的分钟范围,需按此字段升序处理任务
示例任务数据
| Task | Earliest_Start_Task | Latest_Start_Task | Window |
|---|---|---|---|
| 1 | 2022-09-07 07:35:00 | 2022-09-07 07:35:00 | 0 |
| 2 | 2022-09-07 08:00:00 | 2022-09-07 08:00:00 | 0 |
| 3 | 2022-09-07 17:43:00 | 2022-09-07 17:49:00 | 6 |
| 4 | 2022-09-07 09:49:00 | 2022-09-07 10:00:00 | 11 |
硬性约束
- 所有任务必须在自身
Latest_Start_Task时间点前启动 - 尽可能减少同一时间并行任务数超过5的情况;若无法避免,需明确记录冲突时间点及对应任务
最优调度执行步骤
1. 任务优先级排序
按Window字段升序排序任务:
- 优先处理**无调整空间(Window=0)**的任务,这类任务启动时间固定,是整个调度的基础框架
- 再依次处理窗口较小的任务,窗口越小,可调整空间越少,越需要优先锁定位置
2. 固定任务占位
将所有Window=0的任务按其固定启动时间录入调度时间线,实时统计每个时间点已占用的团队数量(比如某时间点有3个固定任务启动,则该点占用3个团队)。
3. 可移动任务分配逻辑
对有调整窗口的任务,在Earliest_Start_Task到Latest_Start_Task范围内,按以下规则选择启动时间:
- 从最早可启动时间开始,遍历每个可能的启动时间点
- 选择当前已占用团队数最少(且加入后不超过5)的时间点作为启动时间
- 若所有可选时间点加入后都会导致并行数超过5,则选择冲突程度最低(即并行数增量最小)的时间点,并同步记录该任务编号及对应时间点
4. 冲突识别与输出
遍历最终的调度时间线,统计每个时间点的并行任务数:
- 筛选出并行数>5的时间点
- 整理这些时间点对应的所有任务编号,生成冲突报表
5. 冲突优化(可选)
若冲突较多,对冲突时间点的任务尝试微调启动时间(比如在其窗口内推迟1分钟):
- 由于任务耗时1小时,推迟1分钟后,原冲突时间点的重叠时长会减少,有可能降低该时间点的并行任务数
- 重新计算调度,直到冲突数量降至最低
内容的提问来源于stack exchange,提问作者JVP
相关产品推荐
相关产品推荐

