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

2021-10-16 23:50:31 字數 1885 閱讀 5708

回溯法之批處理作業排程

1. 問題描述

​n個作業集合。每個作業先由機器1處理,再由機器2處理。作業i需要機器j處理的時間為mij 。

mij機器1

機器2作業1

作業2作業3

​對於乙個確定的作業排程,設fij 是作業i在機器j上完成的具體時間。所有作業在機器2上完成的具體時間(時刻)之和f稱為該作業排程的完成時間和。

​要求:對於給定的n個作業,制定最佳作業排程方案(乙個排列),使其完成時間和達到最小

2. 問題分析

​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。

​fi1、fi2表示事件i分別在機器1和機器2上完成的時間。

作業順序

fi1fi2

fbegin

​假設此時1-2-3的作業排程已經完成計算,遍歷到了1-3-2的序列。

​首先是①,將呼叫f1 += m[x[j]][1];表示作業1在機器1需要2時間才能完成,接下來使用f2[i] = ((f2[i - 1] > f1) ? f2[i - 1] : f1) + m[x[j]][2];比較f02 和 f11 的大小,即需要等待前乙個作業在機器2完成計算才能在機器2開始本次作業,再使用f02 和 f11的較大值f11+作業2在機器2的工作時間1得到f12為3,在使用f += f2[i],將3賦值給f。

​到③,呼叫f1 += m[x[j]][1];,f21變為2+2=4,再比較f12和f21,將較大的f21+3=7賦值給f22。f變為10。

​到②,f31變為7,比較f22和f31,將7+1=8複製給f32,最終將f變為18,得到最終結果。

3. **求解

​該問題的解空間:排列樹:

​使用到的全域性變數:

m 各作業所需的處理時間

x 當前作業排程

bestx 當前最優作業排程

f2 機器2完成的處理時間

f1 機器1完成的處理時間

f 完成時間和

bestf 當前最優值

n 作業數

​核心求解**:

void backtrack(int i) else else {

// 若沒找到此時的最優解,則對當前的求解樹的子節點遍歷求解

for (int j = i; j <= n; j++) {

f1 += m[x[j]][1];

f2[i] = ((f2[i - 1] > f1) ? f2[i - 1] : f1) + m[x[j]][2];

f += f2[i];

if (f < bestf) {

swap(i, j);

backtrack(i + 1);

swap(i, j);

f1 -= m[x[j]][1];

f -= f2[i];

void main() {

n = 3;

bestf = int_max;

m[1][1] = 2;m[1][2] = 1;

m[2][1] = 3;m[2][2] = 1;

m[3][1] = 2;m[3][2] = 3;

for (int i = 0; i <= n; i++) {

f2[i] = 0;

x[i] = i;

backtrack(1);

printf("%d\n", bestf);

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

printf("%d ", bestx[i]);

if (i != n)

printf("-> ");

printf("\n");

system("pause");

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

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

回溯法之批處理作業排程

n個作業集合。每個作業先由機器1處理,再由機器2處理。作業i需要機器j處理的時間為mij mij機器1 機器2作業121 作業23 1作業323 對於乙個確定的作業排程,設fij 是作業i在機器j上完成的具體時間。所有作業在機器2上完成的具體時間 時刻 之和f稱為該作業排程的完成時間和。要求 對於給...

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

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