调度算法

时间:2011-08-16 11:08:27

标签: algorithm scheduling

我有一个调度问题,即新作业(按顺序连接执行的任务集)每隔几秒左右到达 每项工作都需要以已知的时间间隔分配一些资源 例如:
作业j1是一组我们预留资源{r1, r2, r3}的任务 在已知的调度模式上:

r1:[t0 .. t1=t0+td1], 
r2:[t2=t1+td2+i2 .. t3=t2+td3]
  • t0是执行的开始时间
  • td1是r1
  • 的资源分配长度
  • t1是r1
  • 的资源分配的结束时间
  • i1是r1,r2之间等待的perioid的长度,依此类推。

schedule example
在该示例中,在j1执行开始之后立即调度新作业j2。 j2的最早开始时间是t1。 一份工作可能需要几分钟的执行时间,其中大部分都是等待。

我有一个调度程序,它查看当前的预订表,并决定哪个是具有固定分配时间和等待期的新作业的最早开始时刻,并相应地进行预订。

(但实际上,等待期并不需要固定 - 但在一定百分比(可能是5%)内并且可能有资源使用的替代方案,例如,如果预订了资源r3.1,那么3.2可以这样使用来实现同样的目的。)

但是,如果需要调度程序(是的,已建议),则能够在新作业到达时动态调整所有计划分配,以通过利用以下事实最大化完成的总工作量(在一天内)等待时间不需要完全给定,并且可能与一些重复的重复(3.1 / 3.2)并行执行,然后我会看一个完全不同的调度方案(比我目前的尽快开始)方法)。

  1. 那时你会调用什么调度方案?
  2. 有关处理(新)问题的任何建议吗?

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