回溯法之批處理作業排程

2022-06-08 16:00:08 字數 2289 閱讀 6897

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

mij機器1

機器2作業121

作業23

1作業323

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

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

​ 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

fbegin00

0①23

3③47

10②78

18​ 假設此時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,得到最終結果。

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

​ 使用到的全域性變數:

m        各作業所需的處理時間

x 當前作業排程

bestx 當前最優作業排程

f2 機器2完成的處理時間

f1 機器1完成的處理時間

f 完成時間和

bestf 當前最優值

n 作業數

​ 核心求解**:

void backtrack(int i) 

} else

// 本條路徑求解結束後回退到原本的狀態

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

f -= f2[i];}}

}

/**

* 回溯法求解批處理作業排程問題

* * 主要由backtrack函式遞迴呼叫求解問題

* 使用bsetf儲存最優解,bestx儲存最優的作業排程序列

**/#include #include #define maxrow 4

#define maxcol 3

/** * m 各作業所需的處理時間

* x 當前作業排程

* bestx 當前最優作業排程

* f2 機器2完成的處理時間

* f1 機器1完成的處理時間

* f 完成時間和

* bestf 當前最優值

* n 作業數

**/int m[maxrow][maxcol], x[maxrow], bestx[maxrow], f2[maxrow], f1, f, bestf, n;

// 值交換函式

void swap(int i, int j)

void backtrack(int i)

} else

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

f -= f2[i];}}

}void main()

backtrack(1);

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

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

printf("\n");

system("pause");

}

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

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

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

回溯法之批處理作業排程 1.問題描述 n個作業集合。每個作業先由機器1處理,再由機器2處理。作業i需要機器j處理的時間為mij mij機器1 機器2作業1 作業2作業3 對於乙個確定的作業排程,設fij 是作業i在機器j上完成的具體時間。所有作業在機器2上完成的具體時間 時刻 之和f稱為該作業排程的...

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

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