|
求解最小生成树的方法虽然很多,但是利用LINGO建立相应的整数规划模型是一种新的尝试。这对于处理非标准的MST问题非常方便。我们主要参考了文[7]。
) g0 ~& u$ D2 e( C1 }' _在图论中,称无圈的连通图为树。在一个连通图G中,称包含图G全部顶点的树为图G的生成树。生成树上各边的权之和称为该生成树的权。连通图G的权最小的生成树称为图G的最小生成树。
7 ^2 j9 l v( z* @9 }/ N5 B4 L许多实际问题都可以归结为最小生成树。例如,如何修筑一些公路把若干个城镇连接起来;如何架设通讯网络将若干个地区连接起来;如何修筑水渠将水源和若干块待灌溉的土地连接起来等等。为了说明问题,以下面的问题作为范例。
; {* W4 b" u( a9 R. U范例:假设某电话公司计划在六个村庄架设电话线,各村庄之间的距离如图所示。试求出使电话线总长度最小的架线方案。
1 y2 U- e3 ^! t: {
. A( A6 y. m3 K, V( K6 u& k+ J! a( G& {4 W; u5 R
1 \% G( M2 {+ B9 L; @1 w8 ], X6 o" o% d3 T9 w9 A
# _& f- c2 e S
' T2 d b- Y, H& G$ t; V: C R
9 P) X, M9 q2 t& l9 ^& s! \5 v$ E/ B3 x2 I0 _. P! J
, Q) m& K7 X9 J$ a9 z9 B( T" f| ; }0 S& \6 K+ h# j
V1 |
: P7 G0 Q. S- s5 x a. p3 E J7 n | 8 u# b! Q( d2 P' P
+ Y8 }" y. U o; Q) Q, X8 z
& J0 S$ D9 o; I8 Q
8 B/ K( P [ f. w. u7 E1 a: `1 i5 ?4 A, ~
" W$ q* q6 _$ u$ E1 @" e- k% u) R$ j( C6 s2 { n
0 D, q6 ^: D1 g
8 ]8 \+ ?) r# P9 g w4 i5 y+ j| " v: ~, j; Q- F# B1 R- W
V2 | + D3 w- u0 O: b8 P
| 4 M. W( q( n2 Y4 v; t! p4 `$ ?" l2 I
p% r( V6 v! v7 G1 u7 C0 E0 E; k' M& E# R) V0 m$ K
- ~8 n4 d+ }/ b' u3 w: y
* W8 u+ q# i+ {/ U
" i6 I. N4 r6 R4 T; L7 E" J& j9 V* M
& ~+ i8 @1 V0 K1 A9 ~; [# D0 B4 C& g) r0 Z3 V
|
4 ? B0 R+ L( Q, z V3 |
+ ]/ w& Z3 [/ M8 h7 M |
; q1 N" b) o" U c' B& Y! P! X4 e1 I$ t Z* R5 _$ G
. \9 u" o0 o$ S9 k9 \- ]3 r+ A5 w( u
- q+ |: j b' Z( {, ?
! {: c# c' H* V+ [$ \/ y" w" N1 G/ b1 A9 T5 n
5 R. }- m7 |- p: N4 ]3 x
% m; X. G% F& {6 l3 @+ y1 K7 e6 w; V1 u- Y7 A- p' ^! H
|
1 _0 E9 O4 a# y4 N0 n @ V4 |
( G, `; \1 X4 S0 X9 A D8 F1 b | 8 ^+ R: w2 H& V8 y2 ]* z6 ?
) L a, C4 |# m) u3 A
" D G# V, z1 a0 e1 b
6 c4 _7 @( T4 I3 e4 I5 }/ d) c5 x2 A! ]( ?, n. [
# z4 }; k! Z0 Y. y- D7 X
& u+ L& y* @: {- w. }) K6 c% G$ t5 y. D4 M9 x) Q8 R2 {
7 H' Z7 M/ e. Y7 w' ~2 M% {7 p, n|
9 K+ q) _1 G4 |7 z V5 | ; o8 l+ {0 a' R3 @7 [. o$ V) U
|
& u; O2 J# K9 j1 t" |+ F9 I: b& T' B, z/ O
! g( ~* h' D4 l9 z) K5 o- S$ R0 b8 z5 x0 o& Y
8 X+ c6 h; ^ a9 w. ]* e9 b$ v8 } S' P" n q) _; F2 @5 p: w5 ^7 Y
: D) ?+ w1 w+ p* H0 O" R4 L
1 {% I6 ], a: B' O* C) v/ f; w$ G+ i' ^& z! h S. E; H
| 8 L* y: S3 E8 c0 C0 N" A w( T
V6 | & I) e& Y, X' g# {3 i) X2 T1 F
|
0 n0 K: k1 `# F% [0 ?* a. r7 n& X& e: d3 ^7 c; Q
8 @. r! m, m6 r6 u1 S( a3 W
* N$ \5 z. F) D+ _0 d9 K& \5 u. a( K! [# `) ]
+ t* L4 s; C# M2 Z0 ]0 L* t. C% |3 h, s% J
1 h( b- Q* f. M' m h! U5 }9 S' p0 O d
|
$ w0 O" @3 h( s 1 |
$ z% s! H# D. M" i4 D" Y9 b& I |
, C. s8 Q- N5 m- K0 D. L$ A+ A3 v @5 ` [/ R3 d% M
4 m( h& o- ? n; n. N) d
! S. ?) @# A& F6 a1 @8 a
# \6 C( S. c/ e1 x- p+ k, b. n' z* ~: w6 a' o
) d6 X, I/ }2 s3 ^' z8 t
! {+ Q7 R) h3 L9 s- l) R
5 W* x: G- Y- U3 J| ) l) r8 b/ B$ ^% ]$ D, q$ h
1 |
9 V: I. U" | ] | ! A/ g% b+ r1 o `. r, I1 `
1 G8 x3 U, b' e( v4 z; m e$ v/ L8 x' S
# I2 j# @3 J$ z/ b1 R
# E& {/ n, j+ Z+ d' X0 b: E' e) M) g0 ]3 ^% W
/ q3 J/ L7 x- ]# _
$ q1 [" P% j1 t5 U$ Y
, H1 l# r8 O4 ] C- m
" h" m, h0 ~- w
| # T5 w/ C# w0 F% q) z, Z/ `! S
2 | 2 ?9 I4 C/ d2 x* ] N; n" N
| $ [# r$ m, ^( U
% x5 a6 D% r" b+ |
, a1 v1 v: O5 L. \! v! h ]7 n
& O2 F4 D, B* a. @8 n
3 K- k1 U) g* u3 z/ T" d+ A# v/ E* W: I+ Q. {$ r: X7 e
9 t) r" w1 a( {. i' A9 _
T7 I) G' z5 F+ O
7 m2 C2 U2 r0 j
| & X4 n" d' W; H) _5 c4 p
2 | ) ^4 M# Y, c" F2 ]4 O6 p$ ~
| ! r: ^, C- s' w+ t# L9 u9 c B
, G- c! }! S; p; y7 F0 @& N
1 c7 D- X3 g2 V% \
3 y: v" u7 @9 f4 Z- |0 @; K* d9 s0 g/ I# V& l% |
1 W# p. l5 @1 Y% `5 y7 ^1 h
; P: `9 o! m: N1 Z8 b& W) N$ `9 [
" r+ J0 {. x" @; {/ U/ k|
/ g9 w! @ E) }7 P9 i 2 |
3 N+ {' F* a! h1 m' D( E3 W5 { | 9 @- Y* A" I+ [& u5 P0 c) K4 a
- h$ c k- u) q+ L) H
2 h3 W( q* b# v) _: O3 n1 H. V. R( c) n
/ ?' w% w" y) I& U! K; H3 h2 F3 y% A9 ?8 @. u" Q
6 N t Q, ?3 s! \1 V8 A) O& h4 S) q5 n
, n e- B! ?2 }$ N8 b! G( Y/ {( P& s0 _; x% m7 I G
| b8 n( s; k/ G: _2 N, Q$ ]+ c* u
3 |
( P# t0 x/ E7 q# F |
6 b: s! ^* Z/ w; M4 |# k+ {; J9 g+ r+ `+ X) ], G( E7 n
% ]& t# ?, s) R7 e; q4 b
8 ^% G l3 b7 k& R" V
% F, t M5 ?* t) R" b5 ~- U! ?2 J* |% H( g; f5 x
- t* b+ j1 p3 g! D* T8 `6 ~# g' ~; h+ J7 Y& l* ^; C) s
# Q8 W: Z% C. V$ I& }" D2 W7 i
|
: n& a3 S2 v6 D; K 3 |
: _+ A2 h7 H' M" A |
7 H6 u6 P& o+ ^) }3 y: P
$ [/ W8 j3 n& U" Y; r! k4 R, k }4 _2 Z# L% d3 c
; G' l' \1 E; A4 L/ U7 @
( |2 O/ V6 J1 c
# r# s( H( C$ p8 {3 B0 c
" B! f/ z$ z9 o! s1 I$ j: l8 B# W2 C2 J4 n T% g
8 f% s( Z. {0 H4 z( [' r) T
| ; b6 y+ @/ |2 Q: W
3 |
8 j8 h+ V) C9 c: c | 9 g$ {; s( l5 @. R3 d+ a
0 V' Y8 w8 i4 h0 j, {& m) H! ]1 W6 [
# Z. ]$ H' V! ]% v/ l) ]
8 d: b* R9 u3 y
( P" K7 |! T" c! o C7 ]
% S# ~& k8 y G. w! W% o0 {1 E" R* \+ _, m' u* F# j
I& x! k( u' H6 }- m! y2 i
|
; C, ^4 Y, c2 t; J( x' U 4 | * y. s' N9 ]! J& |( C4 j
| / z C4 q( A+ F# t
2 `+ W7 X8 `/ y. {% u
. a) C" K) Y8 `+ C' p* M
0 [* t. X: d) }
% Q" B9 E- v7 n- j
. J) Z- |+ l/ |: `! Y, z6 `- v; ]+ Q0 L/ l9 b& h
0 a1 t" \3 x1 D7 r9 Q' e2 w, M$ X" k( i$ M
| % m! Q; J2 ?, X* d& W D+ F3 F
5 | 5 @. Y! ~/ b& z+ c: P
| val>val>val>val>val>val>val>val>val>val>val>val>为了便于计算机求解,特作如下规定:(1)节点V1表示树根;(2)当两个节点之间没有线路时,规定两个节点之间的距离为M(较大的值)。
1 J, \/ Q1 U- t5 U F* G8 e MST的整数规划模型如下: 9 n" X2 i% M9 @ q y( }
2 P$ [( u0 b: b8 ?4 C
" l* }: N3 v' i0 q
* E. V0 ] n3 `* `8 b& u. K
2 |1 w9 G5 @9 j& {3 r" z & `( d" p+ W# ~ o, N% v! q- w
; k+ F3 d( T8 }* h9 a
例7.7 分配问题(指派问题,Assignment Problem)
* D. a b- V+ G这是个给n个人分配n项工作以获得某个最高总效果的问题。第i个人完成第j项工作需要平均时间 。要求给每个人分配一项工作,并要求分配完这些工作,以使完成全部任务的总时间为最小。该问题可表示如下:
' L0 }* f, m4 L- ` W1 B* d + L/ Y& ]9 Q# M8 F
显然,此问题可看作是运输问题的特殊情况。可将此问题看作具有n个源和n个汇的问题,每个源有1单位的可获量,而每个汇有1单位的需要量。从表面看,这问题要求用整数规划以保证 能取0或1。然而,幸运的是,此问题是运输问题的特例,因此即使不限制 取0或1,最优解也将取0或1。如果把婚姻看作分配问题,丹茨证明,整数性质证明一夫一妻会带来最美满幸福的生活!显然,分配问题可以作为线性规划问题来求解,尽管模型可能很大。例如,给100人分配100项工作将使所得的模型具有10000个变量。这时,如采用专门算法效果会更好。时间复杂度为 的匈牙利算法便是好选择,这是由Kuhu(1955)提出的。
# S0 i/ b3 b0 }5 Y. z/ O( jmodel:
% y& H! N0 m& D2 p O; Q; g# I" X !7个工人,7个工作的分配问题; + ^6 h& O( ]5 ~
sets:
1 i# ?0 l4 _+ [9 g/ r2 w workers/w1..w7/; ( Y7 W+ [! V2 \2 ^4 A! l) A
jobs/j1..j7/;
. {6 b) b' d/ l, h7 H links(workers,jobs): cost,volume; 9 q2 y) o; o& c* |: c: A
endsets
! F4 j/ w; ?4 I* Y+ o# Y !目标函数;
+ ^0 ^3 Y+ ~1 ^5 c7 W min=@sum(links: cost*volume);
2 h1 z( b j, ?2 b9 h& ^ !每个工人只能有一份工作; 3 \9 ? q* R- P0 Q- k* X
@for(workers(I): 3 L! }, f) Z9 }0 u1 G5 \- e
@sum(jobs(J): volume(I,J))=1;
' O3 `: ]* c4 s1 a. N ); 7 a+ o [2 Z& Q( X4 B
!每份工作只能有一个工人;
7 g9 q. m W0 s" t @for(jobs(J):
3 x d2 i4 ?2 [/ t7 b @sum(workers(I): volume(I,J))=1; 3 g, f6 z1 {' _
); # ~% D/ Z& i/ D5 P8 W9 J
data: + g( m1 ]' w' X y }5 n- x I$ W+ ^
cost= 6 2 6 7 4 2 5 9 X) {! {1 I2 o5 w9 L& o1 L: \
4 9 5 3 8 5 8 ' L7 p+ e3 q& r* l2 [" i+ [* I- f
5 2 1 9 7 4 3 3 S% s- P7 v; u
7 6 7 3 9 2 7
- o2 C& k& t8 g, ~ 2 3 9 5 7 2 6 Q2 {5 S' |1 o) D- A
5 5 2 2 8 11 4 5 H3 H9 p ^5 Q0 Q O
9 2 3 12 4 5 10; & J; V7 |2 X9 | }; n* |) Q
enddata
/ y! I! z! O: N. I3 G5 mend |