|
求解最小生成树的方法虽然很多,但是利用LINGO建立相应的整数规划模型是一种新的尝试。这对于处理非标准的MST问题非常方便。我们主要参考了文[7]。
J( R4 M+ C9 L在图论中,称无圈的连通图为树。在一个连通图G中,称包含图G全部顶点的树为图G的生成树。生成树上各边的权之和称为该生成树的权。连通图G的权最小的生成树称为图G的最小生成树。 $ R3 {( [) c6 W! b
许多实际问题都可以归结为最小生成树。例如,如何修筑一些公路把若干个城镇连接起来;如何架设通讯网络将若干个地区连接起来;如何修筑水渠将水源和若干块待灌溉的土地连接起来等等。为了说明问题,以下面的问题作为范例。
. Z; z0 H' ]. r9 _$ f范例:假设某电话公司计划在六个村庄架设电话线,各村庄之间的距离如图所示。试求出使电话线总长度最小的架线方案。
7 Q3 Y+ Z5 U: f- p; A/ r I: R6 |0 t/ d+ f5 {- \; B) ?8 i. S
; A( F9 u3 A/ Y& F T! c- M& K; S# b! p0 C
" t5 e9 v3 A6 j' X( f6 e; W( F
2 G# }" a5 R) s& V7 p- Q' W$ P9 r- U
0 @2 a2 u# u+ S7 G) b4 E* ?$ C. x- T. @) I
9 c& \' j0 X* h4 U% A
|
! l- [. @6 X/ E7 P V1 | 0 O5 l- T. {# g# o
| 3 U% r: p$ @; C' [% ^: p
b5 w2 F' j E5 K- l5 A/ M4 [ o4 E* B7 r! D3 b
) x, X6 P- s$ E" C2 c7 ]6 u' k
# J# A% W1 c$ k9 V' s- \( ?/ @- v. v
5 V0 Q8 J9 S& v" ]) a: Z# I) x( Y5 z: _! ^
# |* H! K( d+ n9 G, s2 p6 M4 E) r5 H+ i5 o
|
3 f6 b: t. ?, [ V2 |
& q! I2 q& |3 b) Q3 O9 ?5 z# _% p |
% e2 @$ q1 W6 q6 p N( M# F, B
3 g+ w3 b. n# F2 h$ A1 I1 m$ {! }. p3 I
$ ?5 |1 g% F& Q
) o0 V, D' {9 }. y, x
# E4 V3 r4 I) |) b2 m' Z
: o/ A7 v% u$ a5 ^6 n5 V# O$ P$ x& |0 Z0 `' p# M$ r% d8 J1 Z5 N
& w) }$ o* J9 l2 E1 y q& g|
" o& @# T) Y$ k V3 |
?0 \( W* t! E0 ~$ g! ` |
* V( n& P% `5 a1 Q0 H2 N: _5 \7 F; F8 [* w
, r/ m" B( N1 s/ F' _
( g3 e- F5 h& C4 J% a5 s
/ N* u$ _ |" Z; [, P z* d
' o/ a3 _1 p; o. B, H& C7 p, K1 E* J5 L Z7 H1 U' ]1 K/ S8 _2 h
( Z( D7 l) O/ z: z& v t
' Y. J! @' p& `3 S( S4 W
| 5 X' V5 |- \5 P: x6 E7 \
V4 | ; y: B2 O9 c1 v
|
8 b7 y+ B. ^9 C! _
0 T6 E' Q7 {+ s- ?! u* j* y* ], P, \0 h: p. R
/ ?, ^$ ^, ` u) s$ z7 O' j% z
) O8 d% Q/ u/ a8 {
! Y! X" a* v1 i3 [8 C( E0 v; I8 m) l' }/ d2 y6 r7 P! R3 m
0 p* B5 L& c! R; B
* H! ^9 |/ Q" N7 J( l' l
| ( W& V4 I- h! ~9 t
V5 |
' K. ]( d/ q) _2 j0 d( E( [/ l |
9 s# H5 d6 V6 e
; v7 c* S7 ~+ z$ z+ V! `6 B) }& ?
+ P) ~3 h! y [4 E# F( l" c
$ r) ]; F5 Q+ B4 R# D" Z
. p5 _5 }9 w9 ^" c+ f& H& g; X- ] a+ H# k \6 u
+ o) {/ D% W! I
5 r3 `: U% U) \) a5 A| 5 k/ N3 j; m9 w# h7 ^5 `* x' v
V6 |
9 L; l8 H5 l& D& ?0 w$ O. o | 4 `* W9 g( F& `* K e+ @' l, O1 ~
/ s- b3 M9 z4 C) ^, m, F3 k! L0 i9 l# [/ Y
2 [$ j( f, O( o8 u8 {+ A$ l# r5 c, T. T$ h
( q; F7 E) e* g6 u/ A$ o- r/ w& m- m9 h% G
7 Q% r) {: c# m* x1 }! P9 @" Y
9 I5 b) r: T& ]- V|
# @, l" i; _0 Y, k 1 | - A. n& C. V6 Z. h' r; ^8 o+ t/ X
| , G/ n& U- C) R# r
* V/ b5 a& ~! }! b: m3 B6 o( F4 ?
& p6 N1 D3 R( B
Q- t5 d! I8 ]2 B1 R p/ k, ?
l: o& O7 A M4 S! @
! H- G1 ^6 v' a t/ ]- O% Y- O+ T5 D8 K+ t2 L
- E1 p6 w7 B0 J) x
3 [- R% `. E2 ]' f3 V7 a: u
|
7 Y% @# O2 @6 F T0 O Y3 Q% g 1 | 5 x7 T) c9 m7 V( G1 m3 C; t
|
9 H4 Y# d, l) b2 A8 H1 W" w E" i8 R$ g
9 S& f; u; Q- d" G
8 y8 I7 U8 v3 L1 p ^! m0 J) Z
6 B( O% o6 v( T* @9 V' V _% N- Y: e) ^( P3 f, K' g
# r" W, J% l1 v
: k2 v' Y- u3 ~+ J2 c* Z% f. ]
, M! r6 S5 r* P3 t. D1 c|
; D% F/ [' t7 C2 F3 L5 s- u 2 |
$ S0 a6 G$ l- u" p1 c7 ^& Y |
7 h+ Q( Y2 t1 @9 y# h. J
# b: n" |: W3 t( C$ S) p# L! [" W( ?) ~& m( c
4 v# H/ |0 @* d$ S( P; K! W
* J6 K' U& ], a! N2 w h
# Y- t% k! u1 V* i1 ~/ ], K% i2 ?
+ S$ [/ o# |( \7 O' v& h
$ D0 a) M! Z8 v w7 Y
: L7 O/ v7 N1 p1 i9 K|
0 Y# V3 T4 P/ f9 }) |5 ~- L& y3 t 2 |
9 B% A0 |8 d, Y9 X0 D6 o1 ?6 C7 | | 8 z* A# |, K* j
1 ]3 h0 n' t* {# D7 t! Q5 e9 y5 i m5 R/ A" X- o `5 }6 ]
0 d; C) t! E* i8 ^9 s1 f
/ z. S; ^0 H6 \& w6 E# |+ l
' A4 ^1 ?; ?3 {0 s2 Y* e) Q
) t: J6 N: a9 G3 D: L c/ z* U2 r$ R( A O$ S( S% T8 A: X9 P" K
8 e3 P% P7 z2 t! K1 e( h0 o
| & Z6 [2 I: u; E% n- l7 |
2 |
! M! M% R9 w, S) }4 [ |
. X+ } k9 b8 B+ y( v6 X1 Q5 A) w' N, C+ N# |
' q0 b7 e. y- G
' y" K) P4 ?1 C! E1 A; u: ^
! O" ~, O4 `; H6 Y$ [ g' G8 \9 t X
9 }. b* ~8 R- W5 f
. R% c6 J% b* S
4 v0 a5 W2 A: _8 d4 ]) j| 9 c$ h/ F' E x
3 |
4 S4 y" g/ a" q |
( Z5 C/ Z. z& C! @# g9 ~! f3 b) `6 [+ p& O. S
* e- b# C) `* f6 F. a# W4 n
9 q& S% y v' U3 D% v/ ~+ h3 U- l! h2 i0 f& D: [
: q/ k- |5 r2 h+ I& T2 w7 }$ @! w. g) w$ R' I4 J7 v. J
% U- G" r X( g2 m- @! L
" R7 e% C; |% t- v/ Y, T6 J: N5 M
|
9 p; f d+ S, b! P/ o1 ]3 h 3 |
! Y2 K* [7 A% w4 O6 ?/ X5 n | / ?) W; P& D0 p/ p& F
) f0 ?! T5 q& Q2 x6 Z3 s
- ]0 r8 d! g9 n; r2 |
. K+ g0 u/ S4 Y% D* h
$ t/ }8 U i& B j* b3 T
E- Q. n5 [# q
; k# K6 M# I# ^8 m6 z( N
) `+ l% V @: U! a! f; N5 t$ ^5 q- n8 d! W* Z
| + ]) d7 O! n2 k; e. G' x
3 |
F- x6 l) g3 `( a | # c' L) Y4 A/ m- A) j
/ o3 _, p8 z3 X: j* Q% l& f
# D( S: P+ c) a$ d2 ^6 X! w+ D1 [* L1 W* g& d
2 N. _: H) b5 J3 X+ o* \2 g
" j9 ~- R4 b3 b: r0 }# u2 Y% n" T& V' R6 P8 X G3 F1 t# c5 D% A
" M& t% W J3 ^8 o) g
4 w4 f. N, s9 G/ Q| $ z/ x; z/ S( ^) ^2 w4 t% \6 K( H
4 |
6 R. Z I4 L/ S# {0 q4 p |
/ j. O e; {* V$ p; H) W; W8 F( S j$ z3 D& F
U- `0 A7 s5 ?6 @/ C8 [, e: b+ ?( G) F' l6 B" @& K$ D
7 Y/ K$ c1 _9 W, ]8 P
! N/ v6 i P- p+ D2 I3 h# l A5 V4 z0 b8 X+ `4 q1 f! y
- z3 Q7 B' i! W" |+ U/ ?7 I: E; h, Q" T$ m
; ?4 l4 Z4 A6 h8 Q' F| - j3 T1 c, |& w* @/ s# h+ B
5 | : B% s5 W9 U+ E* O, @7 Y
| val>val>val>val>val>val>val>val>val>val>val>val>为了便于计算机求解,特作如下规定:(1)节点V1表示树根;(2)当两个节点之间没有线路时,规定两个节点之间的距离为M(较大的值)。 % X' C" Z9 N' u" z2 P
MST的整数规划模型如下: 9 Z0 C( E2 \% ~4 [$ |. D
, i7 i% l! ^( G- [, G+ f
5 N F# {6 G/ A+ \3 g" s
E" D7 l# e* k
" @' r8 E" u$ b$ W+ r
* @0 e) t% j) g6 r 4 y; M. Z2 f! e$ P
例7.7 分配问题(指派问题,Assignment Problem)
+ z1 I0 k6 y5 C; a$ L4 A( o b这是个给n个人分配n项工作以获得某个最高总效果的问题。第i个人完成第j项工作需要平均时间 。要求给每个人分配一项工作,并要求分配完这些工作,以使完成全部任务的总时间为最小。该问题可表示如下: . ]. S$ L( T% n- U
! d g6 B* A- v4 Z( A 显然,此问题可看作是运输问题的特殊情况。可将此问题看作具有n个源和n个汇的问题,每个源有1单位的可获量,而每个汇有1单位的需要量。从表面看,这问题要求用整数规划以保证 能取0或1。然而,幸运的是,此问题是运输问题的特例,因此即使不限制 取0或1,最优解也将取0或1。如果把婚姻看作分配问题,丹茨证明,整数性质证明一夫一妻会带来最美满幸福的生活!显然,分配问题可以作为线性规划问题来求解,尽管模型可能很大。例如,给100人分配100项工作将使所得的模型具有10000个变量。这时,如采用专门算法效果会更好。时间复杂度为 的匈牙利算法便是好选择,这是由Kuhu(1955)提出的。
' H9 j2 [' }8 e& {; Smodel:
3 Q) n( u; I4 N" L3 d6 p& A0 P !7个工人,7个工作的分配问题;
5 M" T" l. k* ~$ b/ e: d$ dsets:
& d2 P7 a1 D F5 b+ H' S) y workers/w1..w7/;
6 ?% u1 H5 G& I5 |& [# I jobs/j1..j7/; * N& P3 F! H2 a: i' d- B
links(workers,jobs): cost,volume; . x) I5 J9 g5 J9 D" [) U
endsets 4 E' \. d+ L h
!目标函数;
# Z% O* V1 A5 t7 R) D8 m- I: a0 p min=@sum(links: cost*volume); ( z# N- U$ H- W! w/ c& B
!每个工人只能有一份工作;
, M+ u" Z, m0 @' Q @for(workers(I): 4 I4 f9 c f' i& m, t; U3 N$ C8 a
@sum(jobs(J): volume(I,J))=1;
! y1 K7 m" L2 k% J9 m+ E/ X/ a' _9 ] );
. w7 ^* d) e8 A) w# j. O. p !每份工作只能有一个工人; 9 K" i5 }' s' ^& O' J$ v# G; v- F
@for(jobs(J): & @6 C! h, {' _" R! O
@sum(workers(I): volume(I,J))=1; , r) |1 L9 V K0 |; j5 ?8 ~/ G
); 0 a. B# V4 _4 G: Q" E
data: ! q* `$ }% E+ t" u% `& q& t3 Q o
cost= 6 2 6 7 4 2 5
% n. V9 w) b2 O. n" H0 D/ E 4 9 5 3 8 5 8 ' Z+ y( f# x7 c4 w2 _2 c& p4 h! t6 r
5 2 1 9 7 4 3
& w8 p+ q4 \. s) d& ^ 7 6 7 3 9 2 7 # Z$ t8 V3 E( [' x5 w$ j
2 3 9 5 7 2 6
4 |' I8 S- O5 Q" N5 z. _ 5 5 2 2 8 11 4
6 `) W) R$ }0 J; S 9 2 3 12 4 5 10; , f; v0 N4 u5 @
enddata 3 A/ {0 ~ f2 ]! n, l" r
end |