印刷厂问题
【问题描述】
某印刷厂要尽快赶出下表中的42项任务,其中印刷车间和装订车间关于每项任务所需要的时间由表1表示。应如何安排任务的先后加工顺序,才能使完成所有任务的总工期最短?
表
1
印刷与装订时间表
任务
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
印刷时间
|
3
|
10
|
5
|
2
|
9
|
11
|
6
|
4
|
12
|
8
|
8
|
6
|
11
|
7
|
装订时间
|
8
|
12
|
9
|
6
|
5
|
2
|
9
|
7
|
3
|
4
|
10
|
7
|
10
|
9
|
任务
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
27
|
28
|
印刷时间
|
12
|
10
|
5
|
12
|
9
|
6
|
5
|
8
|
12
|
7
|
6
|
13
|
11
|
15
|
装订时间
|
8
|
12
|
7
|
16
|
8
|
11
|
4
|
6
|
8
|
9
|
10
|
10
|
12
|
18
|
任务
|
29
|
30
|
31
|
32
|
33
|
34
|
35
|
36
|
37
|
38
|
39
|
40
|
41
|
42
|
印刷时间
|
7
|
15
|
3
|
8
|
6
|
11
|
8
|
14
|
6
|
4
|
6
|
10
|
22
|
16
|
装订时间
|
6
|
11
|
4
|
9
|
3
|
7
|
11
|
15
|
8
|
5
|
7
|
8
|
16
|
17
|
设每项任务必须先完成印刷工序,然后才能进行装订,求
(1)各车间按1,
^,42的自然顺序工作时,每个任务K的完工时间。
(2)完成所有任务总工期最短的加工顺序。
(3)列出(1)和(2)两种不同加工顺序的完工时间对照表,讨论工厂按最优顺序加工时所面临的问题。你认为是否有更合理的加工顺序?
【编程方法】
(1) 用c编程如下:
(2) #include"iostream"
(3) using namespace std;
(4) #define N 42
(5) void main()
(6) {
(7) int a[N],b[N],sum=0,sum1=0;
(8)
(9) for(int i=0;i<N;i++)
(10) {
(11)
cin>>a[i];
(12) }
(13) cout<<endl;
(14)
(15) for(int k=0;k<N;k++)
(16) {
(17)
cin>>b[k];
(18) }
(19)
(20)
sum=sum1=a[0];
(21) cout<<"第"<<1<<"个任务加工时间"<<sum+b[0]<<endl;
(22)
(23) for(int j=0;j<N-1;j++)
(24) {
(25)
if((sum+b[j])>(sum1+a[j+1]))
(26)
{
(27)
sum=sum+b[j];
(28)
sum1=sum1+a[j+1];
(29)
cout<<"第"<<j+2<<"个任务加工时间"<<sum+b[j+1]<<endl;
(30)
}
(31)
else
(32)
{
(33)
sum=sum1+a[j+1];
(34)
sum1=sum1+a[j+1];
(35)
cout<<"第"<<j+2<<"个任务加工时间"<<sum+b[j+1]<<endl;
(36)
}
(37) }
(38) cout<<sum+b[N-1]<<endl;
(39) }
Johnson算法:
(1)
工件集分成两个不相交字集
j1
和
j2
,其中
j1={jk|p1k<p2k},j2={jk|p1k>p2k},
满足
p1k=p2k
的工件可以分在两个子集中的任何一个。
(2)
先将就中的工件按
p1k
的非降序排列,再将集中的工件按
p2
可得非增序排序。
【计算及结果】
(
1
)各车间按1,
^,42的自然顺序工作时,每个任务K的完工时间为:
任务
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
印刷时间
|
3
|
10
|
5
|
2
|
9
|
11
|
6
|
4
|
12
|
8
|
8
|
6
|
11
|
7
|
装订时间
|
8
|
12
|
9
|
6
|
5
|
2
|
9
|
7
|
3
|
4
|
10
|
7
|
10
|
9
|
完工时间K
|
11
|
25
|
34
|
40
|
45
|
47
|
56
|
63
|
66
|
74
|
88
|
95
|
105
|
114
|
任务
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
27
|
28
|
印刷时间
|
12
|
10
|
5
|
12
|
9
|
6
|
5
|
8
|
12
|
7
|
6
|
13
|
11
|
15
|
装订时间
|
8
|
12
|
7
|
16
|
8
|
11
|
4
|
6
|
8
|
9
|
10
|
10
|
12
|
18
|
完工时间K
|
122
|
136
|
143
|
159
|
167
|
178
|
1182
|
188
|
196
|
205
|
215
|
225
|
237
|
255
|
任务
|
29
|
30
|
31
|
32
|
33
|
34
|
35
|
36
|
37
|
38
|
39
|
40
|
41
|
42
|
印刷时间
|
7
|
15
|
3
|
8
|
6
|
11
|
8
|
14
|
6
|
4
|
6
|
10
|
22
|
16
|
装订时间
|
6
|
11
|
4
|
9
|
3
|
7
|
11
|
15
|
8
|
5
|
7
|
8
|
16
|
17
|
完工时间K
|
261
|
272
|
276
|
285
|
288
|
295
|
306
|
321
|
329
|
334
|
341
|
349
|
369
|
386
|
由上表格可知每个任务K的完工时间。
(2)
完成所有任务总工期最短的加工顺序为:
任务(新)
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
任务(原)
|
4
|
1
|
31
|
8
|
38
|
3
|
17
|
7
|
12
|
20
|
25
|
37
|
39
|
14
|
印刷时间
|
2
|
3
|
3
|
4
|
4
|
5
|
5
|
6
|
6
|
6
|
6
|
6
|
6
|
7
|
装订时间
|
6
|
8
|
4
|
7
|
5
|
9
|
7
|
9
|
7
|
11
|
10
|
8
|
7
|
9
|
完工时间K
|
40
|
11
|
276
|
63
|
334
|
34
|
143
|
56
|
95
|
178
|
215
|
329
|
341
|
114
|
任务(新)
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
27
|
28
|
|
|
任务(原)
|
24
|
11
|
32
|
35
|
2
|
16
|
27
|
18
|
36
|
28
|
42
|
41
|
30
|
13
|
|
|
印刷时间
|
7
|
8
|
8
|
8
|
10
|
10
|
11
|
12
|
14
|
15
|
16
|
22
|
15
|
11
|
|
|
装订时间
|
9
|
10
|
9
|
11
|
12
|
12
|
12
|
16
|
15
|
18
|
17
|
16
|
11
|
10
|
|
|
任务(新)
|
29
|
30
|
31
|
32
|
33
|
34
|
35
|
36
|
37
|
38
|
39
|
40
|
41
|
42
|
任务(原)
|
26
|
15
|
19
|
23
|
40
|
34
|
22
|
29
|
5
|
10
|
21
|
9
|
33
|
6
|
印刷时间
|
13
|
12
|
9
|
12
|
10
|
11
|
8
|
7
|
9
|
8
|
5
|
12
|
6
|
11
|
装订时间
|
10
|
8
|
8
|
8
|
8
|
7
|
6
|
6
|
5
|
4
|
4
|
3
|
3
|
2
|
概括可得结果:
(4,1,31,8,38,3,17,7,12,20,25,37,39,14,
24,11,32,35,2,16,27,18,36,28,42,41,30,13,
26,15,19,23,40,34,22,29,5,10,21,9,33,6)。
(3)
(1)和(2)两种不同加工顺序的完工时间对照表
任务
|
1
|
2
|
3
|
4
|
5
|
6
|
7
|
8
|
9
|
10
|
11
|
12
|
13
|
14
|
T1
|
11
|
25
|
34
|
40
|
45
|
47
|
56
|
63
|
66
|
74
|
88
|
95
|
105
|
114
|
T2
|
16
|
160
|
41
|
8
|
353
|
371
|
57
|
27
|
364
|
357
|
128
|
64
|
287
|
109
|
任务
|
15
|
16
|
17
|
18
|
19
|
20
|
21
|
22
|
23
|
24
|
25
|
26
|
27
|
28
|
T1
|
122
|
136
|
143
|
159
|
167
|
178
|
1182
|
188
|
196
|
205
|
215
|
225
|
237
|
255
|
T2
|
305
|
172
|
48
|
200
|
313
|
75
|
361
|
342
|
321
|
118
|
85
|
297
|
184
|
233
|
任务
|
29
|
30
|
31
|
32
|
33
|
34
|
35
|
36
|
37
|
38
|
39
|
40
|
41
|
42
|
T1
|
261
|
272
|
276
|
285
|
288
|
295
|
306
|
321
|
329
|
334
|
341
|
349
|
369
|
386
|
T2
|
348
|
277
|
20
|
137
|
367
|
336
|
148
|
215
|
93
|
32
|
100
|
329
|
266
|
250
|
由表可知,用最优法得到的时间中,单项任务的完成时间大于顺序法完成时间的数目多。这个是个问题。
优化方案:在johnson算法排序的基础上,将各项按不同的时间段划分作一类,分成n类。每类内部采用最少总时间的算法。