用Lingo软件运算运筹学作业题
有X,Y,Z三种产品需要生产,其中每道工序(除了工序3和工序6)只能同时生产一种产品(即假如工序1正在生产Y,那此时工序1不能同时生产X或者Z),而工序3和工序6为保温工序,可以一起保温。产品必须按照工序的顺序生产,其中X距离交货期还有50个小时,Y离交货期还有60个小时,Z距离交货期还有80个小时。如何安排生产使所花时间最少,
各产品在各工序生产时间如下表:
工 工序1 工序2 工序3 工序4 工序5 工序6 工序7 工序8 工序9 工序10 序 产 品
X 2 1 3 5 4 7 8 4 3 1 Y 3 5 3 6 8 7 4 5 3 2 Z 4 3 3 4 3 7 5 5 4 3
model:
sets:
p/1..3/:a,b;
no/1..10/;
m(p,no):xyz,v,go;
u(p,p):w;
endsets
data:
xyz=2 1 3 5 4 7 8 4 3 1
3 5 3 6 8 7 4 5 3 2
4 3 3 4 3 7 5 5 4 3;
a=50
60
80;
enddata
min=go(3,10);
@for(p(i):@sum(p(j):w(i,j))=1); @for(p(j):@sum(p(i):w(i,j))=1); @for(u(i,j):@bin(w));
@for(m(i,j):v(i,j)=@sum(p(k):w(i,k)*xyz(k,j)));
@for(p(i):b(i)=@sum(p(k):w(i,k)*a(k)));
go(1,1)=v(1,1);
@for(no(j)|j#GT#1:go(1,j)=go(1,j-1)+v(1,j)); @for(p(i)|i#GT#1:go(i,1)=go(i-1,1)+v(i,1)); go(2,2)=@smax(go(1,2),go(2,1))+v(2,2); go(3,2)=@smax(go(2,2),go(3,1))+v(3,2); go(2,3)=go(2,2)+v(2,3);
go(3,3)=go(3,2)+v(3,3);
go(2,4)=@smax(go(1,4),go(2,3))+v(2,4); go(3,4)=@smax(go(2,4),go(3,3))+v(3,4); go(2,5)=@smax(go(1,5),go(2,4))+v(2,5); go(3,5)=@smax(go(2,5),go(3,4))+v(3,5); go(2,6)=go(2,5)+v(2,6);
go(3,6)=go(3,5)+v(3,6);
@for(m(i,j)|i#GT#1 #and# j#GT#6:go(i,j)=@smax(go(i-1,j),go(i,j-1))+v(i,j));
@for(p(i):go(i,10)<=b(i));
end
计算结果
Local optimal solution found.
Objective value: 52.00000
Objective bound: 52.00000
Infeasibilities: 0.000000
Extended solver steps: 12
Total solver iterations: 2522
Model Class: MINLP
Total variables: 72
Nonlinear variables: 24
Integer variables: 9
Total constraints: 73
Nonlinear constraints: 14
Total nonzeros: 260
Nonlinear nonzeros: 28
Variable Value
A( 1) 50.00000
A( 2) 60.00000
A( 3) 80.00000
B( 1) 50.00000
B( 2) 80.00000
B( 3) 60.00000
XYZ( 1, 1) 2.000000
XYZ( 1, 2) 1.000000
XYZ( 1, 3) 3.000000
XYZ( 1, 4) 5.000000
XYZ( 1, 5) 4.000000
XYZ( 1, 6) 7.000000
XYZ( 1, 7) 8.000000
XYZ( 1, 8) 4.000000
XYZ( 1, 9) 3.000000
XYZ( 1, 10) 1.000000
XYZ( 2, 1) 3.000000
XYZ( 2, 2) 5.000000
XYZ( 2, 3) 3.000000
XYZ( 2, 4) 6.000000
XYZ( 2, 5) 8.000000
XYZ( 2, 6) 7.000000
XYZ( 2, 7) 4.000000
XYZ( 2, 8) 5.000000
XYZ( 2, 9) 3.000000
XYZ( 2, 10) 2.000000
XYZ( 3, 1) 4.000000
XYZ( 3, 2) 3.000000
XYZ( 3, 3) 3.000000
XYZ( 3, 4) 4.000000
XYZ( 3, 5) 3.000000
XYZ( 3, 6) 7.000000
XYZ( 3, 7) 5.000000
XYZ( 3, 8) 5.000000
XYZ( 3, 9) 4.000000
XYZ( 3, 10) 3.000000
V( 1, 1) 2.000000
V( 1, 2) 1.000000
V( 1, 3) 3.000000
V( 1, 4) 5.000000
V( 1, 5) 4.000000
V( 1, 6) 7.000000
V( 1, 7) 8.000000
V( 1, 8) 4.000000
V( 1, 9) 3.000000
V( 1, 10) 1.000000
V( 2, 1) 4.000000
V( 2, 2) 3.000000
V( 2, 3) 3.000000
V( 2, 4) 4.000000
V( 2, 5) 3.000000
V( 2, 6) 7.000000
V( 2, 7) 5.000000
V( 2, 8) 5.000000
V( 2, 9) 4.000000
V( 2, 10) 3.000000
V( 3, 1) 3.000000
V( 3, 2) 5.000000
V( 3, 3) 3.000000
V( 3, 4) 6.000000
V( 3, 5) 8.000000
V( 3, 6) 7.000000
V( 3, 7) 4.000000
V( 3, 8) 5.000000
V( 3, 9) 3.000000
V( 3, 10) 2.000000
GO( 1, 1) 2.000000
GO( 1, 2) 3.000000
GO( 1, 3) 6.000000
GO( 1, 4) 11.00000
GO( 1, 5) 15.00000
GO( 1, 6) 22.00000
GO( 1, 7) 30.00000
GO( 1, 8) 34.00000
GO( 1, 9) 37.00000
GO( 1, 10) 38.00000
GO( 2, 1) 6.000000
GO( 2, 2) 9.000000
GO( 2, 3) 12.00000
GO( 2, 4) 16.00000
GO( 2, 5) 19.00000
GO( 2, 6) 26.00000
GO( 2, 7) 35.00000
GO( 2, 8) 40.00000
GO( 2, 9) 44.00000
GO( 2, 10) 47.00000
GO( 3, 1) 9.000000
GO( 3, 2) 14.00000
GO( 3, 3) 17.00000
GO( 3, 4) 23.00000
GO( 3, 5) 31.00000
GO( 3, 6) 38.00000
GO( 3, 7) 42.00000
GO( 3, 8) 47.00000
GO( 3, 9) 50.00000
GO( 3, 10) 52.00000
W( 1, 1) 1.000000
W( 1, 2) 0.000000
W( 1, 3) 0.000000
W( 2, 1) 0.000000
W( 2, 2) 0.000000
W( 2, 3) 1.000000
W( 3, 1) 0.000000
W( 3, 2) 1.000000
W( 3, 3) 0.000000
Row Slack or Surplus Dual Price
1 52.00000 -1.000000
2 0.000000 0.000000
3 0.000000 0.000000
4 0.000000 0.000000
5 0.000000 0.000000
6 0.000000 0.000000
7 0.000000 0.000000
8 0.000000 0.000000
9 0.000000 0.000000
10 0.000000 0.000000
11 0.000000 0.000000
12 0.000000 0.000000
13 0.000000 0.000000
14 0.000000 0.000000
15 0.000000 0.000000
16 0.000000 0.000000
17 0.000000 0.000000
18 0.000000 0.000000
19 0.000000 0.000000
20 0.000000 0.000000
21 0.000000 0.000000
22 0.000000 0.000000
23 0.000000 0.000000
24 0.000000 0.000000
25 0.000000 0.000000
26 0.000000 0.000000
27 0.000000 0.000000
28 0.000000 0.000000
29 0.000000 0.000000
30 0.000000 0.000000
31 0.000000 0.000000
32 0.000000 0.000000
33 0.000000 0.000000
34 0.000000 0.000000
35 0.000000 0.000000
36 0.000000 0.000000
37 0.000000 0.000000
38 0.000000 0.000000
39 0.000000 0.000000
40 0.000000 0.000000
41 0.000000 0.000000
42 0.000000 0.000000
43 0.000000 0.000000
44 0.000000 0.000000
45 0.000000 0.000000
46 0.000000 0.000000
47 0.000000 0.000000
48 0.000000 0.000000
49 0.000000 0.000000
50 0.000000 0.000000
51 0.000000 0.000000
52 0.000000 0.000000
53 0.000000 0.000000
54 0.000000 0.000000
55 0.000000 0.000000
56 0.000000 0.000000
57 0.000000 0.000000
58 0.000000 0.000000
59 0.000000 0.000000
60 0.000000 0.000000
61 0.000000 0.000000
62 0.000000 0.000000
63 0.000000 0.000000
64 0.000000 0.000000
65 0.000000 0.000000
66 0.000000 0.000000
67 0.000000 0.000000
68 0.000000 0.000000
69 0.000000 0.000000
70 0.000000 0.000000
71 12.00000 0.000000
72 33.00000 0.000000
73 8.000000 0.000000