回溯法 批處理作業排程 回溯法 批處理作業排程

2021-10-13 10:45:09 字數 1657 閱讀 4082

問題描述:

給定n個作業的集合j=(j1,j2,... ,jn)。每乙個作業ji都有兩項任務分別在2臺機器上完成。每個作業必須先有機器1處理,然後再由機器2處理。作業ji需要機器j的處理時間為tji。對於乙個確定的作業排程,設fji是作業i在機器j上完成處理時間。則所有作業在機器2上完成處理時間和f=f2i,稱為該作業排程的完成時間和。

簡單描述:

對於給定的n個作業,指定最佳作業排程方案,使其完成時間和達到最小。

舉例說明:

tji機器1

機器2作業1

作業2作業3

這3個作業的排程方案共有6種(即3個作業的全排列),分別是123,132,213,231,312,321,它們所相應的完成時間和分別是19,18,20,21,19,19。顯而易見,最佳排程方案是132,其完成時間和為18。

演算法設計:

從n個作業中找出有最小完成時間和的作業排程,所以批處理作業排程問題的解空間是一棵排列樹。按照回溯法搜尋排列樹的演算法框架,設開始時x=[1,2, ... , n]是所給的n個作業,則相應的排列樹由x[1:n]的所有排列構成。

類flowshop的資料成員記錄解空間的結點資訊,以便減少傳給backtrack的引數。二維陣列m是輸入作業的處理時間,bestf記錄當前最小完成時間和,bestx記錄相應的當前最佳作業排程。

在遞迴函式backtrack中,

當i>n時,演算法搜尋至葉子結點,得到乙個新的作業排程方案。此時演算法適時更新當前最優值和相應的當前最佳排程。

當i演算法描述:

注: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]

f1只有當前值有用,可以覆蓋賦值,所以定義為int型變數即可,減少空間消耗;f2需要記錄每個作業的處理時間,所以定義為int *型,以便計算得完成時間和。

4、f2[0]的初值

f2[i]的計算都是基於上乙個作業f2[i-1]進行的,所以要記得給f2平[0]賦值為0。

1 classflowshop2 ;15 void flowshop::backtrack(inti)16 23 else

24 26 bestvalue=xvalue;27 }28 else

29 46 }47 intmain()48 69

70 cout<>x2[i];75 }76

77 for (i=1;i<=number;i++)78 81 backtrace(1);82 cout<

批處理作業排程(回溯法)

1.問題描述 給定n個作業,集合j j1,j2,j3 每乙個作業ji都有兩項任務分別在2臺機器上完成。每個作業必須先有機器1處理,然後再由機器2處理。作業ji需要機器j的處理時間為tji。對於乙個確定的作業排程,設fji是作業i在機器j上完成處理時間。則所有作業在機器2上完成處理時間和,稱為該作業排...

批處理作業排程 回溯法

問題描述 給定n個作業,集合j j1,j2,j3 每乙個作業ji都有兩項任務分別在2臺機器上完成。每個作業必須先有機器1處理,然後再由機器2處理。作業ji需要機器j的處理時間為tji。對於乙個確定的作業排程,設fji是作業i在機器j上完成處理時間。則所有作業在機器2上完成處理時間和f f2i,稱為該...

批處理作業排程 回溯法

問題描述 給定n個作業,集合j j1,j2,j3 每乙個作業ji都有兩項任務分別在2臺機器上完成。每個作業必須先有機器1處理,然後再由機器2處理。作業ji需要機器j的處理時間為tji。對於乙個確定的作業排程,設fji是作業i在機器j上完成處理時間。則所有作業在機器2上完成處理時間和f f2i,稱為該...