|
求解最小生成树的方法虽然很多,但是利用LINGO建立相应的整数规划模型是一种新的尝试。这对于处理非标准的MST问题非常方便。我们主要参考了文[7]。
5 a \& j/ G' }1 `) V+ y) j* o ]在图论中,称无圈的连通图为树。在一个连通图G中,称包含图G全部顶点的树为图G的生成树。生成树上各边的权之和称为该生成树的权。连通图G的权最小的生成树称为图G的最小生成树。 ; l" w/ j# f9 a! e- K
许多实际问题都可以归结为最小生成树。例如,如何修筑一些公路把若干个城镇连接起来;如何架设通讯网络将若干个地区连接起来;如何修筑水渠将水源和若干块待灌溉的土地连接起来等等。为了说明问题,以下面的问题作为范例。
3 H- N j f+ U1 B) _$ ]5 v, b3 x范例:假设某电话公司计划在六个村庄架设电话线,各村庄之间的距离如图所示。试求出使电话线总长度最小的架线方案。
1 t# y8 f3 a7 v8 `; x' j0 C* B% l. a
5 l- T: x% I- s M/ ]9 L+ U0 n2 U' T" I' N6 Q& Y. L7 F6 s+ n; B
4 Z' z+ O2 X$ \" L0 O5 i; k
+ z# U9 S E b9 [
2 j% \ `- K1 d8 @
1 q5 n7 G( _" s0 ]& v K0 B
* m' H. _6 P' O( g1 h% ~
% U4 Q$ t5 k1 g) R4 _| C. d( r9 ^& P0 o' Z! d N% s1 c5 n
V1 |
# n4 Z3 z: g4 A |
! r8 a: q* K% o4 C5 T2 f. D
0 Y, t5 O6 S( p F4 e/ @
- n4 x, i5 N& m: l) P) D- i$ W. P% t2 C2 R2 P" K0 ]: c5 w; P$ w
1 d4 A7 w/ c& Q
2 }, I- V* x2 n( d7 f9 J" {" T6 M0 A: p6 v7 C: Y0 B
8 ?) A+ Y; L/ {% g$ u
( H) r) j5 N* l% ]2 ?5 A
| # ]' V$ V3 }6 l$ k1 M
V2 | ) p( L. w0 l* M% R
|
) t& Y( ]( b/ ]
4 \4 ?6 C1 a$ q0 W" S, {0 k6 H" o( d" H5 m5 w+ e
5 E' D: C' H _5 Y" D( I& I) ?
; f- W7 H; t0 I7 p8 ^
) Y9 S- l- B$ ]
. J% k! I3 q1 Y: V Q0 e1 u' {. e, O9 a, N/ ~! Y+ v
2 ]* H& g2 K2 b: ~1 }; Q|
7 m& U9 G7 M) I V3 |
7 q& x5 O) c/ N) D0 D2 P |
* }; u8 W% o5 L" P2 w2 x5 j
0 o( x4 ~5 w+ ] y" W( c0 P, K6 W% `' r
5 n9 G4 b" m0 U* b/ e; {+ n8 i
~+ l X0 @" b7 j: f" T5 R1 A2 o2 \; t
% S$ _/ v5 [/ s; T% i
3 z9 s) {% Q; _; u! ^$ d( l
4 _, y0 t a; T- Q8 q" @, T# f| . [1 V2 [* {" L& Z; v% `
V4 | ; i8 d' O, C7 p W6 h. `% v
|
8 i7 G( k# A- ^& A+ n; c; `
5 N3 t$ k$ S' u, a$ @) o1 k% \/ m7 I) E7 M8 R
Z3 C3 w& R* B W: {- V8 c x
; j5 [) I1 ^, f/ _, L, N- m9 ?/ f7 r V# g# Y$ R, p
, D% r7 z2 ~$ ^ a; [) X; S
: [& U( p; \) U' b( W
& l! z3 n, Z' z, j0 ~|
' d- P) ]. f0 Q$ ^( W2 a3 \ V5 |
& p& \, F2 D! O! u4 h8 g2 D | / S; A. U7 } `
; t' ^, t4 A( c: x- D' q6 n
% }6 G8 a) f( V7 I
( Z* ]1 q; Z5 ], o! N# ?5 I4 }# t) ~# T' A# l
. C4 n s( V% B5 @/ B- _( _
6 O" B: Z4 @3 J6 I4 t+ T
3 a2 S9 K+ J7 z" ]! E- {' ?7 c! ]9 ~( Q# f6 X
| / Y* S( L- O% r1 g/ F
V6 |
$ u, L3 z% Z4 ` | ' q, Z5 E" X& v* I- Z9 L. Y
# W; {& Z! O% g0 Q! i/ T9 r& S, ^3 O$ L% Z( W1 j3 B
$ C! j% n8 B) P
* i: b( y5 w$ x0 f2 F% v0 v/ @
) T* H4 f4 u; E1 E* ]4 @
8 K! U$ i1 T h8 a$ }
4 J) s* I0 \1 ?$ k" C+ E" h! M4 s& N8 V; [3 M) V, f
|
5 f2 ~( \6 P) U% X 1 | - e3 B8 Q. P) w0 G% K9 A
|
) x" H: D# ?3 |% T( s* e( `* g% b( j! z4 v& c: W: k8 @
* s: i3 _: N# Y' a; m$ ^
5 }, L% q+ {& l3 a
9 g# m4 W0 ^8 X% m Q3 C, t% Q2 o
5 W; E9 y, `! f
$ U" l( s, m% e' W3 n
i. @0 O5 j' }7 _| 6 s! k$ n6 l3 i7 O; {
1 | 9 R( L, S4 Y; h/ o& R
| 8 Q: m+ _8 P$ H2 Q8 K9 ^. `
. t9 |$ |9 @" n, k- N! p2 T- Q! s3 Q& r" C! k- y7 [1 {) d
/ s0 e( T2 `1 i. c( Q/ y+ g
$ K6 O7 |9 a/ X, H2 t
/ _# O8 S* F- S$ Z5 x
1 A) S) m1 J- L0 y3 ~; V
! c1 o) O+ Z2 L" P" W5 k0 \1 u
| - }8 m' J8 ~' N6 e
2 | , N+ y& J) ~ c+ s
|
# O0 p6 r8 b g t' f" X3 e; ^6 ^: T& v* H( r% j
4 ?/ J& r0 i" h- O. D: R. R6 e" I# T) v
5 M5 {+ N6 s; E
& l. ~3 E) D; j$ V. T9 V( j: t$ L
+ ?' J5 C0 Z: q; E. r" g8 E
) R1 c* j$ A& }5 K
+ \8 Z6 B+ V* | Y1 R
|
7 _ y" D" K: O" {; Q8 h' ]. K) T 2 | ! z) }9 N2 x+ e
|
$ w; D6 Y" T5 r d
7 \/ p7 O- [- E
& Z3 P6 q' r* {1 G3 v6 i, G/ _" }; z) k9 ]
, y7 Z) Y5 K. F; w; y6 a: K7 z1 q3 {3 l, A6 T5 j- y4 p+ x
) G: w6 j+ F3 b" D' e' ]. c
2 a& ?+ | Z3 r3 w
# P- L6 X3 A2 P: g4 u
( v% I7 \) \0 c' M9 y8 M4 P|
) L# `: i' F6 Y% N3 Y4 j1 z) U 2 |
o. x) y2 `2 P5 ]/ W( u: B. C |
# L+ a. j3 P) k4 R9 _9 N& [; k
6 H- q5 B6 ~1 v2 X, o* V2 J0 Y; e* C3 L- f% E% P5 D
5 k9 f9 t( B1 |$ }: E
9 u+ T5 c% G' o2 C4 p0 j3 H1 p. p# C' F( ?
9 E8 k; Z, Q" _! u% b
9 T# P1 p9 @) R4 O' K a
. ]) y) [; J. c8 _4 J/ I| * {: j e! b6 Y u- f, w
3 | 5 O K2 N" C7 C1 M" {* a
|
/ U4 E1 W/ v! c* |- p6 f* X
$ r; E$ u/ N: j) {8 s$ s6 A9 r4 s2 s! A" _
" i5 D/ g. S- |9 o6 q' d* o; _! I- {4 G1 D* O
7 S( m& y% f5 D! E7 }/ {
. b9 t3 s" {7 s0 ~
5 L# ~0 ~; z7 I/ }' N! y
8 H% G2 p) L2 ^! D! N2 O: q" q* t2 y, ~
|
/ ~, ?3 S$ i- c1 u 3 | ' N6 U, }5 `5 ^" e0 A" b
|
0 z$ m7 G: q/ V* ?
1 E8 ^9 o8 l9 K* Z& s* a% J
% h+ {; e/ `' n' Z3 t/ O: _
. H a. y {1 z T. {# {# R) g: Y& V9 m: o" G! J6 V, R
# V2 S5 m9 K+ Q5 m3 Q- o
; z' G8 o. u }
' R, v3 u- M! V% {7 P# b& q$ c8 n% }* g# P0 x' v. c/ I3 r# @) d
|
3 Y7 _9 t! N; n8 \6 } 3 | ( F4 l/ q. Q: K1 f7 f5 M
|
/ K7 L& o' I9 X# A
* X; S: V, K2 Q; X+ [5 {6 J, q8 v
p. c3 Q8 h4 g$ s0 M8 k
, M( c1 Y( ~7 U6 \4 r% y
1 d4 c$ d2 q- A' }, l4 V5 m1 x' W" q1 Q. Z9 s" O% h1 P) |
/ t! d E# u1 s" E0 M& J/ Y, G/ m6 x
| * D8 f8 E, V+ p
4 | 2 _/ z) w0 m8 E2 N; m) H6 b2 A
|
; U: s6 x. \9 H3 x% s( Q7 u5 ?2 O$ Q/ F0 I9 G* y+ p3 @
$ H7 @6 s$ q- ?! c
0 F9 e; M" I+ u3 x+ E. u, W/ o8 e% Q4 c+ s/ P# o8 K/ Q: _1 O; ~
& [( @( R0 t9 J4 ~) y
# I& W* }* [4 Z- d4 H' n2 M
$ c4 X- P5 e6 u# a4 X
7 Y3 x- o# [6 F8 O( Y|
/ I( V ?. ^1 v* W 5 |
$ P( O% a% n# J1 @2 }. o5 u | val>val>val>val>val>val>val>val>val>val>val>val>为了便于计算机求解,特作如下规定:(1)节点V1表示树根;(2)当两个节点之间没有线路时,规定两个节点之间的距离为M(较大的值)。
2 B. j* v: B6 _. o7 T7 Z MST的整数规划模型如下:
$ B& r- d7 U( { ) z& b, `9 B# y6 ~4 Z& o
2 W" f/ q' g' d
! X* G5 X+ K O) U' Q8 t9 C ) y. N1 X2 [' R6 {7 n
! f3 @* G) G, K( K- k
0 _1 h0 R6 p4 R7 m! N6 J. u1 ~5 p9 D 例7.7 分配问题(指派问题,Assignment Problem)
3 x! ]' \4 \: @4 \这是个给n个人分配n项工作以获得某个最高总效果的问题。第i个人完成第j项工作需要平均时间 。要求给每个人分配一项工作,并要求分配完这些工作,以使完成全部任务的总时间为最小。该问题可表示如下: " c7 C% B1 [* n% |, `1 S' _
$ b" ^8 ]% N! N4 S9 h0 P0 E$ a+ H2 H
显然,此问题可看作是运输问题的特殊情况。可将此问题看作具有n个源和n个汇的问题,每个源有1单位的可获量,而每个汇有1单位的需要量。从表面看,这问题要求用整数规划以保证 能取0或1。然而,幸运的是,此问题是运输问题的特例,因此即使不限制 取0或1,最优解也将取0或1。如果把婚姻看作分配问题,丹茨证明,整数性质证明一夫一妻会带来最美满幸福的生活!显然,分配问题可以作为线性规划问题来求解,尽管模型可能很大。例如,给100人分配100项工作将使所得的模型具有10000个变量。这时,如采用专门算法效果会更好。时间复杂度为 的匈牙利算法便是好选择,这是由Kuhu(1955)提出的。 9 ^) ~* C3 n G2 S
model:
+ t, g8 p" x* k !7个工人,7个工作的分配问题; & N" b. p: j5 i. n: E4 E
sets: " l- r# \- v! M9 D2 g
workers/w1..w7/; ( E9 _! z4 O0 R7 f
jobs/j1..j7/;
! _8 c: i1 y' W [ links(workers,jobs): cost,volume; , D6 H/ c, V7 `. v1 o
endsets
+ j7 ~4 b5 r, A4 M* o6 v" Y) o !目标函数;
7 V0 R& V6 ~" {1 a! N min=@sum(links: cost*volume);
/ K8 I& w' R+ l" n' \3 r' u !每个工人只能有一份工作; h$ X+ v) v5 q' I6 v' \& R% P9 ^
@for(workers(I): 4 i' x3 T8 l l6 D N7 Z2 \* {# L
@sum(jobs(J): volume(I,J))=1;
* `9 m+ a0 g8 W5 p- \ );
" w& @+ q7 t! V !每份工作只能有一个工人;
- }+ w( U9 {' t, y* J5 V' U$ [. K @for(jobs(J): $ G9 I3 n+ C1 H4 r5 I- s# p( G
@sum(workers(I): volume(I,J))=1; + `+ q0 o0 r6 Y) w. }8 F {$ b
);
+ @2 g' N; y) U3 Gdata: ( m. V; ]) E1 M. C M- r
cost= 6 2 6 7 4 2 5
7 h. ^% E" w2 m! T$ z; a5 X 4 9 5 3 8 5 8
# e& Q7 ]. H8 T2 V A 5 2 1 9 7 4 3
& `, t# v, v. b6 s 7 6 7 3 9 2 7 ; K* w5 c1 O% c# F7 y/ |
2 3 9 5 7 2 6
" D6 F, V# [5 z; Y4 U8 b 5 5 2 2 8 11 4 ! r# w2 A6 q; m& _ P
9 2 3 12 4 5 10; ; T& H. T( l. ^, z- J: r0 |
enddata 8 }. |) t" T N; b0 L# P8 t9 P
end |