数学建模社区-数学中国

标题: 目标规划模型:求解思路、序贯式算法 [打印本页]

作者: 浅夏110    时间: 2020-6-1 15:20
标题: 目标规划模型:求解思路、序贯式算法
1.线性规划的局限性1 x2 ?9 {) T/ U/ S7 @) n. a) Q
只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。) ^; v: n' s3 h/ U: l$ g5 t8 t, a
$ g8 p0 [# m% Z
2.实际决策中,衡量方案优劣考虑多个目标" Y$ ?6 o  N; v3 \" |$ l% m( m
这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
( n- y) l; y3 R
3 z+ Q! s! q# B3.目标规划(Goal Programming), ~4 s" z* x3 }4 V* O' r
美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
& T' M5 e$ t, [6 ]( g- x& K
, E4 ~2 B4 e5 @* t# c0 \$ h4.求解思路' W8 }) Z& R) n* A
(1)加权系数法
6 i4 O6 {  e4 v4 j3 O+ O为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。! I* a3 c. S5 m8 j

+ F' Y, t. P; J& ^8 r) X7 q5 w(2)优先等级法
. p% j0 B6 }) A. o$ e将各目标按其重要程度不同的优先等级,转化为单目标模型。
- Q8 t" d, \# W5 l8 G! p% r2 k
" V# p  c& ?" V/ w(3)有效解法
" \; r, {, l; j寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。
& x- f2 e, e7 i* g: D5 E
+ ]2 J$ p+ y0 Q/ m" L8 v, k4 v2  目标规划的数学模型
) _, Y$ v- s$ m' v; ?7 Y为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。( k) [: {8 {3 P) N. s

& K4 ?& V$ H% [8 y* k# ?2 s例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
9 C' p# `' n6 E
+ D  Z: K* o' g+ p* o0 D4 I1 p/ R& i  l% ?. A+ h8 ~1 D
( {2 |- Q, \" D3 C! X( @
解  这是一个单目标的规划问题,用线性规划模型表述为:
" `/ b% I; r" S3 l. u* `* c
# i, y; r( ^$ l4 ?+ D9 j( d! t/ m. Q7 l* y
9 y4 A# D. ~) u
但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如* \) B; w# U! Q" @+ C2 ~3 X
8 o$ P8 z0 F5 i7 a: x6 t- M
(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。& d- g& S' h* \6 o; F% T
5 c: d% ?1 F% ]7 N  F, S
(ii)超过计划供应的原材料,需要高价采购,这就使成本增加。
8 P9 s7 k7 ]2 M, y  c9 R' K; x6 d$ K
(iii)应尽可能充分利用设备,但不希望加班。 0 r. J0 T" d; d' h
$ N  ?, R7 J- q/ V8 {; M
(iv)应尽可能达到并超过计划利润指标 56 元。% a- @8 x; e( X. `
9 M) ^3 f# x5 ~; b3 l; W
这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
3 X$ f$ ]2 K# `+ b! N' \/ Q, r
. o* Z! J* I+ k: x4 I$ Y1. 正、负偏差变量 & [/ d: n3 G7 E+ h( G2 V6 \2 {: ]

4 M( O6 S. n# x7 x- O) u1 P) M) ]' Q% V7 q; C5 v
% a* C6 n" Z- o! \' S& {
2. 绝对(刚性)约束和目标约束
: m) y% B2 D. {1 D# l. u. a( f; O: H& y1 |1 ?

# w! g8 X- j- m& Q" Z
' n3 c8 P* y4 V4 Z3. 优先因子(优先等级)与权系数
) g8 N) V: P5 c% D4 T! L' N3 G
  Q2 g+ ~% A( K5 P0 ^& }- ?' J+ O5 l% s9 p+ ~3 R" M
& l! ]9 C- ?- M! X1 C
% k; j) }# [, f1 S1 ]4 }/ d. |
4. 目标规划的目标函数   V8 W, a. j/ T( G, |$ m' ^8 h
" C1 g8 d7 a1 T0 n. y2 H

$ C& r' F/ d" f0 J" M) E0 i8 K$ \) Z# v" n. e; r% F
对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 2 i5 U0 K# H& n3 o+ T
$ n% V9 O4 U/ }  @3 l; |3 \
例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  
7 ^4 @7 y/ X& s3 ]; n: J2 g8 t7 t
4 |1 g) t& t% |: {0 J
$ m$ P' k. [3 U3 L, N8 H; ~5 r
, S% _. B9 ^) [1 J$ |& U! H6 D* g5.目标规划的一般数学模型* K3 T. L2 g  f7 v1 i9 _

! Q( X, w8 _( o) [- Z
- B  \: r% l# h6 Z4 R2 n: z' X
( J# z+ x! ~& ]9 |) P$ L, I' t- k9 T' S7 i4 n- N! l! H
建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
* V- `6 ^2 w& [) ?
( n( o/ G7 l7 ?, I2 |2 r3  求解目标规划的序贯式算法
) _+ k: i7 V& s) H1 K# e序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
  R% F0 m( w- d  n: k- C
% T4 C, z% E1 c1 p# l% T
6 K. `7 S- U" U! w1 X
, x7 y- t8 J" x( I- w
' H) v: k+ y) L' w+ E
& C' S0 V* U7 q- @; ?3 g  K! F# U) c注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。 & k! w+ Q% E0 M" v/ P1 _* y$ P- b6 I
+ b" u5 f5 z8 D, x
例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:! {  T0 H4 P* U  h$ n0 G1 T
4 x! A' Q* z$ C7 X! H
$ F7 f! s1 g& U

! x! I, w1 q  [& K- X" q(1)力求使利润指标不低于 1500 元;2 N. b2 h1 u0 j# t2 i+ Z* }/ v. B* z

! E+ R$ E: @1 F" h2 j# ?1 ~% \# ^(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;, }- _) O3 e. c. \7 h; ?
( q8 P1 l. E3 H2 E0 V8 v
(3)设备 A为贵重设备,严格禁止超时使用;
' W/ @' p: y$ ^4 v. ]5 }4 a. u8 t3 r; ]7 s) d
(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
, s8 i) p+ n, ^& N- E4 F1 W. L' E7 ~" b
建立相应的目标规划模型并求解。
" Z3 f. S" v/ [# e) r3 C
' U0 I7 E0 }% w5 f2 h- Y$ {解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。
: Y+ I$ B# c: }, b  j4 K8 ?; F  D" ~/ C2 O" E8 N6 L- ^, c

5 R) ~9 I  a/ v$ b! Y: g
$ _" a3 T7 x+ G4 S- W2 [序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下:
* s$ Q$ k4 I1 v: ^- M6 T
" d$ G0 h: d0 X5 M% Y  r" t8 R+ Cmodel: , a2 c7 A) o/ O# p/ c/ C6 R' ?
sets: 1 |! _1 R( @# F9 H- Y0 M7 R
variable/1..2/:x;
: l; ^$ [$ W& n. `2 U0 U  u) b; ]S_Con_Num/1..4/:g,dplus,dminus; 8 ?" S4 f! X; v' b' i
S_con(S_Con_Num,Variable):c; $ [) k# t' V- Y7 w! r
endsets $ S; K" X: }8 \
data: 8 h. w( t6 }5 L
g=1500 0 16 15;
3 z- x' s- `* J+ ?& p: H' Cc=200 300 2 -1 4 0 0 5; ) M* o% J9 t5 L( \8 ~5 o5 E# Y
enddata 1 c! z- f( I' q- `
min=dminus(1);
' o, J/ ~8 b2 o1 {  f9 I# c2*x(1)+2*x(2)<12;
( ?$ ^" Z' K: b& Z8 \- q8 l. C@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
5 v1 q  E: q( ^1 }- x+ Lend
" C3 @$ E9 F' o9 W
* h. M- h  ]6 k, e

求得 dminus(1)=0,即目标函数的最优值为 0,第一级偏差为 0。

求第二级目标,LINGO 程序如下:

model: ! C3 z) O: e5 m
sets: ( [8 M# O( ~, Z3 |" d: F
variable/1..2/:x; 9 m8 B* i3 f3 X$ {1 g7 R! P9 D( l9 A
S_Con_Num/1..4/:g,dplus,dminus; + \* y4 B6 F1 a( Z! }
S_con(S_Con_Num,Variable):c;
0 o* T* y- j( F! d; M" b0 m: Aendsets 6 y9 r4 D: i  {
data: ' `  J$ L, ^4 y0 q9 m
g=1500 0 16 15; 9 d; s$ o- b$ {
c=200 300 2 -1 4 0 0 5; , \& t+ d( L; b6 f
enddata / R) S6 A% K; e+ ?
min=dplus(2)+dminus(2);    !二级目标函数;
  O( q$ [0 H) B( S. l2*x(1)+2*x(2)<12; ; ^1 D' \; Z8 Z/ T* b. l/ y
@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); 0 w) [/ ~8 i! x2 ~' T; ^
dminus(1)=0;!一级目标约束;
2 \) l" _2 x6 ]) M) A4 j9 N@for(variablegin(x));
- X' g1 U: K% Z; a$ F' H5 g3 F2 W! Dend
2 f. u( U  N3 d) y" b
1 e& `6 z9 c) \: H0 \  O求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
9 M0 c1 {3 r! q, X0 n) O7 R6 Y* O4 {
model: / [" k, E+ Z) F. I6 Z, ]+ b+ g+ O
sets:
8 U8 ]' k! Y4 g# z& avariable/1..2/:x; 7 L9 s8 ?' P2 n: r: X+ H) R: V
S_Con_Num/1..4/:g,dplus,dminus;
. ^$ f( Y( E6 G+ qS_con(S_Con_Num,Variable):c;
. `7 d6 h1 S" X" mendsets
7 W& V+ s& z, k. u) A) `data:
/ k6 {( W. I; g# E3 o+ w8 [g=1500 0 16 15;
/ |7 S. T7 l4 d5 O; ?- cc=200 300 2 -1 4 0 0 5;
: C. H$ c+ {6 P5 Wenddata
* s5 w0 x& v) n7 L& Y$ L+ j  G6 Y. Xmin=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; 5 M$ D# N" h) V: C. w" y- E2 t
2*x(1)+2*x(2)<12;" l, ?9 p1 i3 y9 r+ N
@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
2 D& g: b6 k4 E( m: J; d0 O  |dminus(1)=0;!一级目标约束;
) T; ~  a' V- P5 u! A' I* c2 Pdplus(2)+dminus(2)=0;!二级目标约束;
" _  O& i( T6 X& N9 E  V" Cend
: j% B1 s/ V$ f* t( m2 C9 Z) X* z4 L" a) }
目标函数的最优值为29,即第三级偏差为29。 + K4 J" e( f0 X/ n
: p; _: T, G2 ~# T9 N2 h
分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。
% q8 E8 k% F: {9 \4 a# }3 S" Y4 \+ G& T7 l/ d+ A
上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
! N, U' T0 D, k) f& ?: I. A. S  [+ l. o
例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。! k+ n/ P* ^- a8 w  S9 ^6 f
, U4 Y8 x' I$ E7 `, j; \) e
model:
5 K3 d) K- U& k$ M4 fsets:
' ^- `; T: ~; y, A( Klevel/1..3/:p,z,goal;
# T8 s$ I  i6 [7 Hvariable/1..2/:x; ( S, ^% }  M, v
h_con_num/1..1/:b; 7 l9 Z" I1 a  E9 e3 x7 i
s_con_num/1..4/:g,dplus,dminus; 2 d- q! g# u8 S
h_con(h_con_num,variable):a; + F& p% \$ A& c' ^! p. j# }3 k8 T
s_con(s_con_num,variable):c; 6 E* R- l5 Y6 j6 j/ V. {
obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
  v$ y+ _' I8 c2 b: o, `$ E/ R. nendsets
& K. Q( C3 `$ \1 h/ Q5 tdata: 0 C) F7 [+ d& \# g% `
ctr=?; 7 N8 E. T. f: O1 S9 ?+ H; Z
goal=? ? 0;
% o7 a& g8 x2 W0 Z1 b0 R# X! l3 Xb=12;
6 b# {( U( i# `4 rg=1500 0 16 15; 3 P! E0 Q. x6 P& Y
a=2 2; * d9 Y1 m5 a6 ?3 u/ l7 h/ l
c=200 300 2 -1 4 0 0 5;
/ F$ z; r# p/ o, \wplus=0 1 3 1; + |- O/ |# z8 r- v: p/ [, b
wminus=1 1 3 0; ) N5 n* t/ `0 a7 u
enddata # e6 A' @& M& w/ Q/ x
min=@sum(level:p*z);
8 ]" F5 R0 t, E8 H5 up(ctr)=1; : a# R# |% W) l
@for(level(i)|i#ne#ctr:p(i)=0);
' L3 n: C0 j$ ~@for(level(i):z(i)=@sum(obj(i,j):wplus(i,j)*dplus(j)+wminus(i,j)* dminus(j))); @for(h_con_num(i)sum(variable(j):a(i,j)*x(j))<b(i)); @for(s_con_num(i)sum(variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); @for(level(i)|i #lt# @size(level)bnd(0,z(i),goal(i))); * n8 y' W- @# O% u6 M
end
' n: Y6 `# _4 C
+ [! Y, H9 w* Y' c+ z
& o( N% p) R2 \9 r) X% k$ ?6 e, W* Y* h: Y  Y9 |  c2 [/ l' G

; T, [7 q5 V: X  k( Q% O4 t- n8 M
! o1 _$ x& B( j0 `! B/ \  X# L+ J! q4  多标规划的 Matlab 解法

多目标规划可以归结为

6 Z1 ?1 Z$ S7 M' ]
/ o- O5 z% P% S8 I9 k/ p

6 J) k. j" [, U, ][x,fval]= fgoalattain('fun',x0,goal,weight)           # s% Y) t8 P' p+ m/ \
[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           ' f4 @3 N' U- l# A. Z6 P8 }
[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
  Z, {% w8 @3 V$ z- K: I8 b) U[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
' v2 ]2 y' Y9 M2 ~- E" f- t
" D) V5 p$ {' y1 i1 a
! w8 I( _* D) d3 K0 a2 s要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。+ o1 g0 e) k4 q. C5 x
例 5  求解多目标线性规划问题
1 d1 \: e: B% n8 {" ^- b
$ k" a! y2 g5 `5 V9 ^
$ y' P, J. l% j* S+ J5 u  n# M- |+ q* i
解  (i)编写 M 函数 Fun.m:
$ t. M6 q, f/ P8 V4 f2 ?" Z5 ~, t. N
function F=Fun(x); ' u5 l7 q: K% }, k, ]

2 U% B, |) N+ p$ D9 {- X5 J; mF(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4); ( W; s6 W; Q; v: h9 y# C  k0 X
- ~4 ]. K/ r( W$ M
F(2)=3*x(2)+2*x(4);   d' \- d! {6 E  H; T
& j+ a2 y% p) h$ B+ F
(ii)编写 M 文件
  `4 a( W# m& R$ U4 H. U
) Y$ E. }* C4 \5 e; ]a=[-1 -1  0  0    9 ~+ s7 H& `8 n; g1 u9 U3 `5 F
   0  0  -1 -1    3 V- V/ j* O4 U6 }
   3  0   2  0   
0 m+ H7 u8 R9 m4 T   0  3   0  2];
$ F6 X5 U4 n  l$ g3 Q$ g/ m9 @+ @b=[-30 -30 120 48]'; 3 i2 Y- r4 Z9 u5 Q& c  b% I
c1=[-100 -90 -80 -70]; / g) k# L. _1 ~! L4 ?: z; m7 i
c2=[0 3 0 2]; . H8 S" O6 t! F: u
[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
9 y+ \% Y6 K* t; M[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值
/ x  a- x. R0 i4 e8 X0 I5 w; pg3=[g1;g2]  %目标goal的值
' ?% [6 Y0 X0 F" k# `[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1))
. ?. y- h2 @- ]0 L%这里权重weight=目标goal的绝对值 0 |3 [# g$ I, ?" o& T( s% m, U, O

! {7 C* O/ z- A; m

就可求得问题的解。

习题
7 V7 x$ h) L: g5 t! B, }+ I8 W1 g
) w# W8 N& Y: I% l1 z# K6 \2 V! u* @+ g
————————————————
  V( Z6 s2 u; a' y版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
. v+ I; j7 z! o( c原文链接:https://blog.csdn.net/qq_29831163/article/details/894889321 ~2 q) M' j# h- K0 J; E9 L) Y' N
. ~1 M2 M2 L0 `0 {# Q

3 ^7 e& @( `( \; z/ t7 i( Q+ w




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5