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,稱為該...