簡體   English   中英

調度算法

[英]Scheduling algorithm

我有一個調度問題,新作業(執行順序連接的任務集)每隔幾秒左右到達。
每個作業都需要以已知的時間間隔分配一些資源。
例如:
作業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 等之間的等待周期的長度。

時間表示例
在示例中,新作業 j2 在 j1 執行開始后立即被調度。 j2 的最早開始時間是 t1。 一項作業可能需要幾分鍾的執行時間,其中大部分是等待。

我有一個調度程序,它查看當前的預訂表,並決定哪個是具有固定分配時間和等待期的新作業的最早可能開始時刻,並相應地進行預訂。

(但實際上,等待期並不需要固定 - 但在某個百分比范圍內(可能是 5%),並且可能存在資源使用的替代方案,例如,如果資源 r3.1 被預訂,則 3.2 可能是用於實現相同的目的。)

但是,如果需要調度程序(是的,建議)能夠在新作業到達時動態調整所有調度分配,以利用等待時間來最大化完成的總工作量(在一天內)不需要完全按照給定的方式和一些資源重復(3.1/3.2)並行執行的可能性,那么我將研究一個完全不同的調度方案(而不是我目前的盡可能快的方法)。

  1. 那你會稱之為什么調度方案?
  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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM