流水作業排程(動態規劃)

2021-08-07 17:09:15 字數 1717 閱讀 7880

【問題描述】

n個作業在2臺機器m1和m2組成的流水線上完成加工。每個作業加工的順序都是現在m1上加工,後在m2上加工,在兩台機器上加工的時間分別為ai和bi。

【目標】

確定這n個作業的加工順序,使得從第一台作業開始加工,到最後乙個作業完成加工所需時間最少。

【演算法描述】

流水作業排程問題的johnson法則

(1)令

(2)將n1中作業依 t[i,1]的非減序排列,將n2中作業依 t[i,2]的非增序排列。

【問題分析】

當輸入作業數目為6:

每個作業在m1上執行時間為t[i,1],在m2上執行時間為t[i,2],輸入資料為:

演算法按照先執行的作業,保證m2機器上沒有等待,本例中作業1、4、5滿足條件,被選擇先執行。當選擇第乙個作業時,演算法選擇讓m2第一次等待時間最少的那個,本例中作業1的t[i,1]最小,這樣就可以讓m2第一次等待最少,所以在的集合中,t[i,1]越小越靠前執行。

當執行的作業時,要保證最後乙個作業在m2上的執行時間最短,所以作業2,6,3是按照t[i,2]非增序排列,保證了作業3的t[i,2]是他們三中最小的乙個。

作業執行次序為:1,4,5,2,6,3

1)執行1時:m1上執行2個時間後交給m2,這時m2空閒了2個時間並開始工作。 

所以此時要想將1做完需要7(2+5)個時間。 

2)執行4時:m1上執行4個時間後,m2還在繼續執行1,並沒有結束。m1結束時間為6,而m2結束1的時間為7,即<6,7>。 

所以此時要想把1,4做完,需要14(7+7)個時間。 

3)執行5時:m1上執行6個時間後,m2還在繼續執行4,並沒有結束。m1的結束時間為12,而m2結束4的時間為14,即<12,14> 

所以此時要想把1,4,5做完,需要23(14+9)個時間。 

4)執行2時:m1上執行7個時間後,m2還在繼續執行5,並沒有結束。m1的結束時間為19,而m2結束5的時間為23,即<19,23>. 

所以此時要想把1,4,5,2做完,需要26(23+3)個時間。 

5)執行6時:m1上執行8個時間後,m2已經不在繼續執行2。m1的結束時間為27,而m2結束2的時間為26,即此時m2已經空閒了乙個時間,即<27,26>. 

所以此時要想把1,4,5,2,6完成,需要29(27+2)個時間。 

6)執行3時:m1上執行6個時間後,m2已經不在繼續執行6。m1的結束時間為33,而m2結束6的時間為29,即此時m2已經空閒了3個時間,即<33,29>. 

所以此時要把1,4,5,2,6,3完成,需要35(33+2)個時間。

所以,根據執行結果,作業執行時間為35.

/*

1)先執行t[i,1]=t[i,2]時,要保證最後乙個作業在m2上執行時間最短,所以按照減序排列

*/#include#include#include#include#define n 100

using namespace std;

struct node ;

bool cmp(node a, node b)

for (i = 0; ib[i] ? b[i] : a[i];

c[i].index = i;

c[i].group = a[i] <= b[i];

} sort(c, c + n, cmp);//按照c中作業時間增序排序

j = 0, k = n - 1;

for (i = 0; i

**

流水作業排程 動態規劃

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

流水作業排程

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

流水作業排程

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