問題描述:
給定n個作業,集合j=(j1,j2,j3)。每乙個作業ji都有兩項任務分別在2臺機器上完成。每個作業必須先有機器1處理,然後再由機器2處理。作業ji需要機器j的處理時間為tji。對於乙個確定的作業排程,設fji是作業i在機器j上完成處理時間。則所有作業在機器2上完成處理時間和f=f2i,稱為該作業排程的完成時間和。
簡單描述:
對於給定的n個作業,指定最佳作業排程方案,使其完成時間和達到最小。
演算法設計:
從n個作業中找出有最小完成時間和的作業排程,所以批處理作業排程問題的解空間是一棵排列樹。
類flowshop的資料成員記錄解空間的結點資訊,m輸入作業時間,bestf記錄當前最小完成時間和,bestx記錄相應的當前最佳作業排程。
在遞迴函式backtrack中,
當i>n時,演算法搜尋至葉子結點,得到乙個新的作業排程方案。此時演算法適時更新當前最優值和相應的當前最佳排程。
當i演算法描述:
classflowshop
;void flowshop::backtrack(int
i)
else
f1 -= m[x[j]][1
]; f -=f2[i];}}
}int flow(int * * m,int n,int
bestx)
x.backtrack(1);
delete x x;
delete x f2;
return
x.bestf;
}
例項**:
#include usingnamespace
std;
#define max 200
int* x1;//
作業ji在機器1上的工作時間;
int* x2;//
作業ji在機器2上的工作時間;
int number=0;//
作業的數目;
int* xorder;//
作業順序;
int* bestorder;//
最優的作業順序;
int bestvalue=max;//
最優的時間;
int xvalue=0;//
當前完成用的時間;
int f1=0;//
機器1完成的處理時間;
int* f2;//
第i階段機器2完成的時間;
void backtrace(int
k) bestvalue=xvalue;
}else
swap(xorder[i],xorder[k]);
xvalue-=f2[k];
f1-=x1[xorder[i]];}}
}int
main()
cout
<<"
"
for (i=1;i<=number;i++)
backtrace(1);
cout
<<"
最節省的時間為:
"
<<"
對應的方案為:";
for (i=1;i<=number;i++)
return0;
}
回溯法 批處理作業排程 回溯法 批處理作業排程
問題描述 給定n個作業的集合j j1,j2,jn 每乙個作業ji都有兩項任務分別在2臺機器上完成。每個作業必須先有機器1處理,然後再由機器2處理。作業ji需要機器j的處理時間為tji。對於乙個確定的作業排程,設fji是作業i在機器j上完成處理時間。則所有作業在機器2上完成處理時間和f f2i,稱為該...
批處理作業排程(回溯法)
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,稱為該...