|
求解最小生成树的方法虽然很多,但是利用LINGO建立相应的整数规划模型是一种新的尝试。这对于处理非标准的MST问题非常方便。我们主要参考了文[7]。 ! N2 m* p* W" ]
在图论中,称无圈的连通图为树。在一个连通图G中,称包含图G全部顶点的树为图G的生成树。生成树上各边的权之和称为该生成树的权。连通图G的权最小的生成树称为图G的最小生成树。
5 I1 z6 _# G! U0 ]许多实际问题都可以归结为最小生成树。例如,如何修筑一些公路把若干个城镇连接起来;如何架设通讯网络将若干个地区连接起来;如何修筑水渠将水源和若干块待灌溉的土地连接起来等等。为了说明问题,以下面的问题作为范例。 & v3 ?; D- L* r& c' c+ m- v
范例:假设某电话公司计划在六个村庄架设电话线,各村庄之间的距离如图所示。试求出使电话线总长度最小的架线方案。 $ P0 x; p) ^ l; n! p/ g5 V
- N* j) z" f* B+ V, p% W1 E+ F
+ B5 ^4 K* D4 D1 @1 ]
6 I. b8 }8 Q% _/ U+ g4 |: h x
9 a( |& Z! p! W7 I: ~ F, ^+ p* Z3 k( A
( `* G, Q5 b( f1 t L( U
3 M0 d! ]0 i5 \/ U
: J N3 [9 s- p# e* G# j
6 a6 [9 e+ v/ F* I; K2 V/ h|
0 N6 S: @0 | c+ z$ s6 k+ w V1 |
I B% ~8 r' T4 M5 K, Y% t$ s | " Y, o- E, s, t9 Q( K
, |3 d& h/ h( @( E0 T& }3 |
* j n2 O, o3 J3 n8 o `* l
2 y1 w7 P6 |3 H. g6 N, e# a$ V$ ~. G5 W9 @" o% t
1 O6 d! L* o5 D* b" g5 _/ P3 d3 W' S
: a' \' ] \3 G
" U6 q7 L, h. J& r. `; Q' I
7 S4 J# }( Z9 @" s% U|
, I, [1 X) B3 X+ u V2 |
E) X2 H! T: ~" ~# i | ' }/ z/ h" M0 D0 A
: l& T& l2 f; D: O/ `8 s" k$ B
# B2 V! x9 [8 u3 L; g3 Q
' L& u( J2 x# l0 }' U- p. O0 Y: K x- n: w/ A( c7 {
$ g: L9 n8 a1 P1 v1 Q2 u7 R$ N; ~' y( S/ D! f
+ h# n! Z9 R( E* `! G0 ~2 |9 f" H$ {- F8 ~/ m8 e6 Y; g/ T0 B
|
8 u( W# \1 ]! o" C$ C. x% U7 Y8 B0 j V3 |
5 k! b) l& v! t/ v9 T# E6 ?2 [/ m | $ J7 A/ n) \, V# `7 Z4 C
0 X9 J; p; [# a: a W( g; t
! C8 M. V. V1 p2 l% P) H
! V8 s* i8 P, B; a- U; D8 D' ]1 y; v' Y* Y
, r, b' _2 y# K2 a- u$ p! u7 f" N+ p$ b. d. l" }
% [9 L% y. s+ ]% o$ b/ J4 u2 Y7 ~! S/ m9 k
| 7 x8 O B" ^% \2 c" Q$ I* c
V4 | ! G$ s$ Y# q" l" h% v
|
' @ W. s# z4 R7 H
- b: a5 V+ \* |0 T* R& X5 n
2 U8 z6 u7 p% Z- K I3 d8 }1 m6 ?1 Y( X* ]. ~
3 [( ^' S2 V: B! V7 b; H6 B" |, }5 t7 j+ R" m
, r$ T- F, Y: f; ~
/ ?; V" y6 m a+ T( ]( k) L3 S% V0 T
' a" \% N+ m9 E& l r# H7 \- m+ L* o| ) h3 ~5 A+ l8 K6 A G/ R' U
V5 |
! M# `& y7 Q/ U8 L; }3 p2 o6 Y( W | 4 A/ L/ Z9 Z. [
1 E+ S: U0 @! I( `6 G# Y1 S% w! ^( m4 H! @7 t/ ?0 I/ ~
) ~' x6 y- j5 k( N9 z w
/ W$ i. O; a' h
8 S$ p& q( w$ k* h
( D. {, U" Y+ c4 A% E* C' I0 u
# I8 X8 d |# Z! J' u' t3 J
4 j5 c0 c' \; D" g- _- I8 s6 o4 o| * {# }: r2 u; d+ u; I. M$ b
V6 | 8 V/ b1 X+ a6 r, D; e
|
' ~2 B' l# o3 H% o0 P; b6 ^. i Z9 `0 d
9 K. n# r( |, |- J. d& o
& {2 x6 H n5 O& }0 i- U
1 i' n; k$ i0 J& f: N, }- w* N3 e
+ o9 A: e9 v3 r6 y5 |
, t+ N) k' i; f }
0 |3 L& w$ |) `1 p! z0 j* k% B# d5 b' Y8 Q
| " I! j0 K8 H" Z6 `' c
1 | : l$ ~9 M7 @% @$ ]
| # x( g, P t3 u3 H- o9 A% n
* R9 Z) X$ @- Q* N2 n" k$ j$ j
2 H6 K+ Y; O; l6 {% M+ v- i- x) _' x9 ]) V7 B/ C8 ^
) p' P/ M) N0 H0 n* }5 w/ Q
0 ~( \; {0 G& r( h9 `% T g# n+ U' R& Q" Q
; M. I+ e O( c; n9 J( d) B
% G# o1 {7 K! x5 {* f* C. s
|
7 r! m: r% T) F5 N 1 |
6 \9 g3 b, a% G) u2 S! x |
0 k: c: B6 ^0 e0 F/ C* w
# m- t T' t9 X* R! N7 Y8 y
4 N. g3 `2 c% e2 e V$ ]* ~
& Q i# m+ s1 ~5 k2 h
8 u) x+ B: B, M) x( N' w% T1 p4 U( S1 g
. r7 N2 y `, k& z$ C w6 Z- u) ^" l
2 t4 n8 W* v! k. G) G! I# R% ~, T) a4 Q: _* {) J' {1 u
| ' N3 c2 S% H/ ~ ]( X8 [" {
2 |
' X5 y0 O+ J! t8 ~( W6 W" z5 N | 7 F) j F7 m ^$ W5 E) |- Q
% T% ?7 u1 X3 R& @6 ]4 G
1 c* g3 ?% A6 ~8 L) |
: z. J" ~+ ^3 \5 q3 P- M4 }- n2 {2 @9 Q" }9 H: ]. X
z; E. C K4 H5 S, H; x
1 l; a. E$ n2 y6 J, H; c/ D0 x+ |! I; u% M2 Q
' q' _$ F+ _! B0 _4 n
|
+ T G, k7 v3 r0 A/ H4 ^% ^ 2 | ! F7 B4 Z2 b, r) i% }- q) z% b7 N" L
|
- {9 S2 v! ]2 l4 |* g. Y7 p2 W0 H% k
( W( [( q. e$ ]$ y
4 l6 b2 \4 t8 e. S3 F2 N
3 p$ h/ C8 s. ]# @0 L8 W
7 m; k0 G4 \2 D2 H6 s% @, P
3 Z' T" V" m/ F/ k5 g$ E. k9 T4 U1 [, x, J4 w/ Y
( J7 f7 `2 F" |2 y* B; |
|
" i/ k8 A; N; J0 C y _ 2 |
; ?3 z9 ?1 M$ R2 |( _' g( c | ) O: d% z5 s$ @8 @8 `5 Z5 S- }; }
8 ~$ k! C; `0 O5 `' d U( u9 t4 K# B) M' k6 U
- z5 c9 T7 J& t4 ~) V& O9 [9 I, n
4 d: Z" A, o2 }6 X2 M% H' @% f" w D; J7 d" ^9 A) {
; P+ g3 ?2 Y T; _4 E: g4 o) n
0 ]4 Y% g" |: U* G
j$ Q, l \4 J8 q% O) k, U! z|
1 Z6 Q* }( t8 m5 l: P" E 3 | # O' m6 y* |- Q( Q
| 3 H, X, _- b d3 |
0 ?8 z& G6 L0 p1 ?0 \3 W0 j* \/ f+ _
* r+ V0 M6 v6 V1 \
5 f; F/ i$ j& r$ f Y# j Z
% ~$ ]* f# l1 p* Y3 m' C" y: z- z2 v. U3 D
- S( A3 X9 {- V$ n' H& m2 A* c' ~0 X; E! Z" F5 K3 h$ x+ r A# p( h
4 k8 E, w, U, G! {# J& l8 f6 ]5 i1 H. Q
|
# F" m6 i# _6 S2 p& d C 3 |
) s8 `6 e! Y& k, _+ N | ( K [2 ]+ K0 Y6 ]1 D
4 ~1 Y* U: r( |3 {' S" E2 |& o
0 o1 e: `( P, f% J
5 t+ Z- r8 j4 O( w
! o' W8 Z: p) P, _) D/ v5 z' C* j4 N( w- M
8 D4 [& N6 w4 j
4 W& N$ t) u+ }* {. R; a" F4 b5 o$ o* `" k% O
|
1 }! ~3 T5 [ @9 I- V 3 |
+ I6 ^+ D# o7 V1 v$ K" R0 `$ S |
% ~7 y6 L( C& u0 m' \6 q9 V9 O' t, I; q! X7 E
. v9 O- a5 o: g5 c, P y6 p7 {' Y
4 F( v6 I6 J2 c: Q/ F) ^
; w2 c0 A: U. |+ |
* q& Y! Y6 k8 ^# E% J6 W# r) c0 [: s, l. ?: t4 }
+ b1 d! [; }2 F# D, Y+ P* ~) c
5 G, g: w: ?# U' X" _1 C1 R9 ||
2 R, v4 c+ E7 u' z( F! n& [9 m 4 | + h3 v0 P% Z0 s! I3 b$ g8 ?
| - v1 L* O. m9 Z o Y$ E
$ c- f2 A; b0 M& ~6 d( D
7 V$ o' Y. b) I7 K6 Q& o' z) F8 P3 g9 D7 _+ M$ b F3 ~# ?* p
% }$ ?# [) ?+ I( ~# ^: Z. b: o
1 q* M1 E( l' v7 R% ^) H, r- ?3 r2 [+ G5 X4 X' H" Z# v1 i# }
, ]% n, w& B8 D8 m& f, n
, ^( i0 W4 c/ E2 u6 a| 2 t& y8 z" q" e- h
5 |
8 U+ w) T" F. ]4 z) Z | val>val>val>val>val>val>val>val>val>val>val>val>为了便于计算机求解,特作如下规定:(1)节点V1表示树根;(2)当两个节点之间没有线路时,规定两个节点之间的距离为M(较大的值)。 4 N# u( \. w: `1 D: m! V; ]
MST的整数规划模型如下:
% P, O; K& u/ c 8 S4 P x8 f* C$ k5 l
/ ^& X* x" p+ V
0 ?6 M. g1 M) i& _' m
- U' o/ j+ m$ w6 H+ P; T x$ X
) G. M- }8 t, L; S# p9 ~: L/ @
3 A% X$ S! \5 `' i2 w+ G 例7.7 分配问题(指派问题,Assignment Problem) @9 l1 Q7 U! A7 _7 @# s( {
这是个给n个人分配n项工作以获得某个最高总效果的问题。第i个人完成第j项工作需要平均时间 。要求给每个人分配一项工作,并要求分配完这些工作,以使完成全部任务的总时间为最小。该问题可表示如下: % `4 ?+ L( [0 Q! L* v
* D" O% G! A2 X$ L2 R
显然,此问题可看作是运输问题的特殊情况。可将此问题看作具有n个源和n个汇的问题,每个源有1单位的可获量,而每个汇有1单位的需要量。从表面看,这问题要求用整数规划以保证 能取0或1。然而,幸运的是,此问题是运输问题的特例,因此即使不限制 取0或1,最优解也将取0或1。如果把婚姻看作分配问题,丹茨证明,整数性质证明一夫一妻会带来最美满幸福的生活!显然,分配问题可以作为线性规划问题来求解,尽管模型可能很大。例如,给100人分配100项工作将使所得的模型具有10000个变量。这时,如采用专门算法效果会更好。时间复杂度为 的匈牙利算法便是好选择,这是由Kuhu(1955)提出的。 # J- P4 k2 E0 I: r
model: % M, k% r4 z# Y' ^ H: w2 A7 D9 r% `( G
!7个工人,7个工作的分配问题;
( [3 }1 U5 I' C3 p7 W7 S- csets: , V9 a& s2 A& r1 i- y% z
workers/w1..w7/;
, E' |, _& }& f8 r) U jobs/j1..j7/; / t. P8 @9 {( {, Y N
links(workers,jobs): cost,volume;
! \1 }2 }. {1 vendsets 6 f& D5 W! g, K t
!目标函数; 4 U, \9 Q( a+ P7 O) e& f) K
min=@sum(links: cost*volume);
9 \4 `0 f, c w: v6 s !每个工人只能有一份工作; ' }9 D0 {/ I% U" ~4 U
@for(workers(I): 2 {! l/ o! s% S; y, [
@sum(jobs(J): volume(I,J))=1; , f" B. b/ n; g! f, g s! O8 o
);
6 \: N, ?& z6 X' \1 ^ !每份工作只能有一个工人; 6 s3 U Z2 W. Q* R0 x" U3 L" F9 J
@for(jobs(J):
7 f) Y( q' t0 r% Y @sum(workers(I): volume(I,J))=1;
! F4 w" ? T( `& s6 {* n );
: n" Y' w0 ^1 odata: 7 U- ?& R* ?4 }: }, M3 O
cost= 6 2 6 7 4 2 5
( w4 F# `& R# i 4 9 5 3 8 5 8 / [! \8 d8 W d: Q: D
5 2 1 9 7 4 3 5 M$ P. j6 @; c, ~# ^. R q/ j
7 6 7 3 9 2 7 f5 V; U3 |* s; V8 `; e
2 3 9 5 7 2 6 6 t% V# d( M' @4 S! V
5 5 2 2 8 11 4 5 b" o/ m( X I
9 2 3 12 4 5 10; ; h) ?, H- d$ ]7 X' H4 E
enddata " a4 b3 g( R5 _5 N. ?
end |