|
求解最小生成树的方法虽然很多,但是利用LINGO建立相应的整数规划模型是一种新的尝试。这对于处理非标准的MST问题非常方便。我们主要参考了文[7]。
. ]. _# E0 L7 b7 q在图论中,称无圈的连通图为树。在一个连通图G中,称包含图G全部顶点的树为图G的生成树。生成树上各边的权之和称为该生成树的权。连通图G的权最小的生成树称为图G的最小生成树。 . Q6 O- S4 \9 I5 I: ~
许多实际问题都可以归结为最小生成树。例如,如何修筑一些公路把若干个城镇连接起来;如何架设通讯网络将若干个地区连接起来;如何修筑水渠将水源和若干块待灌溉的土地连接起来等等。为了说明问题,以下面的问题作为范例。
* M2 b3 p1 w5 S) l5 p范例:假设某电话公司计划在六个村庄架设电话线,各村庄之间的距离如图所示。试求出使电话线总长度最小的架线方案。 " H/ w( H" x! n( H* _- a$ i
V1 U: j( H. z m5 i3 T' a! ]6 @/ H* b1 K' F
1 `$ B7 e# X( s8 l C% \1 w; K7 z8 z0 ^8 n1 i1 Q9 G: v; o' p: b
! b# ]+ Y4 x0 ^' T! M8 h) F# B' y" y4 C
/ l: u/ I" ^" m0 ]- _, q0 b: ~1 g' X$ i `- ]
; ^4 j9 ~/ R- @7 o7 D
|
. [" K1 D- X& i( O/ v) n8 o; s V1 | ; S8 _0 ?+ G. X# O" @! b( }0 \
| . q: M! c% \& j$ N! }
8 @0 v- B: D8 {/ z8 N5 L
0 E+ `9 R6 w( x* L, a
$ J) L! m& n7 F, R5 w
1 @5 Q3 q8 m: _$ J( ^% Q3 ^ ?' z, f% l5 Y& s% V3 h
7 F% j8 d$ A. e Q* J/ Z& b9 {' T2 X5 [4 v$ O
+ C2 e) h6 m% y s5 k2 P' a1 q
|
$ v% E/ }; a- @! @ V2 |
4 {. v3 G1 m* ? |
2 J& l8 b0 h2 v3 \' h
0 ?4 X- S3 {5 @, l% Q) Q4 N4 Q9 ~+ C: F' M/ B
8 ]/ b" A& R% G; B2 O7 E) W
" S. W5 e2 |$ o( G2 x, W; b
- Z, N* U; E6 _; D! ]: I0 E1 @- f, }- S5 {
7 D& l, O% |$ w/ v; C
$ D5 O1 s$ U" G' v| , {; n* |% n+ \6 v- c
V3 | $ i7 r8 n; P" n I
| 9 Q% p3 |+ E/ ^7 l( G2 G* Z' t
5 t( |. t8 c4 v6 f5 W; S- p( w$ S# r6 ], x( x* U5 K
% B+ M( d1 |/ U% D1 V: ^% V
$ o" _+ |* n& _! E8 `2 }, c' ~: v2 n* p
0 z1 X/ w+ X \/ L: l! d
' e ^# i; u B% A* k6 u) l* m7 m' T$ M) q- y( y, z, |% B$ l
|
& l; }0 O) t* P- S8 I- Y6 s; X7 z1 O V4 | ! N4 a; w* q" R1 Z, m
|
, E% R/ M! b1 m+ h' D5 R# l; a" o2 e$ {& p1 F& E; F9 F: U/ T
. A, V. d- S* f6 ]0 G. g6 W
! l+ j3 P: ^. i" m
. L0 E% f0 ]6 [9 |4 e5 i
3 `* ]) i4 m, N) h# s/ t
# K8 u+ O5 O. F: P' O8 }7 B3 k" j ^
2 y) i2 [' i3 u. X' x| + R; J) D+ V* S) p9 b9 F
V5 |
, L! y; P) R: k9 F. U* ^6 _! g2 W3 R | 7 m; F$ R2 r, `/ N+ Y) H; T* ?: _; S
0 n/ n) B! a& J. |7 V) A% `6 y
5 Q0 }% J) V# w' _) }5 U9 K p) L! n" d6 w0 [
) a+ i( J N( U6 i9 {/ O
0 m3 f5 Z/ o1 z, W! d$ `1 _
# i+ Z& }) p0 m/ x$ K9 m2 e k9 a' U; e% n) J: t6 s
4 c3 t0 L2 H n- P| 0 ?3 Q M Z5 c
V6 | ; I* P- i- z0 K8 o5 |
|
& n1 C" n3 Y; F) M' W, J0 V V7 G5 ^$ h5 O6 y5 D; O
- V3 v- J( C1 x/ g& E& S
g. ]; |$ h' n8 F, _; S F; O% F+ R9 N' G! B6 `
- L% W7 p( X9 g r I. m6 Q! t
( T! Y5 N6 N6 S0 I) t" I. }) ]
3 i1 g3 f( g W, }
2 u- g2 V5 Z5 k* M4 T! I|
0 M, O, l. K$ H 1 | 2 x. O. p4 Q: E# [
| ( \; e0 T2 w' Z+ [
9 W0 V$ J6 X: z4 s+ \$ c7 Y! P
O/ D) r$ y+ V% C3 b8 K5 G4 a: Y+ Z: X4 d# P
6 o- A; b* k, a& z0 P4 k7 U. f+ x+ f2 ] n4 n( a
2 V' d8 K* v9 r/ y3 j
* w- w' v% o" Y% l
+ x) B9 h0 d0 d+ X( G6 O! [| $ H. e" W+ N1 D2 J$ v! e
1 |
% z0 g4 o$ x6 Z4 {/ `0 ? | 4 [+ j! N% J' w1 B0 _! O
* g L% ^! v. Y4 n! K- z% A! d5 M0 f# B1 @! W# [! [
% p$ O$ w: X' M# O
) e9 ]( a' K' U
+ N3 Y+ e6 Q3 e
. N. D" m1 b. H5 s9 D' ^2 u
' o; G# m3 @& h1 c5 Z7 q P U) N! h2 d; C" m
| 0 H+ o) F" P4 V* C6 j
2 | ' n. @6 l' d4 F
| ( C' f3 ~6 p4 d: \' h1 p
4 w, `$ o) {# J- J6 M5 `& k6 u
* O1 H5 K4 ?7 u: _
) A+ L1 k* Z0 A
3 A, h7 g: U8 i$ v" ~- v: O
5 Z! _/ n( ]8 L9 p
" v3 {. }# u/ W7 {
2 A, V) M" o+ _! A
/ D$ W, `+ t, E2 G' k i& I
| - _5 W, G6 M5 I" b' [0 w
2 | . s; o" D5 H2 i" z
|
/ A% `( G* `5 j8 x+ f8 Z. w
& L; h& S) p( d* [4 p' L% ~( M6 ]# f+ T. {- p& o" d( ` U. g
1 d4 V5 E! c3 ~. n& w3 |8 l: ~
% Q# I! f+ ?" c3 X k8 A; t
8 w0 M6 ^: b! |' \3 F0 k" p
6 W% D6 ~. @2 Q8 }3 W
' z) O2 b. l" N
' y4 B- B# |9 t( M6 F' C& K/ Z; n8 m|
5 L( O0 {) F% b0 a" Q0 r 2 |
$ N+ p/ B2 l% @2 e |
3 Y7 Z) N7 q4 m1 R* s
* [: ^9 C7 A. ]4 ?8 S2 I
2 w0 m0 I) c* [' R, g$ z/ J* U% k1 S+ \
( g0 ]) N/ ?6 l9 U h+ W/ X) C3 t* M$ p5 j8 B& b1 |
) `* d# c; B2 {
( j3 A2 y5 m- |9 ?- E# F4 z
- k8 I. G* v, {: I5 a| # h- @' |* o: T/ \2 n
3 | 2 B. o+ X0 _) @2 X; d' ~: ?
| " X+ P- ?! P$ F4 p8 C! e- N
( J) v6 \( R( n
: b' J- \ h2 ~/ O
0 R c* G6 m U$ H1 t& m" N; |. }; V$ e9 C: w# o
4 U5 k7 F5 j5 W0 G) @0 t# S9 B
' {" j/ _1 Y5 K m
: v5 q& u' c5 e9 G; x
& G9 h/ e, ]: I- \0 r| . @& e8 M- U3 q4 y# ~
3 | 3 i t! @2 V/ w
|
: L7 Z4 x4 B: s- b
& }( y1 [3 C5 l. x- ]/ J* Q
+ ~3 U( u9 t6 M
# B- t) B% |: c* m: k' o: M# z1 E5 F. K3 e F2 _& u
+ D$ B- T' Z% n0 V
; Z: N: {7 \ h
* S) ]6 }! o. c' B0 T2 m# q0 l% C1 A: P5 e
| / }% S' d7 U# U7 e' G
3 |
8 v6 v/ X1 O, [! p- D | . C% f; D& C# J- h. f
+ k* F: M: N& v* K w* v
7 ^4 ]! D: v$ c0 [9 U
% d, t0 G" x; I5 D
8 O2 M. y q5 c
4 F b1 @* t$ u) n: ]( \3 l4 | {" \3 I
2 z. ^4 l1 {+ v2 @/ P9 a# R0 o; T
1 ~, C; M7 E" a. J6 ?5 \
|
( l4 o# a, a$ ?$ ?5 @ 4 |
1 i6 F1 L6 V' D: G |
3 T) Z6 i D' S7 }0 y% b- B8 N" n: E* t% G) C$ N/ `
- C) ~/ f0 V7 f; f, J$ P0 H) M# J6 a. y
/ P. O r/ B' A ^& z) p0 o" Y2 h* s
3 p3 I; }9 t2 F
/ [+ E" T: n! t- U" t+ P! n* f- |8 A: T. f2 P% x
! T3 _/ b: U# _1 W0 U! U: o% G$ g
| . ]( K: q C( e6 f- N# r" Y
5 | ! i% G2 A2 @8 b7 I; F
| val>val>val>val>val>val>val>val>val>val>val>val>为了便于计算机求解,特作如下规定:(1)节点V1表示树根;(2)当两个节点之间没有线路时,规定两个节点之间的距离为M(较大的值)。 & x% x9 S* |! ?- K# \
MST的整数规划模型如下:
+ [, c& f5 f8 z/ h
. D g4 F% k6 i2 c1 y- z; x( n
; U: `. M$ ~ |" M3 n$ W& j& B . ~9 E8 D m% y1 |# T" v d
7 ?9 `% A$ l3 l, R* g8 A
- O! e: V4 u7 R, s* L! z
* Z4 P8 z3 h0 ]* s1 a
例7.7 分配问题(指派问题,Assignment Problem) 8 z/ H5 v& n8 q) u
这是个给n个人分配n项工作以获得某个最高总效果的问题。第i个人完成第j项工作需要平均时间 。要求给每个人分配一项工作,并要求分配完这些工作,以使完成全部任务的总时间为最小。该问题可表示如下:
4 q" C0 | z6 d0 A
& ~; M" L6 ^) x0 {- P. t' T# r+ a! p6 v 显然,此问题可看作是运输问题的特殊情况。可将此问题看作具有n个源和n个汇的问题,每个源有1单位的可获量,而每个汇有1单位的需要量。从表面看,这问题要求用整数规划以保证 能取0或1。然而,幸运的是,此问题是运输问题的特例,因此即使不限制 取0或1,最优解也将取0或1。如果把婚姻看作分配问题,丹茨证明,整数性质证明一夫一妻会带来最美满幸福的生活!显然,分配问题可以作为线性规划问题来求解,尽管模型可能很大。例如,给100人分配100项工作将使所得的模型具有10000个变量。这时,如采用专门算法效果会更好。时间复杂度为 的匈牙利算法便是好选择,这是由Kuhu(1955)提出的。 3 o/ y6 y9 U: m- w
model:
& Q8 y' T$ _5 _8 d4 O" r3 T !7个工人,7个工作的分配问题;
8 m/ S7 {8 K0 A) Q2 q( D9 I9 \9 |- lsets:
" f8 A# ^% ^- m! m$ y v workers/w1..w7/;
( L5 k+ k& e5 \/ s: W9 f+ {+ x jobs/j1..j7/;
6 X0 y' ^5 L, V. ^/ k5 x8 R links(workers,jobs): cost,volume; , B$ g4 ]# n$ U7 K& ?
endsets
: n. J8 s2 a6 x6 n: J !目标函数;
7 q+ J. x% ^7 G9 T. C2 G! G min=@sum(links: cost*volume);
0 Z) R d7 ?2 Q# h !每个工人只能有一份工作;
9 _" B$ ]. t6 g, [2 x% i. v7 g @for(workers(I): [) _1 k6 F- }
@sum(jobs(J): volume(I,J))=1; & `, ?2 d* E( q' V% Y) X7 W" o
);
9 c9 H& u, p _8 `' ^' r !每份工作只能有一个工人;
, y0 T x- D' `" p; ? @for(jobs(J): 3 z9 K& Q& @, ]3 m0 @
@sum(workers(I): volume(I,J))=1;
5 K6 z; U* E8 F; k& p: v5 n( v! o, g );
7 P3 _8 `$ C6 h& ?- c) H) Odata: 0 T' K6 V1 ^$ U4 L! a: B) ]2 I
cost= 6 2 6 7 4 2 5
' ^! Z v: J8 C 4 9 5 3 8 5 8
# }( Z* P2 d4 G8 E" k 5 2 1 9 7 4 3
- R1 |- Z0 f" B9 Q) W" H 7 6 7 3 9 2 7
$ \: P8 @' d1 j; ?" k D z+ O 2 3 9 5 7 2 6 9 _6 t+ a: L2 W; i3 V
5 5 2 2 8 11 4 7 u: Q: h( W5 G7 E' i5 a
9 2 3 12 4 5 10;
/ j) U% ^* o* s4 u |- k& `: }1 penddata * N! J/ v+ J3 |& ~/ Z d( O2 F2 u
end |