|
求解最小生成树的方法虽然很多,但是利用LINGO建立相应的整数规划模型是一种新的尝试。这对于处理非标准的MST问题非常方便。我们主要参考了文[7]。 & T2 X. m+ O. ]5 b* L1 }
在图论中,称无圈的连通图为树。在一个连通图G中,称包含图G全部顶点的树为图G的生成树。生成树上各边的权之和称为该生成树的权。连通图G的权最小的生成树称为图G的最小生成树。
6 C+ J3 e+ b/ F5 Z$ A$ _许多实际问题都可以归结为最小生成树。例如,如何修筑一些公路把若干个城镇连接起来;如何架设通讯网络将若干个地区连接起来;如何修筑水渠将水源和若干块待灌溉的土地连接起来等等。为了说明问题,以下面的问题作为范例。 8 p/ Y" }! b5 f7 S/ c
范例:假设某电话公司计划在六个村庄架设电话线,各村庄之间的距离如图所示。试求出使电话线总长度最小的架线方案。 . }$ K6 K6 q: n! X' y/ N
4 J. l% c) N- G! t1 R
% r( j, L8 t. C9 C( g9 k& d7 F" E' y1 a( q; f- h
$ a+ r* c( |0 ?! m
+ n2 ~- R6 {) k- T1 ~; |7 [% s: h4 U8 _! ~3 T# f' O
+ t& p$ I2 Z$ s# _! }, _9 a
7 M5 V; l( |& y8 f1 s n4 w9 n) s5 _, ?0 E7 j. C
| 5 u4 F$ W" E7 t4 q7 O# P6 ?6 M3 m) D6 ?
V1 | ; z% r6 j+ f5 T
| % r! q- B- b% k' |+ P0 V; T9 d
$ |) w) `/ C: Z1 d5 \+ i2 a# d1 ?1 F. X# x" C) m" e3 U
" g: ` x4 ~5 f6 a
]0 l& ^* l0 h
9 D" N$ i9 ~$ G, [7 l7 f+ _+ y
% W/ v5 ~" Q7 o6 |9 p: T# m
, P, m B& j! Z, A* e5 \0 k- a$ O: f
( u5 [/ O! \; ^' s|
6 e0 ~+ W& b9 ~1 h V2 | * G M8 r m# d, }8 _4 G
|
. O# U7 b+ B: S m) e# g
4 w% A# A( W# o' q1 R, {2 l. p4 ~
8 G" s o5 y" ^; c; t. |5 k9 D7 H$ h, s
' r/ G# Y$ @7 c; _# D6 g' c
/ S* D( {% C( G- w+ F5 t+ [, x* D$ _
' H9 C$ V3 v$ q, A/ j
7 m: Y8 H$ e9 ]4 Z7 j% m
|
& o. q$ x/ s# `5 D2 o1 v! g9 t V3 | & c( c; p2 b q
|
6 D' k* L6 L! K0 I3 g$ P- u4 S. d2 `. L1 F5 d7 b. w$ Q
" ]3 l4 y. Y+ v- ?9 V, v) _3 ^) h$ q" G
* L: e! y5 J2 n. L n" w4 g0 r7 h5 B n" X; o9 E; }
* O% U6 ^8 G1 H3 Q3 h0 d
/ M. }' \1 j0 W2 v
3 y8 s" ? r# q& c| & @' L0 ?& M' S% T7 E
V4 |
9 d6 `% G) N: k' n6 Z& b |
, ^! h6 u, y8 B, k+ [1 r
+ X4 m1 _% |" v
) E1 A/ |/ P& Q3 z$ q- a7 @# [8 [/ F2 C' X" J
, d" _/ ?# s5 L' P# j1 j( z! I& V& K& e3 o1 Y% X, ~
% U$ I! S% V' b6 w P; ~" f- {2 F* E7 E1 C% U- [ w! [) j N
8 x! Y6 [6 i$ G6 m' o: [
|
8 b7 v! g" }. K. G+ x) F9 x V5 | ( W, h! B7 e0 I7 B) `' c9 U
|
! u* v& T, x3 l8 ]& _5 ^
% p7 f ]+ F4 u* y3 O, e& f& r" H5 t: P- E- |
& b3 ?" y+ W. M- x2 f1 E4 S. Y
& }8 A4 X* q( M* A0 C* z0 l8 r' s8 R U) ~! u. s! s0 y5 o5 ~
! t! f$ A5 E/ c$ Z6 Y2 K
! z+ j2 [/ [) e
8 b) \+ [9 r, G/ r| # n0 o" |2 L0 U7 v2 ] L
V6 |
* [0 [1 k" Z9 s5 E |
1 }$ S& V8 M A
9 S4 Q) G2 L) r% H1 K6 B; Q* r3 ~8 u3 c7 p: }0 X3 M6 U
/ C7 n. U' A/ e0 ]: @- z) \9 w2 h0 } W% M+ v
$ G9 ^' T; E$ _$ g! f$ O) I6 [7 t7 Q- s3 F& z/ L( }9 X
- u3 @( A3 C7 |. R! r( E& b
* g1 E. O2 u* ^. o; i% F; i; ^0 T
|
' y4 X& d# [# U 1 |
s2 E! {, J" N% ]3 N1 W6 W | 1 b& U9 ] M9 c% z4 e
! Z! s/ F9 j6 _9 T3 R
/ X" i5 J; s8 H0 ~1 F* ?* R8 W
$ l# t: L% H n
" c$ G4 l. h. b/ d* x0 A U7 t
4 T4 d; G( W3 U8 {) t; Q; z4 R5 s6 G1 u2 ^( J% d# S
1 _1 z; h4 R5 T$ s- D" N+ f
# v/ }0 M \ O4 @6 c1 v|
T5 V5 g* f1 }. K 1 | ) [6 w' R: J# U! L
| 4 U& ?8 F4 _0 F$ [. a1 U5 h4 }& `
! K8 {6 a0 M# C a3 k4 {8 w/ H; A6 w) M1 u
4 H j% \: B4 [% o5 e% `% {" D) u/ b( N0 m0 ^+ k
$ W, N- a. _- U0 P: v
0 {- O- }! R/ z) J0 O" _4 u- D$ Q/ h$ W* P
; y) O% n7 i* k; o2 w7 i5 @|
- }. C6 c. d5 P5 [ 2 |
) |: d B, R- N1 f* z |
6 N. ?% k8 `# y: d5 ~' y1 w) L' T& f# V
3 _& k6 }7 Y5 \" O+ w
# S, D ^) G ^1 E+ L7 B
+ f4 o3 W6 E1 c& y" C$ a, L
( ~& g- ?) ], i" Y
" B7 u) b, {1 u5 J0 z* b, j/ o
" A3 J5 a" W8 V$ y
# j/ W0 `% g# f- c* w3 A4 j
| o2 B* h* m2 I \! B2 u
2 | 6 [1 R7 z6 j2 X) v( } Z
|
$ G! Y* [& j1 s4 X5 {& D: `" ]4 ?, K% q9 F l2 D5 _4 t% S6 f# [" m# F
4 J& Z# I+ S0 t& V+ k5 Z& y
2 u% E9 N1 r5 n0 _
" q# @6 i; j4 ]6 \- A( |# T
) K# t9 I" R3 J& M [/ x1 k- _& t- ^- }' S% r' d2 \
) Y1 o1 f% l( ?3 K9 T1 e K
9 j( q9 v p+ Q M+ O% a* B| 0 g3 V) s. ^4 }6 K
2 | ) m3 c4 s) a P
| $ p E% B$ ]& b6 G
3 U" g- y) P. R7 v; I; h1 `' ~, ^' p' y- S
+ L% y% s: h0 p# J; O
) h3 D; k" c3 b* q, A1 A J( ?
) H5 O6 }- n _# i3 N$ v/ Q: h2 z
) X+ G8 {2 e. L2 g" r* X( ^2 h" \' }4 @
| - _9 A' f) ~4 t5 q* V! v
3 | 9 V( h; a$ o7 b$ c5 W
| 1 M0 @$ h9 U6 @; C# D
5 y8 b5 U, F- e3 ~" p* S' ]
) w( \0 O% i+ }+ m: O9 P/ B1 k
" y2 Z- A1 A6 F9 K% q* z- u2 I
% C: T7 A; Z" T6 [& m/ P( c. v7 Y" T1 [, v1 _
9 N( O% g' Z# T) H6 f7 U5 ~7 g- E6 k( p7 p- g6 m8 A0 U
2 ?. Q! z4 P$ `
| % X% v' ^3 \/ b: u8 `2 d
3 | " E/ X ~3 o% |% E) {, h& H
|
7 e+ I! }- h4 v& D) y; n8 _% e4 D0 T0 x8 M- P
- }0 y: K3 f0 X- k6 d
2 l5 E- a( S4 Q
3 S$ B$ T n% C( b& R
) m4 m" R8 r3 f) E+ p3 S- P" g4 D. P, D! ?6 K
+ l/ v, W1 }! f1 L
6 q- Z* ~) h1 n( z9 N4 g5 F6 T2 _
| $ x6 {( n0 m! U
3 | % ~# g/ \+ T% |1 e
|
/ U6 \1 K; g: V1 E$ n- E; K
/ c- s8 W4 c# z" o( J, i$ x
) [1 Y, [" T' e! |, V3 \5 o' Q
. e% G, t+ h# ~( @" x1 {+ e3 N) _! h0 E8 s; `( L( y! q6 t
" H1 p; B5 W; l
5 h5 K3 i& ?. R
) }0 h9 Z: j5 f) N. g0 N+ e
' @0 `/ c0 S8 [) j. |2 }| 4 x* O- H& Y3 V; Q5 l5 {6 r1 ]
4 |
& P% e o0 V1 l2 M \- \ |
. s$ |5 B* `5 N% s
0 v6 z) c2 E9 j# I
& @/ S- T2 Z: L* Z$ j+ ?
9 }6 _6 p4 ]% U$ m
0 |+ H' H$ p" l# n
# E8 b& w" C# g9 R3 ^& o! n8 @% j, U9 `9 T
9 W; H) t* a! \5 A% J! f$ k, [$ o! ~. h
| 2 ?: y% k$ v; m& J6 }
5 | o1 b# Y" t8 \ q
| val>val>val>val>val>val>val>val>val>val>val>val>为了便于计算机求解,特作如下规定:(1)节点V1表示树根;(2)当两个节点之间没有线路时,规定两个节点之间的距离为M(较大的值)。
( f( \1 ^- ?( n- o9 @2 @ MST的整数规划模型如下: & h2 W9 J/ l0 Q! S# R8 q
* _! i# h/ R6 _4 t' n, n z
9 `& u2 w$ A+ f) w
% U! S. I9 q* Z* E; G& [
% \1 K" ~) Q/ K! V 6 Z% N" J% c7 V3 ~+ ^3 w/ w
: ~" _6 M; [: x, v 例7.7 分配问题(指派问题,Assignment Problem) & _' G: A" u' B1 s5 j5 E
这是个给n个人分配n项工作以获得某个最高总效果的问题。第i个人完成第j项工作需要平均时间 。要求给每个人分配一项工作,并要求分配完这些工作,以使完成全部任务的总时间为最小。该问题可表示如下:
/ h0 ?5 p, d! Z4 D# \7 C
4 R s) }% \7 H 显然,此问题可看作是运输问题的特殊情况。可将此问题看作具有n个源和n个汇的问题,每个源有1单位的可获量,而每个汇有1单位的需要量。从表面看,这问题要求用整数规划以保证 能取0或1。然而,幸运的是,此问题是运输问题的特例,因此即使不限制 取0或1,最优解也将取0或1。如果把婚姻看作分配问题,丹茨证明,整数性质证明一夫一妻会带来最美满幸福的生活!显然,分配问题可以作为线性规划问题来求解,尽管模型可能很大。例如,给100人分配100项工作将使所得的模型具有10000个变量。这时,如采用专门算法效果会更好。时间复杂度为 的匈牙利算法便是好选择,这是由Kuhu(1955)提出的。 , q& k" l3 q. T) v
model:
& ~( O- R) m1 U !7个工人,7个工作的分配问题; : P5 E7 @* A7 D5 r( ^6 u
sets: 5 ^+ _3 Y B& N
workers/w1..w7/;
5 |8 |/ n1 v, J# O. ? jobs/j1..j7/; . r6 b4 S8 E% p
links(workers,jobs): cost,volume; ' s6 j% v3 ~% Y- C: R8 }* P
endsets 8 e/ J/ r Y3 e$ g+ f4 ]& }
!目标函数; # Y% t$ D3 U+ C2 ]- k/ E
min=@sum(links: cost*volume);
, f" P/ c: ?. f- Y' E !每个工人只能有一份工作;
) m0 Q5 h M9 M2 v7 t# A @for(workers(I):
+ |7 p: \9 U' D/ U3 j A/ c @sum(jobs(J): volume(I,J))=1; " r9 D' l! a# f/ Z' x
); 4 H$ u& @: z8 g; W3 O5 F
!每份工作只能有一个工人;
2 p+ L, ?$ F- R! f' K @for(jobs(J):
U. O6 e9 ~( A/ w6 }4 Y @sum(workers(I): volume(I,J))=1;
( g3 i3 n7 J) j3 X0 C ); - T6 u: p% d8 w
data: l7 _- Z% n1 b( M9 W3 d, j( A
cost= 6 2 6 7 4 2 5
w' F, o: Y' I% `7 d( k 4 9 5 3 8 5 8 , u) d1 I2 r, z) Q2 I6 s
5 2 1 9 7 4 3
3 f' U; L ^, x( G! V" O 7 6 7 3 9 2 7 ! @6 L/ h7 ^! [* j8 s) H2 u
2 3 9 5 7 2 6 8 [4 ^# D0 n& W" C
5 5 2 2 8 11 4 ! ^- [ X# c+ ?! G) S1 m* {. }9 k- d' M
9 2 3 12 4 5 10; # g& P4 W7 L2 l/ I R9 P
enddata " y+ Y" _; b7 N4 B: G# J
end |