[英]Scheduling algorithm
我有一個調度問題,新作業(執行順序連接的任務集)每隔幾秒左右到達。
每個作業都需要以已知的時間間隔分配一些資源。
例如:
作業j1
是一組任務,我們按照已知的調度模式為其預留資源{r1, r2, r3}
:
r1:[t0 .. t1=t0+td1],
r2:[t2=t1+td2+i2 .. t3=t2+td3]
在示例中,新作業 j2 在 j1 執行開始后立即被調度。 j2 的最早開始時間是 t1。 一項作業可能需要幾分鍾的執行時間,其中大部分是等待。
我有一個調度程序,它查看當前的預訂表,並決定哪個是具有固定分配時間和等待期的新作業的最早可能開始時刻,並相應地進行預訂。
(但實際上,等待期並不需要固定 - 但在某個百分比范圍內(可能是 5%),並且可能存在資源使用的替代方案,例如,如果資源 r3.1 被預訂,則 3.2 可能是用於實現相同的目的。)
但是,如果需要調度程序(是的,建議)能夠在新作業到達時動態調整所有調度分配,以利用等待時間來最大化完成的總工作量(在一天內)不需要完全按照給定的方式和一些資源重復(3.1/3.2)並行執行的可能性,那么我將研究一個完全不同的調度方案(而不是我目前的盡可能快的方法)。
您可能正在處理 RCPSP(資源受限的項目調度問題)。 解決方案技術范圍從 integer 編程和約束編程到各種啟發式。 該技術取決於諸如計划范圍、任務/作業如何使用/共享資源、您需要多快的解決方案時間表等細節。
看:
https://developers.google.com/optimization/scheduling/job_shop
http://www.laas.fr/files/ROC/2014-Presentations/MILP-RCPSP-PMS2014.pdf
至於您關於“資源使用的替代方案”的問題:
解決這類問題最常用的模式是Object 池模式
最廣為人知的例子可能是ThreadPool
我建議您使用int GetResource(ResourceType type, int durationInSeconds)
方法實現ResourcePool
class。 返回值指示給定ResourceType
的下一個資源何時可用
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.