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

2021-07-09 03:18:23 字數 1439 閱讀 7990

1.問題描述:

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

簡單描述:

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

2.演算法設計:

------從n個作業中找出有最小完成時間和的作業排程,所以批處理作業排程問題的解空間是一棵排列樹。

類flowshop的資料成員記錄解空間的結點資訊,m輸入作業時間,bestf記錄當前最小完成時間和,陣列bestx記錄相應的當前最佳作業排程。

陣列x[i],bestx[i],二維陣列m[j][i];

陣列x記錄當前排程;

bestx記錄當前最優排程;

初始時,x[i]=i ;      bestx[i]=∞;     (i=0,1,......,n)

二維陣列m記錄各作業分別在兩台機器上的處理時間;

m[j][i]表示在第i臺機器上作業j的處理時間

變數f1,f2,cf,bestf;

f1記錄作業在第一台機器上的完成時間和;

f2記錄作業在第一台機器上的完成時間和;

cf記錄當前在第二台機器上的完成時間和;

bestf記錄當前最優排程的完成時間和;

示例:tji 

機器1 

機器2作業1 2 1

作業2 3 1

作業3 2 3

最優排程順序:1 3 2

在遞迴函式backtrack中,

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

當i<=n時,當前擴充套件結點在i層,以深度優先方式,遞迴的對相應子樹進行搜尋,對不滿足上界約束的結點,則剪去相應的子樹。

3.**:

#includeusing namespace std;

int x[100],bestx[100],m[100][100];

int f1=0,f2=0,cf=0,bestf=10000,n;

void backtrack(int t)

{ int tempf,j;

if(t>n) //到達葉子結點,搜尋到最底部

{if(cff2?f1:f2)+m[x[j]][2];//儲存當前作業在機器2的完成時間

cf+=f2; //在機器2上的完成時間和

if(cf>n;

cout<<"請輸入在各機器上的處理時間"<>m[j][i];

for(i=1; i<=n; i++)

x[i]=i;

backtrack(1);

cout<<"排程作業順序:"<

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

問題描述 給定n個作業的集合j j1,j2,jn 每乙個作業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,稱為該...

批處理作業排程 回溯法

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