我有一个调度问题,即新作业(按顺序连接执行的任务集)每隔几秒左右到达
每项工作都需要以已知的时间间隔分配一些资源
例如:
作业j1
是一组我们预留资源{r1, r2, r3}
的任务
在已知的调度模式上:
r1:[t0 .. t1=t0+td1],
r2:[t2=t1+td2+i2 .. t3=t2+td3]
在该示例中,在j1执行开始之后立即调度新作业j2。
j2的最早开始时间是t1。
一份工作可能需要几分钟的执行时间,其中大部分都是等待。
我有一个调度程序,它查看当前的预订表,并决定哪个是具有固定分配时间和等待期的新作业的最早开始时刻,并相应地进行预订。
(但实际上,等待期并不需要固定 - 但在一定百分比(可能是5%)内并且可能有资源使用的替代方案,例如,如果预订了资源r3.1,那么3.2可以这样使用来实现同样的目的。)
但是,如果需要调度程序(是的,已建议),则能够在新作业到达时动态调整所有计划分配,以通过利用以下事实最大化完成的总工作量(在一天内)等待时间不需要完全给定,并且可能与一些重复的重复(3.1 / 3.2)并行执行,然后我会看一个完全不同的调度方案(比我目前的尽快开始)方法)。
答案 0 :(得分:1)
关于“资源使用的替代方案”的问题:
解决此类问题最常用的模式是Object Pool Pattern
最广为人知的例子可能是ThreadPool
我建议您使用ResourcePool
方法实现int GetResource(ResourceType type, int durationInSeconds)
类。
返回值指示给定ResourceType
的下一个资源何时可用
答案 1 :(得分:0)
您可能正在处理RCPSP(资源受限项目调度问题)。解决方案技术的范围从整数编程和约束编程到各种启发式。该技术取决于详细信息,例如计划范围,任务/作业如何使用/共享资源,您需要多快的解决方案计划等。
请参阅:
https://developers.google.com/optimization/scheduling/job_shop
http://www.laas.fr/files/ROC/2014-Presentations/MILP-RCPSP-PMS2014.pdf