1、問題描述
每乙個作業ji都有兩項任務分別在2臺機器上完成。每個作業必須先有機器1處理,然後再由機器2處理。作業ji需要機器j的處理時間為tji。對於乙個確定的作業排程,設fji是作業i在機器j上完成處理時間。則所有作業在機器2上完成處理時間和f是指把f2i將i從1-n求和,稱為該作業排程的完成時間和。
2、簡單描述
對於給定的n個作業,指定最佳作業排程方案,使其完成時間和達到最小。
區別於流水線排程問題:批處理作業排程旨在求出使其完成時間和達到最小的最佳排程序列;
流水線排程問題旨在求出使其最後乙個作業的完成時間最小的最佳排程序列;
例:設n=3,考慮以下例項:
這3個作業的6種可能的排程方案是1,2,3;1,3,2;2,1,3;2,3,1;3,1,2;3,2,1;它們所相應的完成時間和分別是19,18,20,21,19,19。易見,最佳排程方案是1,3,2,其完成時間和為18。那麼具體的完成時間和是怎麼計算的呢?將在第3部分舉例說明中詳細描述。
3、舉例說明
4、演算法設計
批處理作業排程問題要從n個作業的所有排列中找出有最小完成時間和的作業排程,所以批處理作業排程問題的解空間是一顆排列樹。
按照回溯法搜尋排列樹的演算法框架,設開始時x=[1,2, ... , n]是所給的n個作業,則相應的排列樹由x[1:n]的所有排列(所有的排程序列)構成。
二維陣列m是輸入作業的處理時間,bestf記錄當前最小完成時間和,bestx記錄相應的當前最佳作業排程。
在遞迴函式backtrack中,
當i>n時,演算法搜尋至葉子結點,得到乙個新的作業排程方案。此時演算法適時更新當前最優值和相應的當前最佳排程。
當i
5、演算法分析
【前期準備】
1、區分作業i和當前第i個正在執行的作業
給x賦初值,即其中一種排列,如x=[1,3,2];m[x[j]][i]代表當前作業排程x排列中的第j個作業在第i臺機器上的處理時間;如m[x[2]][1]就意味著作業3在機器1上的處理時間。
2、bestf的初值
此問題是得到最佳作業排程方案以便使其完成時間和達到最小,所以當前最優值bestf應該初始化賦值為較大的乙個值。
3、f1、f2的定義與計算
假定當前作業排程排列為:x=[1,2,3];f1[i]即第i個作業在機器1上的處理時間,f2[j]即第j個作業在機器2上的處理時間;則:
f1[1]=m[1][1] , f2[1]=f1[1]+m[1][2]
f1[2]=f1[1]+m[2][1] , f2[2]=max(f2[1],f1[2])+m[2][2] //f2[2]不光要等作業2自己在機器1上的處理時間,還要等作業1在機器2上的處理時間,選其大者。
f1[3]=f1[2]+m[3][1] , f2[3]=max(f2[2],f1[3])+m[3][2]
1只有當前值有用,可以覆蓋賦值,所以定義為int型變數即可,減少空間消耗;f2需要記錄每個作業的處理時間,所以定義為int *型,以便計算得完成時間和。
4、f2[0]的初值
f2[i]的計算都是基於上乙個作業f2[i-1]進行的,所以要記得給f2[0]賦值為0。
6.**實現
#includeusingview codenamespace
std;
int x[100]; //
當前作業排程————其中一種排列順序
int bestx[100]; //
當前最優作業排程
int m[100][100];//
各作業所需的處理時間
//m[j][i]代表第j個作業在第i臺機器上的處理時間
int f1=0;//
機器1完成處理時間
int f2=0;//
機器2完成處理時間
int cf=0;//
完成時間和
int bestf=10000;//
當前最優值,即最優的處理時間和
int n;//
作業數void swap(int &a,int &b)
void backtrack(int
t) }
else
//非葉子結點
//回溯需要還原各個值
f1-=m[x[j]][1
]; cf-=f2;
f2=tempf;
}}}
intmain()
/*測試資料:
32 3 2
1 1 3
32 5 4
3 2 1
*/
7.實現結果
回溯法 批處理作業排程 回溯法 批處理作業排程
問題描述 給定n個作業的集合j j1,j2,jn 每乙個作業ji都有兩項任務分別在2臺機器上完成。每個作業必須先有機器1處理,然後再由機器2處理。作業ji需要機器j的處理時間為tji。對於乙個確定的作業排程,設fji是作業i在機器j上完成處理時間。則所有作業在機器2上完成處理時間和f f2i,稱為該...
回溯法 批處理作業排程 回溯法之批處理作業排程
回溯法之批處理作業排程 1.問題描述 n個作業集合。每個作業先由機器1處理,再由機器2處理。作業i需要機器j處理的時間為mij mij機器1 機器2作業1 作業2作業3 對於乙個確定的作業排程,設fij 是作業i在機器j上完成的具體時間。所有作業在機器2上完成的具體時間 時刻 之和f稱為該作業排程的...
回溯法 批處理作業排程問題
給定n個作業的集合j j1,j2,jn 每乙個作業ji都有兩項任務分別在2臺機器上完成。每個作業必須先由機器1處理,然後再由機器2處理。作業ji需要機器j的處理時間為tji i 1,2,n j 1,2。對於乙個確定的作業排程,設fji是作業i在機器j上完成處理的時間。則所有作業在機器2上完成處理的時...