|
求解最小生成树的方法虽然很多,但是利用LINGO建立相应的整数规划模型是一种新的尝试。这对于处理非标准的MST问题非常方便。我们主要参考了文[7]。 ! }% s1 h( ]& k
在图论中,称无圈的连通图为树。在一个连通图G中,称包含图G全部顶点的树为图G的生成树。生成树上各边的权之和称为该生成树的权。连通图G的权最小的生成树称为图G的最小生成树。 - t4 U2 a6 b/ n
许多实际问题都可以归结为最小生成树。例如,如何修筑一些公路把若干个城镇连接起来;如何架设通讯网络将若干个地区连接起来;如何修筑水渠将水源和若干块待灌溉的土地连接起来等等。为了说明问题,以下面的问题作为范例。
+ _8 ~& W$ V# W范例:假设某电话公司计划在六个村庄架设电话线,各村庄之间的距离如图所示。试求出使电话线总长度最小的架线方案。
0 N6 M- s4 f7 [; _# Q7 Z2 \
, u" I( D$ z' U) j" D3 Q
3 [' Z0 Y! Z5 v3 C. @8 h. l$ B4 R1 ^ s
" Y+ ~* t7 X. Y
( K, t9 s1 z: m' O
6 U' P" a% }6 N* \# \+ z4 R# J) I2 p+ l
2 V3 F7 \! |' i0 q2 {! r: o
. z( Z3 g: X2 y6 n# r+ T
| 3 {9 N- g9 s6 m( Y
V1 |
7 P8 ]: _) e: d | 9 e$ Q) O9 _: r) C7 g" V9 t
( l; @; F- v1 a* T7 x8 s s4 J9 o& _: ?$ g; A* Q& \" R0 Y. `9 X
- r+ P9 q9 a; v2 c" l/ ^: `
5 ?2 u7 y" n3 q
) h8 W" x& [/ J- N) p
/ a! m# M2 H5 D9 |) L; I
/ }6 d1 N* ]6 P6 [
) Y. n0 t, {: r) X7 @/ j( M|
" m7 e$ A; w8 e" _/ h V2 |
9 |* i5 e8 \! F% u) ^ |
. q9 Z7 M3 ~% {; L/ h- W' n. \, F; }
/ P# N- M1 N) a0 g- s$ w& R- k
1 T! x- C. Y3 C1 B3 R
6 T! O& |, {& ?: O% @
7 i5 j" v& U& b* r# M4 {. d0 B. S/ S3 w! P, j( T, r1 g; Q
$ E# _. [$ `& p6 \' M/ X: k
' }9 a; U0 D: |# w x' E
| ! g- {% r6 E4 r; c
V3 | 0 G8 e. a( ~# v4 P: v; t+ N
|
" y2 ?7 o+ ] O
. { t( g# p7 J- E; X1 w, D" a' ?* S8 _2 f$ d
" e& r3 Q4 h/ L. ?, L
+ O2 j, P5 [4 C& L
& G. s3 v% \3 U' M
$ K+ ?* `+ q3 @% p9 {, d& k: ~: E
0 G4 T0 X1 Q/ {, E- j8 M
) V1 q h. T- p8 f* k* t| + A8 {# d) D& e
V4 | 7 g- E7 O$ k, _
| % j) I" m2 |( p4 u
' x! O) d/ e6 |( N2 o2 ?( W% P3 ]0 }
3 P4 ?0 `0 I/ F9 m, Q( h, a( _2 O/ Y# _" x: U5 }1 B, C8 Z
9 c, N0 L/ b: V1 T$ x% l! c
0 X0 ~; r% Z0 V4 h( g5 D3 f: t* f% I2 A6 m5 I2 N- k* L$ S
9 K$ |# \7 [7 o5 J" E) g. c6 s
| 4 @) |9 D1 j7 W+ X2 x5 O! X$ e/ h
V5 | ) n0 [+ U0 i" ]8 O4 ]; n( j
| ) {6 W0 E" N- c5 d8 k; c
% D+ w% E' O: c5 @
4 f, z0 ^# U% E: F" q a* D0 u# T, J" K# g$ E" p
+ T+ X8 b+ s! E1 F; }: v9 _; K+ M: b
x: n2 S+ O2 j8 @. C
# D/ [0 l# Z5 p9 E1 K6 K
D+ r' g! ]. Z6 [3 Q w a7 }8 p
& X9 D( Z+ T; U|
, @! {0 W0 |2 e. i; R V6 |
" F. D L( m/ G, G* n |
. F L" ?! T" u9 [) R
5 G- L* D( g0 c) }, C5 ?# }5 t8 ]+ i; b& q- y7 p( N d
* ~2 A I. S! t' Z( K6 N, d* H* b$ ^9 x$ h# ?7 [0 [
- J2 K( F4 L3 n% C5 N. }6 c* T
% T$ J Y- u1 j- g- R# t+ W! b5 x
( K; k0 L; S8 C1 ^5 y- b9 W; h8 K3 _, q
|
# N6 @! o2 P6 }4 V8 S 1 | , ?* W2 j& ]% K2 {# s
| # q$ z# J+ v- A( P- b/ K. R4 T: \- I
# s& z9 U( r5 J( G
% J7 g/ c% i k( m
3 v5 b0 g) |6 y- w0 ?' X6 T( I
- w5 E1 w) \8 }! Y0 ~9 O
* ~) j2 T- ~. w
- h+ s: i( h( R6 }/ G7 Z# U! |! [ T; ?
) {. ?& v7 I: R5 x| 0 U& T- P3 |" e; n# @
1 | , k$ g" `, y& ^( z: a! L% c0 ^+ {0 H
| ( W" u" X* f) V& Q. J5 U
# _0 V# L( x/ [& X& q8 i% s% f4 \9 U- X8 A- z5 U. E
8 e" D8 G" F: ?3 D- |
$ ^ V% Y6 T5 @ Z
9 B! G0 ^) v) w" o7 V
6 m7 E0 q1 u$ [/ M) ^1 ^/ _2 p& @1 o+ {: I: h3 e0 R0 }
- p$ d+ G' ~/ }# [|
( M2 t; A; M* n$ v 2 |
$ M) Z3 _4 N1 d4 O, ]& r( c; K |
6 I/ A5 u8 Q. O5 V) N) H( J1 y6 F. P1 E. ^0 j E8 @
: T( I% y& b% I3 Q \- N+ c Q* r
3 w7 t: G2 W' O% a. m1 E% g; G8 f+ W y3 S: t& y2 y9 K8 l
1 ?$ | }" @! e1 O$ c+ Q. d
1 F7 [% j% c" w6 N( n: u# Y
2 S ~% a s. D" B% s# q, i8 u
& X5 E7 b t$ k3 D# {) M% o| ; b% B: x3 W% k% l0 {
2 |
) G6 N" _7 }, c5 L; x | ; X+ m& a2 N" \" ^" F2 r2 L
5 j' ?5 s X3 f- |5 }% K" e \& E
7 s: o* K# c3 G Q+ ]* ^8 R
, C4 C$ t, a Y3 n' B# ^3 K
+ w6 Y6 u& T7 @7 O P7 }$ D6 a {- ^
5 V+ p$ D) v Q! {. X3 B: X. K6 Z& [9 J2 O
5 s3 s3 @' ?. J7 f/ I, _- n2 a0 \
0 x, X6 H: r' n/ g4 ?
|
+ Y+ k; g% k4 i/ I3 Z, X+ h 2 | ' x3 X$ g9 _: P: L
| ; g: ]" e6 \+ j! C' h$ J8 h$ T% x0 e# R
7 E8 q7 Z+ r7 D0 E
& q7 i7 Y) {4 V; h( q2 Y- v: M
# _9 f J' W+ x* x2 | B! Z! j! |, Z. ^$ O* X! k1 I, ~' H# X1 }3 e
) |2 B3 \/ e, R7 d# _4 ]; K1 G6 L! z! }
. C) z0 }5 T; v2 r$ ~
|
6 ]3 M1 Y% v8 `- _" D 3 | - b$ q. \4 `2 i" h6 o
| 8 ^) b# j. G: q* |# w
3 C s! _- }0 ~. m/ u& P0 w$ f; l" n) r' O4 k8 I* t3 ~
6 g( w1 p: f- `/ O$ ~
+ N) d5 y3 \6 H- d7 u
- J% B) x* G4 M7 F6 T, _
' k8 E, J7 O/ Y9 B& _9 M% e
3 @( o* o: ^& W# C4 z5 p6 N O1 B
2 m. P# e2 H+ T3 k i: E0 K|
- X# m; o7 R) M; ^& l6 [- U9 C 3 |
0 Z2 U: o2 Z! a- p; S | * c# |9 x# m, `% t* D
$ P4 `. t1 i, `
! S# e2 N+ N8 D1 ^" D1 }
5 J( N1 \+ {: m
+ ~1 p d5 T- J1 D7 L3 P# c# Y" v
! I: K: K* L, f) n7 D/ S& c
) J8 ]1 G" ^' A0 f0 M% L7 J2 T! H; r4 I" Y" u
# J" {* b7 t K% r: d1 |- D|
7 W3 }. Q* s1 }! n; S2 w 3 |
; e: H$ N/ v6 A | 6 m* q$ y8 `4 M9 c
( I0 o: e# O4 U' [+ M1 @: G
9 l3 k8 @& `5 K7 H2 d" x
7 X( T1 V) N6 m1 p! N- H- T- t- C s
" r3 Z J$ h( i+ R8 ~, W; B) }1 q
. Q* d8 Q0 V1 F- i& d( p
; F" p* R7 Y; E6 e6 m2 t# K, R3 o! d% I. Y# S2 V5 E: _1 ?# n
|
* O3 _# r7 v& A$ w. l 4 |
6 C/ r8 r1 F) A' y; q) l |
9 S* R6 q/ i8 i: i
2 `6 G5 j/ q6 {. @# A) L. t
7 W$ Y7 v2 L2 e2 ^- A7 i
# l P0 R0 j! D. |3 ^9 {; k$ R4 Y8 u- B5 V! d
4 Q4 q: B P5 {
) J$ ]7 R; c% u* P
7 w! `* c! R- L" \; F
7 d5 i5 `4 F: J& S2 w|
9 n# p; M4 Z9 U# h. x# u/ `# v, F' Q 5 | " J0 @ j* o1 T2 T: W! K2 U6 }
| val>val>val>val>val>val>val>val>val>val>val>val>为了便于计算机求解,特作如下规定:(1)节点V1表示树根;(2)当两个节点之间没有线路时,规定两个节点之间的距离为M(较大的值)。
- B" l4 v# D7 z* j) m MST的整数规划模型如下: 5 V" ]4 S# t, m
/ y2 n# q& h2 w$ I8 v4 C
$ m& w7 L2 e+ Z2 w- }* k* C
* e7 O% `: ~% }" J1 J+ ~ 2 X9 x9 I5 v; n1 @2 r/ b c) G6 ~+ S
, M& \9 y4 k M $ x( I3 }) {( E+ P/ g
例7.7 分配问题(指派问题,Assignment Problem)
; e6 A$ ~8 w- h4 m; t这是个给n个人分配n项工作以获得某个最高总效果的问题。第i个人完成第j项工作需要平均时间 。要求给每个人分配一项工作,并要求分配完这些工作,以使完成全部任务的总时间为最小。该问题可表示如下: 9 H* e8 C) B1 B. ~% J
( r- ?7 J8 s" Z& C/ U
显然,此问题可看作是运输问题的特殊情况。可将此问题看作具有n个源和n个汇的问题,每个源有1单位的可获量,而每个汇有1单位的需要量。从表面看,这问题要求用整数规划以保证 能取0或1。然而,幸运的是,此问题是运输问题的特例,因此即使不限制 取0或1,最优解也将取0或1。如果把婚姻看作分配问题,丹茨证明,整数性质证明一夫一妻会带来最美满幸福的生活!显然,分配问题可以作为线性规划问题来求解,尽管模型可能很大。例如,给100人分配100项工作将使所得的模型具有10000个变量。这时,如采用专门算法效果会更好。时间复杂度为 的匈牙利算法便是好选择,这是由Kuhu(1955)提出的。
, n4 z% U* }/ ]+ g' Ymodel: ; c, Q+ o& |( l- {" J
!7个工人,7个工作的分配问题; 0 ~$ D0 O0 `7 t, P: P
sets:
& V, k+ O$ `1 I9 @( H; A workers/w1..w7/; 3 R% x- f Z+ E4 L. {
jobs/j1..j7/;
9 g1 _2 [+ v/ L0 k6 i links(workers,jobs): cost,volume;
0 }/ i3 z N' W/ ?endsets
* w+ m, L$ l! E0 M !目标函数;
: d; O7 L) { ^& R0 e min=@sum(links: cost*volume); 8 \* J2 x6 b$ G# M1 |: {
!每个工人只能有一份工作; ) ~3 T- s% K5 [6 k! g4 |- y0 M8 k3 Q
@for(workers(I): _* o+ ~* [4 V+ M. ?2 K
@sum(jobs(J): volume(I,J))=1;
8 N6 d- s; m* m) E/ C3 o );
: |0 P- U7 N t0 D r- o !每份工作只能有一个工人;
& _; G# E& ^# }" v' V) {' h! C @for(jobs(J):
7 b# u6 [+ h- A1 G+ X* o; \# A @sum(workers(I): volume(I,J))=1;
, G H9 Q, _' F7 ~- ] );
, ? {* \: c0 q0 I* y4 ndata:
% S& g5 c7 K% ^" H cost= 6 2 6 7 4 2 5 1 Z5 I& u0 T0 T% j/ @
4 9 5 3 8 5 8
; N; U; r3 o z t; J 5 2 1 9 7 4 3
9 r% a4 g/ }$ z7 }4 W5 Q }: L 7 6 7 3 9 2 7 7 m6 @! E) x6 Y3 M7 r8 d" |
2 3 9 5 7 2 6 ) e' M% C, o. n' [9 q
5 5 2 2 8 11 4
# s1 X( N& z% C+ W7 G( }0 g1 p( K 9 2 3 12 4 5 10; ! z4 z4 W' i% Y6 B% k2 R
enddata 8 U$ E. }! H* e; V
end |