我们遇到了任务安排问题
Ti
需要Di
(即工人*天)才能完成( 需求 ),并且只能保留只有Ci工作人员同时处理它( 容量 )。[A, B, C]
[100 50 10]
- unit:worker day(任务A需要100个工作日天完成,B需要50个工作日天,以及C需要10个工人天)[10 10 2]
- unit:worker(任务A只能同时处理10个工作人员,B只能容纳10个,C只能容纳2个) {A: null, B: null, C: B}
- A和B可以随时启动,C只能在B完成后启动示例问题的可能方法:
首先分配B 10名工作人员,完成时需要50/10 = 5 天。然后在第5天,我们将2名工人分配给C,将8名工人分配给A,最多(10/2 = 5,100 / 8 = 12.5)= 12.5 天完成。然后总持续时间为5 + 12.5 = 17.5 天。
首先分配A 10名工作人员,完成时需要100/10 = 10 天。然后在第10天,我们将10名工人分配到B,这需要50/10 = 5 天完成。然后在第15天,我们将2名工人分配到C,这需要10/2 = 5 天完成。总持续时间为10 + 5 + 5 = 20 天。
所以第一种做法更好,因为17.5< 20。 但是对于示例问题仍然有更多可能的分配实践,我们甚至不确定什么是获得最小总持续时间的最佳实践。
我们想要的是算法:
输入: Nworker ,需求,容量,依赖
输出:最短总持续时间的工作人员分配练习。
B
)A
)但这两者都不是最佳策略。
任何想法或建议都将不胜感激。谢谢!
答案 0 :(得分:1)
这听起来像 Job Shop Scheduling 具有依赖关系,这是NP-complete(或NP-hard)。因此,在合理的时间内扩展并提供最佳解决方案可能是不可能的。
通过首先构建一个构造启发式(这是你在那里获得的那两个分配策略中的一个)然后做了一个类似的情况(Task assigning和Dependend Job Scheduling),我得到了很好的结果本地搜索(通常是延迟接受或禁忌搜索)以获得接近最佳的结果。