裝配線排程

2021-06-17 00:46:03 字數 1909 閱讀 3186

問題描述:

汽車生產工廠共有兩條裝配線,每條有n個裝配站;裝配線i 的第j 個裝配站表示為si,j,在該站的裝配時間為ai,j。乙個汽車底盤進入工廠,然後進入裝配線i(i 為1或2),花費時間為ei。在通過一條線的第j 個裝配站後,這個底盤來到任一條線的第(j+1)個裝配站。如果它留在相同的裝配線,則沒有移動開銷;如果它移動到另一條線上,則花費時間為ti,j。在離開一條線的第n個裝配站後,完成的汽車花費時間xi 離開工廠。確定應該在裝配線1內選擇哪些站,在裝配線2內選擇哪些站,才能使汽車通過工廠的總時間最小。

問題分析:

初看該問題,最簡單的解決方案就是遍曆法,在遍歷的過程中得出最小時間。但應當看到,當站點數n較大時,需要遍歷2的n次方條路線,效率是較低的。那麼,有沒有效率更高的解決方案呢?

為了方便分析問題,我們為該問題建立乙個簡單的數學模型。假設通過裝配站j的最短總時間為f(j),通過裝配站j的最短路線選擇的裝配線是r(j)(r(j)的值為1或2),則汽車通過工廠的總時間為f=f(n)+x(r(n))。那麼,現在關鍵的問題就是要計算出f(n)和r(n)。汽車通過裝配站n的路線中也必然通過了裝配站n-1,我們可以來看看通過裝配站n的最短總時間f(n)和選擇的裝配線r(n)與通過裝配站n-1的最短總時間f(n-1)和選擇的裝配線r(n-1)之間有沒有什麼關聯。通過分析應當不難得出,如果計算出了f(n-1)和r(n-1),則f(n)就是f(n-1)加上從第n-1個裝配站到第n個裝配站的最短時間。而知道了r(n-1),計算從第n-1個裝配站到第n個裝配站的最短時間是非常容易的,記!r(j)為另一條裝配線,則只需要找出a(r(n-1),n)和a(!r(n-1),n)+t(r(n-1), n-1)中的較小值即可

由此得出下列規劃方程:

int n; // 乙個裝配線上有n個裝配站

int e1, e2; // 進入裝配線1,2需要的時間

int x1, x2; // 離開裝配線1,2需要的時間

int t[3][100]; // t[1][j]表示底盤從s[1][j]移動到s[2][j+1]所需時間,同理t[2][j]

int a[3][100]; // a[1][j]表示在裝配站s[1][j]所需時間

int f1[100], f2[100]; // f1[j], f2[j]分別表示在第一/第二條裝配線上第j個裝配站的最優解

int ln1[100], ln2[100];// ln1[j]記錄第一條裝配線上,最優解時第j個裝配站的前乙個裝配站是第一條線還是第二條線上

int f, ln; // 最優解是,f代表最小花費時間,ln表示最後出來時是從裝配線1還是裝配線2

void dp()

else

// 處理第二條裝配線的最優子結構

if(f2[j-1] + a[2][j] <= f1[j-1] + t[1][j-1] + a[2][j])

else

}if(f1[n] + x1 <= f2[n] + x2)

else }

void printstation()}

int main() /*

92 3

3 51 2 4 1 5 2 3 5 4

2 5 6 3 4 8 1 5 4

3 2 5 4 2 6 8 1

1 2 3 6 5 2 3 4

93 5

2 32 5 6 3 4 8 1 5 4

1 2 4 1 5 2 3 5 4

1 2 3 6 5 2 3 4

3 2 5 4 2 6 8 1

*/

裝配線排程問題

有兩條裝配線,編號分別為1和2。每一條裝配線上有個n裝配點,將第i條線上的第個j裝配點記為si,j,設在裝配點si,j的裝配時間為ai,j。假設要裝配一輛汽車,將汽車底盤從進廠點送入第i號裝配線,需要時間ei。在裝配點si,j裝配後,如果汽車傳送到同一號裝配線的裝配點si,j 1進行裝配,則傳送不需...

裝配線排程問題

裝配一輛汽車,有兩條裝配線分別有n個裝配點,每條裝配線在進出所花時間為e i x i i 0,1 每個裝配點所需時間a i j i 0,1 j 0,1,n 1 從一條裝配線i的第j個裝配點到另一條裝配線的第j 1個裝配點所需時間t i j 對於圖來說 截至 演算法導論 s1,1 處所需時間 e1 a...

動態規劃 裝配線排程問題

這個問題是在演算法導論的動態規劃章節有提到,由於問題敘述起來太繁雜就直接省略。命名規則與書上的偽 是一致的,只是用c 具體語言實現了而已。動態規劃問題 裝配線排程問題 pragma once class asl include alspro.h include include using names...