一、問題描述
在單處理器上具有期限和懲罰的單位時間任務調度問題。
二、算法原理
任務調度問題就是給定一個有窮單位時間任務的集合S,集合S中的每個任務都有一個截止期限di和超時懲罰wi,需要找出集合S的一個調度,使得因任務誤期所導致的總懲罰最小,這個調度也稱為S的一個最優調度。
實現任務的最優調度主要就是利用貪心算法中擬陣的思想。如果S是一個帶期限的單位時間任務的集合,且I是所有獨立的任務集構成的結合,則對應的系統M=(S,I)是一個擬陣。利用擬陣解決任務調度問題的算法原理主要就是將最小化遲任務的懲罰之和問題轉化為最大化早任務的懲罰之和的問題,也就是說在任務調度的時候優先選擇當前任務序列中懲罰最大的任務。這里,假設集合A存放任務的一個調度。如果存在關於A中任務的一個調度,使得沒有一個任務是遲的,稱任務集合A是獨立的。實現該問題的貪心算法如下:
A <- Ø
Sort S[M] into monotonically decreasing order by w
for each x∈S[M]
do if AU{x} ∈ I[M]
then A <- AU{x}
初始時A為空集,然后對S中的所有任務按懲罰大小降序排序,然后進入循環。循環的過程中依次訪問S的中所有任務,然后進行獨立性檢查,如果當前任務x加入集合A之后A依然是獨立的,則將A置為AU{x},否則檢查下一個任務直到掃描結束,最后所得到的集合A即是一個最優子集,然后進行相應的調整得到最后的輸出。
三、實驗數據
(1)任務調度問題的輸入:
a) 任務的數量n,即表示當前任務集合S={a1,a2,a3……an};
b) n個任務的期限d1,d2,d3……dn,每個任務的di滿足1≤ di ≤n,且任
務要求ai在di之前完成;
c) n個任務的權(懲罰)w1,w2,w3……wn。表示任務ai如果沒在時間di
之前完成,則導致懲罰wi,如果任務在期限之前完成,則沒有懲罰; 同時在本實驗中,還會將每個wi值替換為max{w1,w2,w3……wn}-wi,並運行算法進行第二次實驗,然后比較兩次實驗所得結果。
在本次實驗中,n取值為7,每個任務的期限為4,2,4,3,1,4,6,對應的懲罰為70,60,50,40,30,20,10。
(2)任務調度問題的輸出:
a) 貪心算法所選的任務以及放棄的任務,所選的任務即表示最終會在期限
內完成的任務。放棄的任務表示最終會因誤期而受到懲罰的任務。
b) 最終的最優調度序列
c) 最優調度所帶來的總的懲罰數
四、實驗截圖
五、源代碼
下載鏈接:http://download.csdn.net/detail/zhh1992/8359281