规划中的变量(部分或全部)限制为整数时,称为整数规划。若在线性规划模型中, 变量限制为整数,则称为整数线性规划。目前所流行的求解整数规划的方法,往往只适用于整数线性规划。目前还没有一种方法能有效地求解一切整数规划。 , c) g; P+ z% P$ O# u) A8 Y1 o6 ?" E# G$ \9 S+ K
1.2 整数规划的分类 2 Q( T5 {0 t: R; r: I( ^如不加特殊说明,一般指整数线性规划。对于整数线性规划模型大致可分为两类: ' k+ U+ k; H6 K& Z/ O ; k6 _5 E/ \! J& x 变量全限制为整数时,称纯(完全)整数规划。 . s+ P/ e" ?3 ~4 ^( b ~' {变量部分限制为整数的,称混合整数规划。 , A( Q" d8 T5 b' T& C5 |; z1.2 整数规划特点* M% E0 V ^4 x8 {1 j
(i) 原线性规划有优解,当自变量限制为整数后,其整数规划解出现下述情况:6 B. ^8 h4 _; c" c+ T
- @* A! B: e+ j G, Q$ ]/ `
①原线性规划优解全是整数,则整数规划优解与线性规划优解一致。5 d! @; S2 c! z
②整数规划无可行解。+ |7 S7 c4 I( n+ m3 i
③有可行解(当然就存在优解),但优解值变差。 3 L2 J& h- g' s& ]5 T) M% m6 r2 c(ii) 整数规划优解不能按照实数优解简单取整而获得。 ( p' K) N7 Z: N0 T& `0 `1 y, j8 f- c2 C! c0 u: @
例 1 原线性规划为 # v$ k5 ]- m6 Z; z/ ]3 y
/ T4 b. G* _# I; s" a/ x/ p # t( i, c- K( m' L- l4 Q+ `+ x ]( A+ B. u' F* N! X 9 p* p+ \: g2 S8 x' }5 y6 Y- p
- ~! ?+ x1 Z7 A$ R8 P# z
1.3 求解方法分类 : N7 t1 ?+ f, ]9 z(i)分枝定界法—可求纯或混合整数线性规划。 0 j- Y0 ^/ N4 W5 J; e1 _5 v- b- w4 _3 J6 `, u' L* Z
(ii)割平面法—可求纯或混合整数线性规划。! N0 @1 d5 q- j& [/ K' t* _' C5 `; z c
& I0 n/ k$ ]) j0 q% O0 Q
(iii)隐枚举法—求解“0-1”整数规划: & g3 i: e- J" x) `0 W$ c0 i$ ?7 I$ Q) P% G# @' I
①过滤隐枚举法; + Z2 I: C0 M" a. m) [1 d
②分枝隐枚举法。 ! _; G3 P% Y$ Z(iv)匈牙利法—解决指派问题(“0-1”规划特殊情形)。# @* x8 F' n% \8 w2 I
8 F' B! q' ]1 o(v)蒙特卡洛法—求解各种类型规划。8 G. i' k, B% }5 o1 C
0 j- m5 w9 S0 g" S. a) h
下面将简要介绍常用的几种求解整数规划的方法。 , o& m; o; `6 U3 }' Y7 o! ^; x7 _3 O: r
2 分枝定界法 6 y/ x) S! Y" E6 Y: u+ W分枝定界法的主要思路( w `/ n. ^9 w
对有约束条件的优化问题(其可行解为有限数)的所有可行解空间恰当地进行系 统搜索,这就是分枝与定界内容。通常,把全部可行解空间反复地分割为越来越小的子 集,称为分枝;并且对每个子集内的解集计算一个目标下界(对于最小值问题),这称 为定界。在每次分枝后,凡是界限超出已知可行解集目标值的那些子集不再进一步分枝,这样,许多子集可不予考虑,这称剪枝。这就是分枝定界法的主要思路。5 Z" A+ ~/ a' ]6 a0 T# o
' X) M2 t2 a* T u分枝定界法可用于解纯整数或混合的整数规划问题。在本世纪六十年代初由 Land Doig 和 Dakin 等人提出的。由于这方法灵活且便于用计算机求解,所以现在它已是解整数规划的重要方法。目前已成功地应用于求解生产进度问题、旅行推销员问题、工厂选址问题、背包问题及分配问题等。 ( ]8 P' y5 N- @" e; {2 o! Z7 p+ U5 ? 0 ^* N/ I1 c+ C9 D3 Q5 \6 b5 a8 Z1 M2 G ) Z! z/ x6 V: H7 f5 L% N# f / H" m* e" S P8 N% ` / A- H2 h* ~8 ?6 ^% S. J) l ~+ v' h/ Q- i+ e从以上解题过程可得用分枝定界法求解整数规划(最大化)问题的步骤为: 0 a6 G9 ?+ K( O' N( I9 i2 E0 c9 X, F( E- p3 U1 z
分枝定界法求解整数规划问题的步骤; q/ M# I a. M7 q
开始,将要求解的整数规划问题称为问题 A,将与它相应的线性规划问题称为问题B 。 3 v, J' ?0 B0 ]5 I8 U6 b: M( b* H3 |& I& o9 e8 J% u8 K% Y& q : C# a; [5 b1 @# R# X2 R. K( k j$ X. i
3 0− 1型整数规划 9 I9 J6 t, a3 w' c& P2 A, B 4 b" o+ L- _- G" V/ F" v 7 A) _4 W2 \4 ^: A! h' ]3 f( T9 A. E( T+ Z2 r' ~8 ]% K
: }- m. g* q7 L( k# z0 e, `* D4 }8 D 所代替,是和一般整数规划的约束条件形式一致的。在实际问题中,如果引入 0−1 变 量,就可以把有各种情况需要分别讨论的线性规划问题统一在一个问题中讨论了。我们 先介绍引入 0−1 变量的实际问题,再研究解法。 0 {& ?% Q/ H* Z( \- F# o5 ~' d9 ^5 A5 a6 ]/ [/ w) x: S8 d+ S
3.1 投资场所的选定——相互排斥的计划 6 D# q( t+ q4 J5 T 例 4 某公司拟在市东、西、南三区建立门市部。拟议中有 7 个位置(点) 可供选择。规定 ' @8 {* O' ]9 _3 L; J: N
4 I+ G+ n$ c J4 e/ |在东区。由 三个点中至多选两个; ! L% j- Y0 ]% L0 Z
在西区。由 两个点中至少选一个; 0 O; s* N; l1 c1 ]* P H1 A在南区,由 两个点中至少选一个。 0 m1 g( x8 ^% L K) r$ f. u
如选用 点,设备投资估计为 元,每年可获利润估计为 元,但投资总额不能超过B 元。问应选择哪几个点可使年利润为大? 解题时先引入 0−1 变量 令 ' s) r- I8 Y5 s4 Q5 u" ?8 @( C2 }: e! O; I/ R, T" W 6 A, S/ _/ d9 |' O- i+ [: a9 z' T0 n" Y8 d! _& p( i4 ?/ F' _7 {9 i
于是问题可写成: + m( x v' ^/ i! ~
: g' N$ @/ S$ K% l; K: F9 a* t ( }1 {8 p8 d& N ( T2 K _1 G* W, F0 ?9 w) c7 }3.2 相互排斥的约束条件 4 g- d+ K* i4 y, w
有两个相互排斥的约束条件 : D4 U3 O6 X0 e' s4 j+ }% E5 K; L, Y0 L6 u+ @; E. D. s 2 ]4 r+ t2 ]6 r" B
& q$ O/ @% ^; g! @$ A3 t ' b: d, I* O7 V2 ~7 k Q, V& W
7 n( y0 v W/ ]
3.3 关于固定费用的问题(Fixed Cost Problem) 5 ]/ s0 r8 H3 S; W. j在讨论线性规划时,有些问题是要求使成本为最小。那时总设固定成本为常数,并 在线性规划的模型中不必明显列出。但有些固定费用(固定成本)的问题不能用一般线 性规划来描述,但可改变为混合整数规划来解决,见下例。/ l* S1 O2 _ g/ _) u# H6 c, Z
$ S. L1 H. ], _4 Q; p% ~$ n) P' L
例 5 某工厂为了生产某种产品,有几种不同的生产方式可供选择,如选定的生产 方式投资高(选购自动化程度高的设备),由于产量大,因而分配到每件产品的变动成 本就降低;反之,如选定的生产方式投资低,将来分配到每件产品的变动成本可能增加。 所以必须全面考虑。今设有三种方式可供选择,令 / J$ c& P+ q" j5 f5 y9 l
1 G8 M! s+ h9 h) S3 g 2 D9 C/ F- T( k* W& A; k; d & S1 G6 g8 }7 K: { ; T+ @- r& l; Y8 o5 M3.4 0−1 型整数规划解法之一(过滤隐枚举法) % C/ i0 i8 {; \ 解 0−1 型整数规划容易想到的方法,和一般整数规划的情形一样,就是穷举法, 即检查变量取值为 0 或 1 的每一种组合,比较目标函数值以求得优解,这就需要检查 变量取值的 个组合。对于变量个数n较大(例如 n > 100 ),这几乎是不可能的。因 此常设计一些方法,只检查变量取值的组合的一部分,就能求到问题的最优解。这样的方法称为隐枚举法(Implicit Enumeration),分枝定界法也是一种隐枚举法。当然,对有些问题隐枚举法并不适用,所以有时穷举法还是必要的。 $ i! j3 f- M. `$ X6 R$ q ( l! h6 T3 X$ }; ^1 @; } 6 c2 U+ W9 {+ k O3 f6 A6 z1 p: A0 n# D- l! u [
4 蒙特卡洛法(随机取样法) 9 ]' \! W% e0 e: F/ I& i前面介绍的常用的整数规划求解方法,主要是针对线性整数规划而言,而对于非线性整数规划目前尚未有一种成熟而准确的求解方法,因为非线性规划本身的通用有效解 法尚未找到,更何况是非线性整数规划。 然而,尽管整数规划由于限制变量为整数而增加了难度;然而又由于整数解是有限个,于是为枚举法提供了方便。当然,当自变量维数很大和取值范围很宽情况下,企图 用显枚举法(即穷举法)计算出最优值是不现实的,但是应用概率理论可以证明,在一 定的计算量的情况下,完全可以得出一个满意解。 ! \, M7 @2 I5 V7 ]
# o( B1 m6 b8 E) ^' e6 w 4 l$ w2 t$ ?( b) v ) \) m3 m0 n# o2 A7 l% w1 F 9 A- e7 T' H7 x) I& ]9 U( N6 K7 t. t4 W; l, h/ M
- T& k; R+ X- X! p% q1 w9 H
解 (i)首先编写 M 文件 mente.m 定义目标函数 f 和约束向量函数 g,程序如下:2 {6 @! H8 w5 }" H4 x. W3 v
2 m: ~) l! i) T* P$ V * l: R1 X/ B dfunction [f,g]=mengte(x); ! p* O: d; ~$ e* |8 M$ c6 u# m% d
f=x(1)^2+x(2)^2+3*x(3)^2+4*x(4)^2+2*x(5)-8*x(1)-2*x(2)-3*x(3)-... # c% @2 v. a5 O F4 S+ qx(4)-2*x(5); ! K9 ]% K3 p3 @" i
g=[sum(x)-400 x(1)+2*x(2)+2*x(3)+x(4)+6*x(5)-800 , v5 W+ |2 p$ N. t9 Y- T6 J
2*x(1)+x(2)+6*x(3)-200 3 N( }2 B2 C, G0 }( f! Z# Ix(3)+x(4)+5*x(5)-200]; 4 q3 R/ k0 g7 e% s) W+ M1 Q(ii)编写M文件mainint.m如下求问题的解: . D8 c7 H( Y- C$ p- k. Q8 A" M8 a6 `2 B
rand('state',sum(clock)); $ ^. e. X M9 L2 T) ~
p0=0; 3 X* y; w# ?) z% O* i0 F9 x3 n
tic 9 z) o% L3 z2 _+ s7 zfor i=1:10^6 0 |7 c3 O0 ]3 i8 E/ _& ?' T3 Y( I
x=99*rand(5,1); 1 W8 c* g$ Q9 ?: ^. G6 Q5 ?x1=floor(x);x2=ceil(x); ' O X& H; W* X[f,g]=mengte(x1); ) P% q3 y' L: N- o. Y0 U8 k! ~if sum(g<=0)==4 $ T) c! P& @2 N0 S" @ if p0<=f ! B. n& S# _/ ]: z( B! a/ B9 Q/ x( _
x0=x1;p0=f; 8 B' Q) u! N8 [! q, Z
end 9 U6 |* T) H( F9 } e* c' p& r: pend 2 w" @- t6 T; E% |[f,g]=mengte(x2); 1 i( B. k! i: j& E$ ^. t
if sum(g<=0)==4 * G9 X; J" t1 L" _
if p0<=f 1 A. M: }& j/ U( e+ j1 O- h# }1 ]
x0=x2;p0=f; : i* w+ a1 F! @3 ]- b, `4 b5 H
end . j# d& p, h4 s( r& A
end , J0 ] o! A6 J! ]4 X) g1 C" ]end * t2 B+ {: u. c5 N
x0,p0 toc . g$ h; n5 o U" u- D3 `
本题可以使用LINGO软件求得精确的全局有解,程序如下: % |6 R) o+ V& T! U- b% c* ^+ i& g+ J$ q2 Q
model: + @8 {) O: x5 k/ O+ Osets: 6 q% R1 y& m! f% y8 m
row/1..4/:b; 7 c/ i! D, H. b! q
col/1..5/:c1,c2,x; 0 T( k. u$ x/ }4 X+ Qlink(row,col):a; 9 C- c7 P6 E6 M3 G* l$ h
endsets 6 Y& ?6 _& }8 y& }
data: : Z$ x- B9 o$ N/ p0 A, kc1=1,1,3,4,2; 6 ?+ s- E! T" X! v8 i/ b" Sc2=-8,-2,-3,-1,-2; : D- q4 N, F' ^* G/ [a=1 1 1 1 1 R- g) H5 p3 A# Q; j: ?
1 2 2 1 6 & ^( h: p$ N2 g 2 1 6 0 0 9 P1 ^( g$ k9 o8 k5 N
0 0 1 1 5; 2 f2 O1 w" q- o+ Y0 ^, V) Z- l; G( d
b=400,800,200,200; ( g9 ]+ B9 h- E1 I$ f0 j- U, |enddata , W' l! j( Q+ N- U* d: wmax=@sum(col:c1*x^2+c2*x); 6 A" I% ^/ J [% t@for(row(i)sum(col(j):a(i,j)*x(j))<b(i)); ( O1 ?) M3 ~; `@for(colgin(x)); 0 y; r, g* ?+ J* d
@for(colbnd(0,x,99)); / P/ C! ]) I A7 V! p1 oend ) R9 e5 ]) `9 w8 M% ]4 o ! w- x& p; K k" ]. v ' u1 e7 y. ?# U5 指派问题的计算机求解 :bintprog 函数9 s6 K) m) w3 c( T9 U0 B
整数规划问题的求解可以使用 Lingo 等专用软件。对于一般的整数规划问题,无法 直接利用 Matlab 的函数,必须利用 Matlab 编程实现分枝定界解法和割平面解法。但对于指派问题等 0−1 整数规划问题,可以直接利用 Matlab 的函数 bintprog 进行求解。 , d% C: X! L' \ }' t; e0 t
" o7 m, @5 {! i- G0 U例 8 求解下列指派问题,已知指派矩阵为1 j; y7 X- a2 g" ~6 J
# x0 l" W& I4 N/ `. Z% v/ @ 3 F; I0 P. B8 B C0 _4 L$ k% a
' \) H- F4 T) `) r' o# w3 L解:编写 Matlab 程序如下: 6 F7 ?& t9 D1 [. u, r K # W* H0 o3 x5 O4 O5 qc=[3 8 2 10 3;8 7 2 9 7;6 4 2 7 5 $ l( B; v- X' Q7 {4 `% W h. J2 w
8 4 2 3 5;9 10 6 9 10]; # F S t2 i# K
c=c(; 3 }2 ?( W* m; l4 {0 H3 C* ^
a=zeros(10,25); 8 i+ U* ~& S4 S+ h! l
for i=1:5 1 B* d" f1 g- u- G a(i,(i-1)*5+1:5*i)=1; ( A9 h. W7 @: G* k5 e) M( `
a(5+i,i:5:25)=1; " Q2 @: [$ i! o1 j$ ]" D
end z6 d# t: a- g( U8 Q
b=ones(10,1); 7 p5 a9 H6 c6 Z
[x,y]=bintprog(c,[],[],a,b); 3 V0 ]2 u6 r, g8 N" X
x=reshape(x,[5,5]),y ! j' W% `2 C. h D; |# N" C ! I1 V0 h& u8 a* w+ Q9 F7 C 1 E# D% A* t* N b% a/ u5 ]- M , n& s$ N0 |8 L8 r9 Q6 r$ i3 n求解的 LINGO 程序如下: 8 e" e7 \) P; z* o" C- T* D$ [8 C, N , \: b8 V% N% }; jmodel: 5 t v" Q+ `4 N( e+ _ ^, x" m
sets: ; p; ~# r, u- R0 X3 K2 j/ l4 I4 c6 h7 \+ pvar/1..5/; ; I @- s0 i# `& B4 Y; v
link(var,var):c,x; 0 w$ w: w' }" n/ r
endsets + O% G6 n4 Q9 J6 P+ x Bdata: ( z, |" ]( w# c$ u2 `' E( V8 G! i; A+ vc=3 8 2 10 3 5 @1 d) C! l- |, \) ~3 e# x5 D
8 7 2 9 7 / V$ ?' e' O' H) U2 ^# U8 K
6 4 2 7 5 $ R! D( u0 s$ j! N9 t( q }% Y- c q9 T
8 4 2 3 5 ; Y& G5 D* _" d. H- s3 o& G 9 10 6 9 10; $ M# W. T1 p2 Jenddata 3 \' i, j+ V+ `4 x2 e7 Q% Amin=@sum(link:c*x); 1 s5 ]$ ^+ C/ u+ J; k; s
@for(var(i)sum(var(j):x(i,j))=1); : p9 X+ ?2 u2 Y/ \2 k; P, H@for(var(j)sum(var(i):x(i,j))=1); # K( o3 u4 }+ b9 \- ?( N$ t) N, `; y@for(linkbin(x)); 7 R9 x0 j3 n' v/ e1 C8 `% {end . g( U' l' j7 y0 _9 v, o8 \% M) N6 生产与销售计划问题$ k' C) b3 }' r G8 H
6.1 问题实例" ?* {8 f& n3 s$ J; G4 z* ~
例 9 某公司用两种原油( A和B )混合加工成两种汽油(甲和乙)。甲、乙两种 汽油含原油的低比例分别为 50%和 60%,每吨售价分别为 4800 元和 5600 元。该公 司现有原油 A和B 的库存量分别为 500 吨和 1000 吨,还可以从市场上买到不超过 1500 吨的原油 A。原油 A的市场价为:购买量不超过 500 吨时的单价为 10000 元/吨;购买 量超过 500 吨单不超过 1000 吨时,超过 500 吨的部分 8000 元/吨;购买量超过 1000 吨 时,超过 1000 吨的部分 6000 元/吨。该公司应如何安排原油的采购和加工。) B/ G1 Q/ z+ d4 |9 k0 J7 l1 r- S
9 }3 w9 l6 K8 e% x; ^" M# N$ F
6.2 建立模型 , `, F* A' c7 M: j' B0 q(1)问题分析9 N E8 m8 C! _) x5 d2 G' i+ _
6 q% d9 S8 Q* {3 \0 w安排原油采购、加工的目标是利润最大,题目中给出的是两种汽油的售价和原油 A 的采购价,利润为销售汽油的收入与购买原油 A的支出之差。这里的难点在于原油 A的 采购价与购买量的关系比较复杂,是分段函数关系,能否及如何用线性规划、整数规划 模型加以处理是关键所在。 7 {* P' g0 l$ M6 F! h 1 s" v% j- G" V1 v(2)模型建立 6 ^; x1 a: u3 s7 M4 u \% L+ F: h$ v . D8 U+ m, t) C
" v# O/ W( t! d4 Z: N- E8 P
6.3 求解模型9 Z- N+ @! ]. ~) x
下面介绍 3 种解法" G# s& s; V- r' R6 [9 o
0 z$ M. ~& W. L( q- k7 g(1)解法一 7 @ y5 I$ l9 j" F3 `
6 p3 B) V( x& P' C% l ` l$ r, A1 B- i# X7 q 8 z+ P! ]( g2 H/ [ B由于有非线性约束(15) 、 (16),因而(7)~(17)构成非线性规划模型。将该模型输入 LINGO 软件如下: - s' ~! Y: C9 Q0 B
+ b/ i2 L8 N# c/ `' ]* j2 w) Zmodel: 0 k( _; n3 G {' W9 W' Qsets: $ _, h- [5 z& q% B" c9 l
var1/1..4/:y; !这里y(1)=x11,y(2)=x21,y(3)=x12,y(4)=x22; 7 ?+ {% j, Z. p) e* _+ H
var2/1..3/:x,c; 0 ?6 _. m0 K! F5 [7 `
endsets . K8 Z6 T1 |, u
max=4.8*(y(1)+y(2))+5.6*(y(3)+y(4))-@sum(var2:c*x); 9 I7 c3 V/ t$ O: K& ?$ cy(1)+y(3)<@sum(var2:x)+500; # c% P( @2 S- F: z* u8 N# \& Z( H
y(2)+y(4)<1000; 5 r! U- U/ e' z; m: K0.5*(y(1)-y(2))>0;3 m' }' v1 `" E* B1 x1 w+ ]" p! k
0.4*y(3)-0.6*y(4)>0; 7 |+ {/ v* A0 O
(x(1)-500)*x(2)=0; $ t# c9 s( P% X" U. j4 g$ Y U(x(2)-500)*x(3)=0; 0 G6 F3 {$ {* u@for(var2bnd(0,x,500)); 9 c1 X/ u \, F% r/ F4 rdata: 6 d. t X" }9 `. q4 oc=10 8 6; % J" O* \& F, S" o5 j
enddata & R; N' s5 `8 u9 V4 jend ! v+ a% ?3 X; E6 P- _可以用菜单命令“LINGO|Options”在“Global Solver”选项卡上启动全局优化选项,并运行上述程序求得全局最优解:购买 1000 吨原油 A,与库存的 500 吨原油 A和 1000 吨原油B 一起,共生产 2500 吨汽油乙,利润为 5000(千元)。 (2)解法二 引入 0-1 变量将(15)和(16)转化为线性约束。 - \3 d$ I5 q/ V - _" F( U# q1 y, C2 h) d 3 k2 u- b) A2 y8 J- o& Y G6 M' u8 c1 d/ Q# P 2 u/ v* u7 T! f+ u7 T% _" T & i& C' j* c p* A, q2 ]! o% _式(7)~(14),式(17)~(21)构成混合整数线性规划模型,将它输入 LINGO 软 件如下: : L! n1 m+ B$ I , d5 h y0 `& p# T& Q8 Qmodel: 8 @1 G: H- q( f9 E5 H4 ~/ n# z; z" A
sets: 9 z1 A# e; j3 p8 T7 A- k! s var1/1..4/:y; !这里y(1)=x11,y(2)=x21,y(3)=x12,y(4)=x22; 7 A7 C3 r' \$ d2 B5 w3 @ var2/1..3/:x,z,c; 5 j- I4 F* A% J* `8 X }5 T5 Zendsets 4 c- \4 c n7 T. E( r( C' tmax=4.8*(y(1)+y(2))+5.6*(y(3)+y(4))-@sum(var2:c*x); , Z9 P3 n: B7 D+ @
y(1)+y(3)<@sum(var2:x)+500; z4 E6 a& t) iy(2)+y(4)<1000; , |/ d8 {: H7 b. Q3 F0.5*(y(1)-y(2))>0; 3 E2 E. H3 x; T$ k) {) E$ _+ d0.4*y(3)-0.6*y(4)>0; 1 z5 n% K1 ~/ O5 w% A@for(var1(i)|i #lt# 3:500*z(i+1)<x(i);x(i)<500*z(i)); 2 |1 O. H: d& @! q }" j
x(3)<500*z(3); % M2 H5 X( m" M! ^+ h9 A
@for(var2bin(z)); 1 X0 S2 Q5 d. Q4 F@for(var2bnd(0,x,500)); ( I( `' E! j2 [# m% R
data: * Y& R) w4 D) A1 f% H3 F% h
c=10 8 6; ; Y- w: E# q5 f# M9 }, N% e8 n! R/ venddata - z7 C$ b( p/ T" ?% b7 ?$ L; ~% T
end ! w- c4 a" i# J# Q. u# y- m1 X- b(3)解法三 + }4 z N( x( b! ]5 J3 V
' U( ^/ O; I$ W. Q$ R3 D : V1 a& p" {3 j6 w# @- i . V. e% w. b' v, ?9 ?' `4 @9 X' r1 L7 }+ M5 G+ n
. @4 ~" Y/ M9 f+ S9 Y* h" f# d
式(6)~(13),式(22)~(26)也构成一个混合整数线性规划模型,可以用 LINGO 求解。输入的 LINGO 模型如下: ) {+ m/ i) F5 s; L0 N1 ^3 a. S; @
model: . S: K2 ] [, n- W0 o# u+ C$ D
sets: 0 _* l2 g. b% {& T: e& f
var/1..4/:b,c,y,z,w; ' T. a8 i9 s. g/ a& Q2 o7 i# O!这里y(1)=x11,y(2)=x21,y(3)=x12,y(4)=x22 端点数为4,即分段数为3; 7 u# [5 F2 _ wendsets ) X6 Y. b5 Q5 J; s. \3 K1 `( _3 Mdata: 6 N0 T2 K6 J6 _1 q" i
b=0,500,1000,1500; 9 R* K, o. L( }6 p/ e; _
c=0,5000,9000,12000; 7 j8 I+ m, B, j9 z& d% i
z=,,,0; !增加的虚拟变量z(4)=0; / A6 b' I5 y+ ~6 Denddata 5 `+ V, V; c6 y. n9 U; {$ k6 P' Omax=4.8*(y(1)+y(2))+5.6*(y(3)+y(4))-@sum(var:c*w); 7 G* w% P7 H/ P5 K- |* V; g
y(1)+y(3)<@sum(var:b*w)+500; 8 P( ]3 N! L7 N# j" M! |2 n/ @$ yy(2)+y(4)<1000; # C, ~; L; p( R( Z* j, }6 E# t" |0.5*(y(1)-y(2))>0; 1 Q9 p9 T+ M9 T9 k% i3 Y* Q+ [, L R0.4*y(3)-0.6*y(4)>0; 8 r8 j( ]: V( z/ L& x, X
w(1)<z(1); , g! m- I* F; r5 t! r
@for(var(i)|i #ne# 1:w(i)<z(i-1)+z(i)); 6 U- v# c5 W; ~+ f- ^: v@sum(var:z)=1; $ k/ v: d' O" W* Z# b@sum(var:w)=1; 1 A& r8 G3 c1 m/ a7 }
@for(varbin(z)); 5 T: c l6 K* X$ J$ jEnd & F0 v! H! g9 Q7 R2 I8 I* S! O j
注:这个问题的关键是处理分段线性函数,我们推荐化为整数线性规划模型的第2 和第3种解法,第3种解法更具一般性,其做法如下。 & I7 e {4 q$ q3 L) @2 D) \" ?+ j5 ~' r. k9 Q; c$ Z 5 _6 \, g8 E, P 0 V8 m2 X+ ~( P+ B7 u! [* X @/ _1 k' M8 u) V% P0 a$ u$ a. ^1 O' e3 y/ {5 h' Q) i! B
习 题/ [* r) D% o0 t$ f2 q
1. 用分枝定界法解: 5 U: \; r. m/ i , }) q5 E2 p) S/ N, S( C' e- N4 c ) ?, I8 X4 o3 ~& X h8 r' V$ B: [2 P! x2. 试将下述非线性的 0− 1 规划问题转换成线性的 0− 1 规划问题 8 E; m2 A/ K' w$ j& K/ Z" n$ Q5 t% {6 D
! V5 O# \9 w& b' b ) }! |/ Z5 F2 z1 Y; |" q3 L3 P0 k9 T" ^1 v
. I: e: E5 `! r/ u) u1 m
4.有一条河流由于河床泥沙淤结,每当上游发生洪水时,就会破堤淹没两岸,造成人员和财产的损失,为减少总的损失,人们采取破堤泄洪的方法,图 2 是该河流一岸 区域的信息示意图,在该区域边界上有很高的山,使该区域成为封闭区域。区域内又分 成十五个小区,每个小区内标有三个数字,分别表示该区域的海拔高度 、面积 和被完全淹没时土地、房屋和财产等损失总数k (百万元),我们假设 6 I9 o1 S2 k+ d) p* t+ M + T% d3 J% Z- K$ [(a)各小区间有相对高度为 1.2m 的小堤相互隔离,例如第一区和第二区之间事 实上有海拔 5.2m 小堤。 4 x* B4 E- b) V! n, F3 O2 e _" b& I% z& b6 G. O/ L
(b)当洪水淹没一个小区且洪水高于该小区高度 pm 时,该小区的损失 为 该小区的k 和 p 的函数: 0 n$ E2 r* Q* E# e/ J / z: f% L9 c6 U+ G( o 1 M9 y- {# S) A3 r/ h* S/ Y; {$ g ' k1 ~9 ]* d W0 t# x1 g% X. n5 _(c)假设决堤口,可选在大堤或小堤的任何地方,决堤口的数量不受限制,但已 经决口,就不能再补合,从河流经大堤决口流入小区的洪水量按决口数成比例分配,如 在小区之间小堤开一决口,则假设该两小区之间的这段小堤不复存在,若水位高过小堤, 则将自动向邻近低的小区泄洪,若这样的小区有多块时,则平均泄洪。 * C, ]. ^8 ]+ [/ `7 \3 `
- ]- l$ R2 [& |4 B B
(1)整个区域全部受损失的小洪水量Q。+ k5 W8 S$ e4 ^: ^0 h8 Z7 k2 A: Y