) m, F& p4 A9 g; u: T; o; O假设该工厂每次生产计划的计划期为 6 周(即每次制定未来 6 周的生产计划),只 有最终产品 A有外部需求,目前收到的订单的需求件数按周的分布如表 1 第 2 行所示。 部件 B,C 是在该工厂最关键的设备(可以称为瓶颈设备)上组装出来的,瓶颈设备的生产能力非常紧张,具体可供能力如表1第3行所示(第2周设备检修,不能使用)。 B,C的能力消耗系数分别为 5 和 8,即生产 1 件B 需要占用 5 个单位的能力,生产 1 件C 需 要占用 8 个单位的能力。 * w# q) g' @& t; o 1 l( L. Q7 N `$ [4 ?" W ( Q' e. G+ c9 ~4 P4 _ , e7 e/ s! a' f: w对于每种零部件或产品,如果工厂在某一周订购或者生产该零部件或产品,工厂 需要一个与订购或生产数量无关的固定成本(称为生产准备费用);如果某一周结束时该零部件或产品有库存存在,则工厂必须付出一定的库存费用(与库存数量成正比) 。 这些数据在表 1 第 5 、6 行给出。6 P' X _& W: P8 d- e5 m" l
g1 P5 l+ U, s" o. w按照工厂的信誉要求,目前接收的所有订单到期必须全部交货,不能有缺货;此外,不妨简单地假设目前该企业没有任何零部件或产品库存,也不希望第 6 周结束后留下任何零部件或产品库存。最后,假设不考虑生产提前期,即假设当周采购的零件马上 就可用于组装,组装出来的部件也可以马上用于当周组装成品 A。 在上述假设和所给数据下,如何制定未来 6 周的生产计划。 / O0 P. A1 d# }. }5 u9 I" T# C 0 S# G4 K0 Z& Y* m8 H2 建立模型4 {$ w& z0 q2 A* W
% H3 }! E0 ]$ `) G) h' s(1)问题分析' j/ a, z& D# s' x
1 v# N' |1 L. |) T
这个实例考虑的是在有限的计划期内,给定产品结构、生产能力和相关费用及零 部件或成品(以下统称为生产项目)在离散的时间段上(这里是周,也可以是天、月等) 的外部需求之后,确定每一生产项目在每一时间段上的生产量(即批量),使总费用最 小。由于每一生产项目在每一时间段上生产时必须经过生产准备(setup),所以通常的 讨论中总费用至少应考虑生产准备费用和库存费用。其实,细心的读者一定会问:是否需要考虑生产的直接成本(如原材料成本、人力成本、电力成本等)?这是因为本例中 假设了不能有缺货发生,且计划初期和末期的库存都是 0,因此在这个 6 周的计划期内 A的总产量一定正好等于 A的总需求,所以可以认为相应的直接生产成本是一个常数, 因此就不予考虑了。只要理解了我们下面建立优化模型的过程和思想,对于放松这些假 定条件以后的情形,也是很容易类似地建立优化模型的。* W3 Y0 G; x) V/ {2 C" a6 B
/ N O' d! o, v; }(2)符号说明 9 z6 H1 C; x/ f$ n! m9 f/ n, E9 u4 X& [7 `. k. ?
为了建立这类问题的一般模型,我们定义如下数学符号: 4 o: y+ h$ f" v5 n2 F0 j6 `7 s
/ L" v$ d9 _/ H; O
N :生产项目总数(本例中 N =7);" Y, I* b, Y% @% ]6 C) y! v
4 a) n. ~0 L3 ?8 D) o, \/ F, R HT :计划期长度(本例中 T =6) ; 5 X% n7 c$ r4 ^% T. | " h5 |) e' b0 `3 BK :瓶颈资源种类数(本例中 K =1 ); - m1 i2 d4 V# c2 }& k
- d2 x0 L$ y. g9 f3 V
M :一个充分大的正数,在模型中起到使模型线性化的作用;( `3 K' Y4 c% J- f, n( H
* \' J+ b* f7 b1 Z% d+ Q" c
:项目i在t时段的外部需求(本例中只有产品 A有外部需求); ) D6 R8 Z8 R, ?' {# K 6 q8 A1 O4 j/ r6 I) z& _ :项目i在t时段的生产批量; * i5 z. m4 S6 z# e3 k( f/ z : j! X) a0 o) ^ :项目i在t时段的库存量; - E; \/ X, g. U" a& P8 V. W 6 O) v. |. q7 k |, f4 r# i+ ] :项目i在t时段是否生产的标志(0:不生产,1:生产); " [5 }) Z+ I2 R# U& N% v
2 s) R3 S* s0 F I y- p7 f. s* j! p
:产品结构中项目i的直接后继项目集合; 6 C C3 K1 A7 d/ N7 d0 d9 U
S8 F$ E Q6 e# D* N :产品结构中项目 j 对项目i的消耗系数; & l6 E' x; }5 t: G ) X b& i0 C' |; o; A7 y/ M# c :项目i在t时段生产时的生产准备费用; + |( i$ U/ X3 s/ h3 W" n0 d) A
0 Q5 s* x/ g5 i2 h+ @: n3 p
:项目i在t时段的单件库存费用; + M3 c N% w1 J# _1 {9 t# a# s" F& o+ J& f5 V, z
:资源k 在t时段的能力上限; " l; K; s, Z m; B% U# I( X" w- a
4 T3 o' R- Q9 h1 E Z
:项目i在t时段生产时,生产单个项目占用资源k 的能力; & A* G- f& l- b$ K
7 }5 t/ Y( T+ V+ @: l& z6 }: Q( o/ V; t: s
$ m1 E4 T1 ~0 `/ X T$ m(3)目标函数6 D1 n8 S D3 k9 K
# O5 s2 q+ W3 a3 {0 b6 R6 v
这个问题的目标是使生产准备费用和库存费用的总和最小。因此,目标函数应该 是每个项目在每个阶段上的生产准备费用和库存费用的总和,即 # O }3 Z+ Q! ]: e . H1 w% ]6 J0 [ ( 1 )& m6 x" o/ }7 F3 m1 S7 l6 J
- w4 p5 b* `$ t% C9 ^
(4)约束条件/ g# w) h; ^, G. F K+ `
0 k. D/ a& m# Q5 j9 S
这个问题中的约束有如下几类:每个项目的物流应该守恒、资源能力限制应该满足、每时段生产某项目前必须经过生产准备和非负约束(对 是 0− 1约束)。 所谓物流守恒,是指对每个时段、每个项目(图中一个节点)而言,该项目在上一个时段的库存量加上当前时段的生产量,减去该项目当前时段用于满足外部需求的量 和用于组装其它项目(直接后继项目)的量,应当等于当前时段的库存量。具体可以写成如下表达式(假设 ): ; V" |3 E9 V9 h' @6 x% U9 k; j 6 k: U) O! l0 h9 g ( 2 ) * z8 V2 w6 ?4 q : E2 U# b O. n/ J: U9 }5 v资源能力限制比较容易理解,即 + e: ~2 A7 @- ]2 }
& m! ?- F. [/ N& o; ~ ( 3 ) / _$ P0 A4 x" b o. o/ f- j+ _ 8 |/ y1 k# P/ f ]/ K ; m1 i3 M2 V$ j+ e- R7 M7 q8 @$ |0 U) `' }3 F8 |5 U# V# w0 e
3 求解模型 % e. r3 f2 F! x) W
* |' t% H. C5 }! H 1 x; g) n; U- [3 A1 F/ m& {1 n2 y
& w0 y# n3 {' F5 T9 n/ [( n5 z% @- @- d' j2 H1 a( @9 v$ T- z/ o
+ L7 C2 ~/ d! m0 n2 |* a
1 H9 n3 k; O* {# g' W
* Z- H. ~. X+ D
MODEL: 0 G4 A l1 k! l# w8 ]TITLE 瓶颈设备的多级生产计划; 1 M6 [4 E) h5 h& T/ l! P* B3 W
SETS: 8 w8 V: [* W: m* ?- J- |! F! PART=项目集合,Setup=生产准备费,Hold=单件库存成本, A=对瓶颈资源的消耗系数; & T) l! s5 y6 a5 a2 Z2 vPART/A B C D E F G/:Setup,Hold,A; ) m: O# p, \; e3 U& x
! TIME=计划期集合,Capacity=瓶颈设备的能力; # [7 g4 O5 B: bTIME/1..6/:Capacity; : t( m. z; O* j+ T L9 @) r# Y# N! USES=项目结构关系,Req=项目之间的消耗系数; ; `$ w* ?: U' X/ d% U- J: K
USES(PART,PART):Req; 2 e( [" y4 A* Z0 q. U
! PXT=项目与时间的派生集合,Demand=外部需求, X=产量(批量), Y=0/1变量,INV=库存; PXT(PART,TIME)emand,X,Y,Inv; / F2 z( [) t2 _6 B' U
ENDSETS 5 n7 U# f. P7 m9 O$ e3 @0 F( |! q
! 目标函数; 7 \" F- `! G0 o( q$ }[OBJ]Min=@sum(PXT(i,t):setup(i)*Y(i,t)+hold(i)*Inv(i,t)); - X2 [. l- X7 }) n
! 物流平衡方程; 1 k5 r! j+ |% E# }; P@FOR(PXT(i,t)|t #NE# 0 \: i, |! ?; ?% p5 B G0 P1:[Bal]Inv(i,t-1)+X(i,t)-Inv(i,t)=Demand(i,t)+@SUM(USES(i,j):Req( i,j)*X(j,t))); @FOR(PXT(i,t)|t #eq# 2 G' T- s3 D5 _) L- T' Z2 c1:[Ba0]X(i,t)-Inv(i,t)=Demand(i,t)+@SUM(USES(i,j):Req(i,j)*X(j,t) )); 4 g& p4 z2 m2 Z; f( h$ }
! 能力约束; + l! b8 o! |6 t% N1 X+ Z@FOR(TIME(t):[Cap]@SUM(PART(i):A(i)*X(i,t))<Capacity(t)); ' l) s1 Z( o& W3 q5 @0 `
! 其他约束; * Y. B# ~( Z+ v, L0 CM = 25000; 1 E) L5 A2 I7 g: A' c
@FOR(PXT(i,t):X(i,t)<=M*Y(i,t)); % Q- x$ ?4 }1 K+ _- s' r2 @! x
@FOR(PXTBIN(Y)); 6 [3 i q! M' ]" M4 R/ R
DATA: 7 V- e' e% v0 D' t- M$ J
Demand=0;Req =0; , h8 a# d( ^% n* G3 v2 Z
Capacity=10000 0 5000 5000 1000 1000; 9 A6 N' m3 N7 R8 ASetup=400 500 1000 300 200 400 100; * G" D! ~+ ^. O4 I) p' w/ IHold=12 0.6 1.0 0.04 0.03 0.04 0.04; $ J0 T3 l- }- n$ s& JA=0 5 8 0 0 0 0; ' V0 l9 w6 ~5 U
ENDDATA ; @4 s% ~. W* I' e8 C
CALC: ; p( }1 M$ f: u1 S- N
demand(1,1)=40;demand(1,3)=100; ! _4 p j) q) g& d. e9 \+ ddemand(1,5)=90;demand(1,6)=10; ( P4 j6 Q4 v& o, R) c
req(2,1)=5;req(3,1)=7;req(4,2)=9; A+ Z2 q9 P; x4 g
req(5,2)=11;req(6,3)=13;req(7,3)=15; 5 [; ]: O7 @. `4 mENDCALC 3 [8 O [; X! R0 D) fEND : B( z8 p# K5 r) h! c " s! z% ], M0 f4 L ) U, U- B" q: _6 r% _习题:0 }& Q2 j# u* r