|
求解最小生成树的方法虽然很多,但是利用LINGO建立相应的整数规划模型是一种新的尝试。这对于处理非标准的MST问题非常方便。我们主要参考了文[7]。
! k4 F1 \9 G7 @5 w* S- N7 Y在图论中,称无圈的连通图为树。在一个连通图G中,称包含图G全部顶点的树为图G的生成树。生成树上各边的权之和称为该生成树的权。连通图G的权最小的生成树称为图G的最小生成树。 " r; }- X/ d" ?' `' c* \* K O
许多实际问题都可以归结为最小生成树。例如,如何修筑一些公路把若干个城镇连接起来;如何架设通讯网络将若干个地区连接起来;如何修筑水渠将水源和若干块待灌溉的土地连接起来等等。为了说明问题,以下面的问题作为范例。
- _1 x5 S$ L$ ?4 l范例:假设某电话公司计划在六个村庄架设电话线,各村庄之间的距离如图所示。试求出使电话线总长度最小的架线方案。 % ~. \* j5 X1 Q/ L) _7 m8 l |
; A' U! B- [# T6 S5 Z
; x% L2 |9 O9 ]# L
1 p4 ]: d5 _* J+ j/ Y
2 u/ |! {+ @& B6 t
3 e5 o- U5 h% C9 ~- t! `# {8 l" K" [; V0 X
^ X; Y0 Q1 j$ _1 j+ s7 W& N
7 m" n$ {, J" ~7 @4 H0 n' H5 ]/ R) j6 c4 f1 p" X4 b
| : |0 n$ q3 X0 d( `1 z
V1 | . }; C4 O6 d+ f. X
|
' P$ M$ h! u0 |7 `, v8 [) B' p+ i% Z. P; w0 b' ^& h6 `0 f
6 ^6 N7 ]+ ~& q! K- r; _- K) w% O
" P! {* y8 Q/ Y; ]* D( q8 o( u- F$ C
& M# W$ \0 \1 ]0 t+ m
8 i9 K" v+ J+ C7 D! ?: I
) P/ h3 e. u0 K: R! N( x1 \
7 @2 u# p, h4 r, n: N& u# o
! q. q, n+ P- Q, A Q/ y|
# D6 e2 M( E! } N7 E! H) p V2 |
* ^1 O6 U1 A) b/ v- ?. q |
5 ~: ?- X% p7 Y9 S) |# L7 _% B0 B0 c3 ~ G0 {3 Y7 \8 a8 E% b
( B; P( V" g7 ]5 q$ C; ~- J
4 G7 T/ M) N+ D( r5 S9 O2 P
; P2 x$ u2 c, Q
. E1 _$ z& ?9 [4 ?& C$ A$ r. Y! Y/ c
' S3 f0 @$ Q, _6 u, F* O2 i* k/ b) b
7 ^6 G) W: x# W% ]" P5 q- m
| 7 M2 D6 D- c+ K( E6 G
V3 | ) n, M) r# p0 ^' n# M. x
|
, J6 @% V `0 c+ l# ]% O2 v& k4 N8 M: x" C, }7 T! ]. A
! f/ n' j+ y& o' R {
# m8 f" [! D5 c! c4 \8 y2 V& @" D6 s3 o
O' I/ m" }0 T/ q: o5 d/ }2 t
: p$ S0 o0 J0 ]% U' d
) E3 C4 U1 O1 c9 A. X) o1 f# B0 z
# D- S- f' z" d& R& d| + V. Q; F* H0 p2 ]) j
V4 | . x7 L3 K' ~ z% W/ a# j
| $ j9 `7 ?, _9 K, v- z9 Y7 C
# p+ j7 L* V) J! i: U
, M3 e, F. r0 F( [1 t# s, k
7 `3 w' p2 I A
- _- M3 t2 p1 }' o _: j2 z3 L$ Y
* a: u1 Y! J" B6 W" v( ^
* i$ [! {8 L) k. f( u% f5 I: Y& T N$ [3 g7 }( |; T
" g! k. v. @3 u$ Q
| 4 M+ f$ Y) F1 Y+ ? g
V5 | & C9 `" A: H9 U- F3 {1 E* Z; z
|
. A, o5 q8 w ~! t
- M) `/ t2 z r
" Z* k" h$ m! \1 e4 C8 \. z5 o# x* J
* {3 o( K% b+ N9 V
) @) p8 [% u) o
6 p0 z+ u/ i) k% k$ T9 U
7 p" T. [0 x: [2 E$ F& ]* Q9 W" h4 J
|
+ p0 T K2 b3 `2 N# x* `* d V6 |
2 O3 O& i, \0 H0 X Q# g | - \. s8 {0 i5 p% C
# U5 E" Z& S) U, ?4 R
! \2 v0 J' Z- s8 s" h& f* w5 B8 A4 ^
2 \; X3 i) a8 E3 o" Q& k- e% p" Q# h, ~/ Y. c
! o& K- G% E- o
+ n% S& W) u( }0 n5 A0 Z* f8 h1 Z1 y i* v# R
|
& _. T4 Y7 w! q+ T 1 | 6 {& P! M" j3 \; E8 D
| - G1 W. L t( [( ?+ S! V6 r5 W# x
, u* E: f: Q |$ K! p8 C! S' q
! j* H: v9 s- ]% z _& @1 _# l* a9 ?% _$ u* m
9 g- ~9 ~& G( K# g
* g2 T# V' Q2 B" Q
, f+ Q" a8 G1 {# l9 _
; r, B- [9 V. B+ c0 M9 ~
6 R% Q* {5 w. I$ Y O& x2 @|
6 V" d, @3 ]7 C5 V% U 1 |
3 j+ n, @% q1 u | & V( X! L' ]6 w* E5 e5 k
; {7 l% J7 ]0 J/ }. F# q& a6 S V: r) _
5 M& q# m2 h4 A5 M& h: I
- C+ ]/ w% A; y
5 x w2 v# R, @& k2 y7 T% n9 U, H, C
4 ^1 F9 Y1 f* x# y, ~
" r/ W; ^* A! Z! l% R5 W|
) a4 ^1 b( B$ X$ n o 2 |
. V/ P! Y& [- f0 | | , _5 s4 J5 l6 G
& P$ v0 s5 v; g1 \- l! i; T0 d0 q, x8 L5 n5 Q& @
. e5 n. K4 O; G5 u5 \
+ ?( l3 F% G; d; Y- e! f7 ~% u. x7 }! e! i& G
. P/ h$ d* a/ E4 v+ H$ }
. S5 H. t6 n0 ^$ b3 i* P" N$ m5 |
; m! A* \& m( Z1 a( q7 A|
& m0 q3 g7 b7 G( |2 H- z1 X1 y 2 | 3 Z" T. J; y% l) Q
| . y2 v4 W6 f9 d9 N* i
& A4 A! K* v0 T* ` A& m; V! T. U! C* V" H" X) s; T
* E/ E- d- k" J+ j/ X W( _
* w6 T- W) `8 r2 m6 z2 k5 i" `0 O: P9 s& L, |, _
3 k, M& [4 h9 ~0 Q. C; V+ D. J9 f/ z2 l
1 L8 k, K9 q0 d; C9 ~. ]
|
$ F" V2 N! d& T+ z! O3 t9 E/ w 2 | & s( N) e8 O% j6 G
| ) P5 K" @6 w/ i; \* D. j" Q
2 {! t2 ]6 [" [# `0 }
+ V8 W# H9 m6 y. X" O9 [2 w, b9 U. H# U7 K' d0 h% M
, E- L9 E5 L% f9 T
: l) |# [- b% j) Z+ B
" h% ~6 H+ l' j& f! d
$ P) s3 ? S$ }8 T& S+ P# ^3 Q+ M5 B: P$ y! y2 J5 \
| 9 h6 l4 Q! W" g# L7 O1 z, h5 Z
3 | 4 x9 Y1 T. t0 Q; Y
|
# m& r" n, o6 V( V& {" c2 Y1 S" M
. D( Q+ u* U$ Y- a/ W- p
1 i1 v5 H7 c1 F& s$ _0 v5 ^3 M0 g- w4 J
; |5 c% x% F# ?' O7 h/ ^! U% O: O4 E1 {$ ~" y9 q- ], |& V& X
4 }0 d( g2 \2 {8 E7 s: ?
" e4 M1 `9 u# X$ g a4 v4 V7 ~|
7 E3 P! h5 x; u9 o4 Q 3 |
0 m& T. \4 r* j/ [ |
$ x+ F) Q E; m U9 U% Z5 @! [6 G. L
5 Z% U! J* x! A% v' Y7 B0 r+ A: K Q
' ?9 D- k, R9 s7 k* O$ i T# \; k* }( ?7 D3 y* [
2 y4 a0 x& Y" J. G
9 ^4 L! q, X) n( P, J( i3 V* f$ H& T# |5 n
2 J, |6 {! g5 G6 D( \% ~
|
! P2 M/ u) X2 T! G a2 R* N 3 | 7 j$ l, z, u5 a6 d* f
|
6 w1 k, c# j- R+ H1 c- X+ X9 n3 w4 h; M" n4 l
! M1 i% B8 J- Z [$ {; l7 E) T5 A
+ ]; I& V; N. W' [0 X
$ u+ a6 E& ~$ [, X+ t2 p
! V9 _6 V, U: l/ V# L( [
# A% R \' {% Q8 _6 u: `. s, ^7 A- W- B, ?! U- j1 v5 V9 z( N5 W$ X
: H, Q% [% A- E|
$ m! j. B( o; K3 C8 u 4 |
' u" N# v5 r* s6 W |
X. r( m3 N/ z/ k
% n' n7 A h( ?0 `1 B! ^& C% \) ]# P
( }. _* U, X0 J4 \1 N7 Y; \! U- P
( _7 m' m) f3 Q
2 J' R l3 _. @/ q3 }/ t$ {! h$ ~0 ^
9 n, B7 [5 B9 [; M% X1 h+ o
+ @1 T4 v1 X$ i$ p+ p| 1 W4 I5 q) A* }* I& w% H
5 |
( K2 o% C3 h# x4 F P) \9 ^ | val>val>val>val>val>val>val>val>val>val>val>val>为了便于计算机求解,特作如下规定:(1)节点V1表示树根;(2)当两个节点之间没有线路时,规定两个节点之间的距离为M(较大的值)。 , v/ W* [3 o& D8 [. p |& B$ Y
MST的整数规划模型如下:
% ]5 P. v8 d( X" y8 r9 R/ o9 u' {
% U& W' V' D# }) b, r ^5 Z
4 u3 n# ~, k5 z. y8 I2 |3 E / f' {$ F% y; B
. I) J" F9 j! N4 M8 s9 _* }
; G+ n+ ?' E2 T8 V" Y/ j# ~& h4 @0 X
6 [7 s- e' z$ q6 g* l 例7.7 分配问题(指派问题,Assignment Problem)
9 k( Q3 s9 g L5 }7 q4 b! v这是个给n个人分配n项工作以获得某个最高总效果的问题。第i个人完成第j项工作需要平均时间 。要求给每个人分配一项工作,并要求分配完这些工作,以使完成全部任务的总时间为最小。该问题可表示如下: % M( |5 |8 f2 K2 h) I
; O, \4 ?, J) c# E1 Z7 X 显然,此问题可看作是运输问题的特殊情况。可将此问题看作具有n个源和n个汇的问题,每个源有1单位的可获量,而每个汇有1单位的需要量。从表面看,这问题要求用整数规划以保证 能取0或1。然而,幸运的是,此问题是运输问题的特例,因此即使不限制 取0或1,最优解也将取0或1。如果把婚姻看作分配问题,丹茨证明,整数性质证明一夫一妻会带来最美满幸福的生活!显然,分配问题可以作为线性规划问题来求解,尽管模型可能很大。例如,给100人分配100项工作将使所得的模型具有10000个变量。这时,如采用专门算法效果会更好。时间复杂度为 的匈牙利算法便是好选择,这是由Kuhu(1955)提出的。 5 d+ S8 R% M. p2 ^; r
model: * H! y( |9 f& p& m4 o. T6 Q* H2 _
!7个工人,7个工作的分配问题;
" B/ G! p+ ]; jsets:
; ^7 k5 X# j6 A: ~' T workers/w1..w7/;
3 w/ B" J/ {% D1 K jobs/j1..j7/; / Z7 n* u; Z5 r3 M4 G
links(workers,jobs): cost,volume;
7 J: T4 P0 ?: ~5 n: wendsets ; ]. n" F* B5 X. I6 V" p5 t) P! {
!目标函数;
0 J W7 v, X' ?4 Z0 F# ~# d min=@sum(links: cost*volume); ; x* G' j- m4 y( V5 v7 M# U( p
!每个工人只能有一份工作; " ~- W0 U+ E" A$ U( ]+ u w
@for(workers(I): - q$ W# ?5 N; T$ f2 w/ l
@sum(jobs(J): volume(I,J))=1;
& r5 `. a, R$ T; a: u2 ~ );
4 u8 b, Y0 e, F. m !每份工作只能有一个工人; 5 z1 ~6 ^, @, r7 C1 n
@for(jobs(J): - R( H1 z; D7 L% i% m4 x% E- v4 o
@sum(workers(I): volume(I,J))=1;
! D( g) j; G# }; R; D8 }$ N );
1 Q! I$ v6 t }; @! s3 mdata: ! H! d9 ~6 T* h
cost= 6 2 6 7 4 2 5
& ~, {8 [# { K5 D0 ^4 L 4 9 5 3 8 5 8
9 Y- H5 n6 j7 J8 q- p# D 5 2 1 9 7 4 3 1 ~0 f9 {7 b) k% y, L D) |, U
7 6 7 3 9 2 7
4 u$ P% p& {- L8 I: D 2 3 9 5 7 2 6 ; H6 N; g1 P; s. \- b# w) X
5 5 2 2 8 11 4 2 y; C g% `/ a+ p: G% @+ {" F
9 2 3 12 4 5 10; 0 T" W' i! |; h* S
enddata
( M, f% B* z$ V4 `- I5 T" @8 Hend |