流水作業排程問題

2021-10-09 23:18:18 字數 1519 閱讀 2168

有n個作業要在兩台機器m1和m2組成的流水線上完成加工。每個作業i 都必須先花時間ai 在m1上加工,然後花時間bi 在m2上加工。

求解n個作業的加工順序,使得總的加工時間最短。

最優排程: 讓m1沒有空閒, m2的空閒時間盡量短。

設s1 為 a < b的作業集合,s2為 a >= b 的作業集合,將s1的作業按a 遞增序排序,s2 中的作業按照b 遞減序排序,則最優順序為 s1(排序後) + s2(排序後)

加工生產排程

某工廠收到了n個產品的訂單,這n個產品分別需用a,b兩台工具機加工,並且必須先在a工具機加工後才可以送到b工具機加工。

某個產品i在a,b兩工具機加工的時間分別為ai,bi。怎樣安排這n個產品的加工順序,才能使總的加工時間最短?這裡所說的加工時間是指:從開始加工第乙個產品到所有的產品都已在a,b兩台工具機加工完畢的時間。

【輸入格式】:

第一行僅乙個資料n,表示產品的數量。(0貪心策略:

設 ei = min。並構建最優作業加工順序集合 s = 。

將e按照從小到大的順序排序,然後從第1個開始處理,若 ei = ai ,則將它排在s集合從頭開始的作業後面,若無首作業,則它就成為s的首作業,若 ei = bi , 則將它排在從尾開始的作業前面,若無尾作業,則它成為s的尾作業。

//參考程式

#include

using

namespace std;

int ans[

1005

],n,k,i,j,t,a[

1005];

int b[

1005

],m[

1005

],s[

1005];

void

read()

;void

solve()

;int

main()

void

read()

void

solve()

for(i =

1;i <= n-

1; i++

)//按產品的加工順序從小到大排序

for(j = i+

1; j <= n; j++)if

(m[i]

>m[j])

k=0; t= n+1;

for(i=

1;i<=n;i++

)//安排產品的加工順序

if(m[i]

== a[s[i]])

else

t=0;k=0;

//k為a加工時間,t為b加工時間

for(i=

1; i <= n; i++

)//模擬計算最少加工時間

cout << t << endl;

for(i =

1; i<=n;i++

) cout << ans[i]

<<

" ";

cout << endl;

}

流水作業排程問題

流水作業排程問題 n個作業在2 臺機器上m1和 m2組成的流水線上完成加工。每個作業加工的順序都是先在 m1上加工,後在 m2上加工。在兩台機器上加工的時間分別為ai和 bi。解 流水作業排程 根據johnson法則 使用結構體陣列f1 j 存放a i 使用結構體陣列f2 k 存放a i b i 的...

流水作業排程問題

n個作業在2臺機器上m1和m2組成的流水線上完成加工。每個作業加工的順序都是先在m1上加工,後在m2上加工。在兩台機器上加工的時間分別為ai和bi。目標 確定這n個作業的加工順序,使得從第一台作業開始加工,到最後乙個作業完成加工所需要的時間最少。假設要對集合s中的作業進行加工,當m1開始加工時,假設...

流水作業排程問題

n個作業要在由2臺機器m1和m2組成的流水線上完成加工。每個作業加工的順序都是先在m1上加工,然後在m2上加工。m1和m2加工作業i所需的時間分別為a i 和b i 流水作業排程問題要求確定這n個作業的最優加工順序,使得從第乙個作業在機器m1上開始加工,到最後乙個作業在機器m2上加工完成所需的時間最...