数学建模社区-数学中国

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

作者: 浅夏110    时间: 2020-6-1 15:20
标题: 目标规划模型:求解思路、序贯式算法
1.线性规划的局限性
7 {) p- z; Y2 N2 d  P$ j只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。! `3 e) y$ _# b  N8 x9 C1 O

/ T1 g0 [3 u9 ? 2.实际决策中,衡量方案优劣考虑多个目标; E1 S  _' a6 S% ~! ~, F' A! i( ^
这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
% ~' w) V4 l( Q2 z
" N1 R' e- L$ }& u3.目标规划(Goal Programming)
$ Z9 k  N$ E0 Q美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。! B) v& [( A+ {( \7 g0 c9 w$ h
& K" I, e% m- r/ p$ w
4.求解思路
  ^, Z' y: q/ G% ~1 `- l; n: o5 L(1)加权系数法  S  r! ^# s0 @( P+ Z7 ]: I" g
为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。
- a$ o8 r8 h) r, O7 H. ]* `
1 [4 y* K) ^7 w) y- w8 C2 Y8 _6 j(2)优先等级法
) Q- A4 y/ z) K* X/ }: P将各目标按其重要程度不同的优先等级,转化为单目标模型。; P$ {, B0 c. r$ \) K% _5 n2 s7 \
1 _9 ?1 L& Z  ~, V" r. q
(3)有效解法
8 H( Z4 O1 ~0 V( p3 I寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。 / p- ]! S' S3 x/ \. _0 |
& N4 H! @8 J( T& A# f, `$ B
2  目标规划的数学模型
) o( j* I# o- S  @; c! m为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。' e0 B/ ?7 \9 I1 G# ~
7 R7 w" o# |- D
例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。; X7 \& ?8 k$ C& B0 [1 r

' {9 E* s$ D% I& P& ^' ?& S4 _1 ?+ s- ?9 Z! L( X1 |
! P6 Z  G8 f+ y4 s: d0 e
解  这是一个单目标的规划问题,用线性规划模型表述为:
- M3 b( `7 x9 n3 d: y# l1 N: V1 J/ l. j
0 a: A# \. A$ |8 ~
: @0 J8 i5 A6 b. S
但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
) M/ |) y3 W# O0 z+ E, x9 K& j* _9 n/ _/ X! d3 |; l
(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
/ h6 }& \, }: Q$ v' b# Y' s( n+ l' ?3 t  p, f9 F( r, U) ]. l
(ii)超过计划供应的原材料,需要高价采购,这就使成本增加。
# z- J4 ~9 h* @' m+ f* u# `  m- l4 O' d! p" M  y  T
(iii)应尽可能充分利用设备,但不希望加班。   q4 r2 D/ A0 H+ ~! g
5 |& e9 K6 P9 P" Z2 R' h  m9 a+ T
(iv)应尽可能达到并超过计划利润指标 56 元。1 L3 L* I/ _' g& J% p) `
! @1 |# \( |# s  u9 I2 U0 H2 V
这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。 1 ^; m: X  [1 T: y
& N3 G6 f1 m6 m* k" M
1. 正、负偏差变量
- y' O/ `% U' y  a5 J3 N
+ J5 i, `8 }$ P1 }  i% a0 B  V  M8 t! e7 C* I" c" e8 O1 [. G" W

5 y. |# e4 t. }6 Y( p2. 绝对(刚性)约束和目标约束
/ r! y! d" K" K) X0 y4 o: X0 D  R6 F% j1 ]) `( p0 A& o

8 Z7 o) J: c( N! Z' ^. W% V
4 x- e( q* L; S3. 优先因子(优先等级)与权系数
* q6 c  Q+ n# [: y% L6 Y$ n' x# h8 T7 i' W/ n( X; L3 G7 o

' G; Q, r( [1 z. w; b9 K( c. F* P. N4 b4 N! V6 ~; D/ `

7 j! c5 P6 @7 g2 q4. 目标规划的目标函数
9 Q) q$ h% {5 T  {$ q- b: T: W, a
( J+ b9 d, |" K( M  T" I; x' ?+ D1 j0 ^5 w5 g- x) ^/ _

0 B) g0 R1 T6 F0 e/ a1 d; i对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。
) [- s' ~7 X  Z. ~" d* l1 Q& y4 q- c. s) X9 f
例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  + H5 U$ Y. S* D

# @5 h/ g  O: l# v& Y
: T  Q- B$ b( H- P- w, C* ~' D1 s7 ]/ G5 A$ J' e
5.目标规划的一般数学模型
! r/ j# }2 ^% [5 l
; n/ r' a- U, p0 q7 P
  h9 P, ], B9 |$ s4 t1 C2 L0 U( z+ @( l) g  ~% }
- K( O7 C, \( j3 U" H
建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。 " G$ l! T5 S) P2 Z% S

, j  V, Z! c" ~4 @, k3  求解目标规划的序贯式算法; u- w& S) T: v# T5 G
序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
  O/ W* Y2 c" `" w; i
7 O& Q* L# z1 `. g+ ]) t' v! Z- E" {7 J3 p" u

5 i& l( b2 e3 }  `; d5 p% }+ x3 ]: ?5 K. X6 Z8 w: Q4 |
' D" o/ b3 n) E
注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
9 K4 y+ \, |  c: \; w) c
' a1 h$ N7 n4 w! ~* x3 J2 L例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:1 p3 [6 m1 l; _+ D( Y+ X9 V9 t

; n( O  t& P/ h9 C
) g6 X6 g, j/ Q3 f8 W# z9 H2 E" G. _5 ~/ I* X
(1)力求使利润指标不低于 1500 元;  f* S2 _* |! [! j! Q1 h% U

. ?0 g+ h8 n0 w( g(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;
) {; q8 Q, l# z; ^: `1 [# i0 g( L$ I
(3)设备 A为贵重设备,严格禁止超时使用;9 Z# k' E# w$ `& x/ ^. w; q

6 F2 ]* ~* ]4 ]+ }4 C(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
, F, p, W- n! J( T3 o/ E- m8 v9 b
( X+ a' ]1 `+ p& ]5 _  t' l建立相应的目标规划模型并求解。
" u6 E* j( C4 T$ U6 g
) k  _- L& H1 Z7 ~! m- x# K解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。
3 s* r4 P: d6 V2 X" x0 e
9 F9 x5 R0 d' P+ g, L7 }+ o5 ?( O9 \# F
/ V* M, y/ ?' z9 u: a6 o$ x8 l. f
序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: ; |/ l4 x) g/ w9 }" J- G

" u% D6 c5 M' H  M2 P" s$ |model: - U# o- [: l1 ?8 d# L! s
sets: 3 L8 l7 V. X5 I0 S# e$ I
variable/1..2/:x;
+ T/ I( y- \, h0 [, y  X% `S_Con_Num/1..4/:g,dplus,dminus;
' ~+ E6 J4 E; i6 @- F, C  h8 BS_con(S_Con_Num,Variable):c;
/ L/ Q9 R/ _9 ~& [) `, D" _% d! mendsets
! M% E& v4 |( f8 F0 ^; @8 L) jdata: . ?( N  I% P* g0 U
g=1500 0 16 15;
' k- W( |* \2 U/ r1 ^c=200 300 2 -1 4 0 0 5; ! I4 U' d' x" s. D8 ^
enddata
% }+ L4 t8 @9 o% A6 bmin=dminus(1);
- w1 }0 {, T) y* ?3 C  I4 g2*x(1)+2*x(2)<12;
- ~( a4 h' p! G* b9 U7 Y6 e& X@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
9 H- y3 o6 c) X7 r: K  }1 o; }end
" v, A0 }' W3 t7 Y4 E) `8 K8 Q% z0 _# \0 ]7 @

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

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

model: " J- ]7 z6 R+ P0 V
sets:
( D- q' I- M- a) b* g* evariable/1..2/:x;
6 |; ^4 I' Z7 V& E; W5 O# \) fS_Con_Num/1..4/:g,dplus,dminus;
5 g1 k" v' W) p4 ^- q; |: sS_con(S_Con_Num,Variable):c; ' g/ D- u8 H) @9 j& A" G
endsets , B9 e( O7 }' X; i" ]
data:
9 |  K$ K1 s2 {0 L; M% m* ug=1500 0 16 15;
9 u( w" V. A" c. V7 e, Hc=200 300 2 -1 4 0 0 5; # `: u: I0 P0 }2 X0 U
enddata
- _# @- ]% B% j* T1 D, l" dmin=dplus(2)+dminus(2);    !二级目标函数; ( ~) g5 x- N3 I& u3 X3 d- f
2*x(1)+2*x(2)<12;
) H1 h# }- u" N7 L3 y@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
) D8 J/ e0 |5 udminus(1)=0;!一级目标约束; , g& F: t2 {1 z3 m" b
@for(variablegin(x));
0 K6 u% @7 H6 b' iend
) j# U; Y/ ^- w+ |4 m. \- d. ^( n8 M  {. Q7 p; p, \
求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下: 0 |2 H: I8 I( d; u4 r
% b- a* l2 E# ^2 I
model:
0 A0 K" |& ?  _! i* Q; q1 W( Usets: # n; n( u" M7 H! i: R
variable/1..2/:x;
* y1 n8 |1 L+ b- xS_Con_Num/1..4/:g,dplus,dminus; ' b3 |) |3 o  b1 c
S_con(S_Con_Num,Variable):c;
$ u# I8 ?) u0 t3 nendsets * V. n6 [" |$ K" [
data: # I0 g3 _: g1 I& j4 C3 D- S! ]% l3 x
g=1500 0 16 15; ' N0 U- ]6 h2 m' M1 Q, G! P
c=200 300 2 -1 4 0 0 5; * K! D& V7 g# Y9 R' ~# P: S6 E
enddata 6 v: _$ A! G" W+ p( B4 r* D
min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数;
5 v% v# T7 h/ e& K1 v4 ^2 j% b% r2*x(1)+2*x(2)<12;
; [6 ^( W* |, \! D. b6 y @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
' c# @. F. j+ Pdminus(1)=0;!一级目标约束;
9 y  }6 z! u) Z: N8 W1 s. ddplus(2)+dminus(2)=0;!二级目标约束; * d. A2 K( o6 N5 t0 G3 Y: o! r
end: n4 @7 N0 n5 {; K$ T" D2 Z

9 D: ]7 }+ u3 ?5 O3 M* W; R1 S目标函数的最优值为29,即第三级偏差为29。 - P, E# k& S  ], x. o- x2 {
' @" U( @8 g/ z( [
分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。
: ^4 k7 Z# I, A) ^% n
: g3 q$ Y: ]+ O  Y, W; B上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。; {7 A# g  d; r+ M1 E% v
6 I+ g: N- l; F4 }' f5 L' z4 F4 h
例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。% J  }3 N4 U% A
! z9 ]0 ~% r2 z7 T/ s
model: " s" U% Y! M: n. Z0 ]
sets:
9 ?( E7 [+ O' Slevel/1..3/:p,z,goal;
9 `& e2 U% f( q- a0 O9 B2 I- Kvariable/1..2/:x; / K2 Q4 J5 {* l
h_con_num/1..1/:b; 8 ~" _; s5 D- C& J
s_con_num/1..4/:g,dplus,dminus;
+ Y1 @7 r1 c. `/ P; e2 fh_con(h_con_num,variable):a; 8 s" j* z* Z( C$ v4 _+ T' J
s_con(s_con_num,variable):c; 9 M& Q5 O+ a5 H/ @/ j
obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
% o2 A0 B8 b8 i, F4 j9 @# _; w; U2 }endsets
! D4 D# d, y7 y+ \9 q/ ?  P# udata: 9 D" S+ p0 e. U; ~+ f
ctr=?;
7 S/ C9 L1 B: ^goal=? ? 0; 7 M! Q$ Z! B3 m! y) v& B+ E+ w; {5 Z; Q8 H
b=12;
3 v' ]; p% f& _g=1500 0 16 15; ! {/ \4 E$ w1 R- Z" K! H- K- ~
a=2 2;
( V3 T+ o  `% L* ?9 U9 e5 Q, Z8 `9 Ec=200 300 2 -1 4 0 0 5; % H  l2 n' S* ]0 G! a1 v1 D
wplus=0 1 3 1;
; G/ d! Z2 ?. m: iwminus=1 1 3 0; 1 H5 J3 y. I$ H! P7 f
enddata
) G! F$ g# l! w+ m0 h) ]' Pmin=@sum(level:p*z); 6 ^7 d, t9 M) z
p(ctr)=1;
( ]/ _# q+ |/ H2 z" ~3 T  ]# U@for(level(i)|i#ne#ctr:p(i)=0); + Q" f5 F6 T8 m$ b
@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))); . ?+ N! G: l2 `7 l  ?& N
end 3 j: @9 F8 d& n2 W/ M; y) x$ R9 b
2 S- c! a/ |* {/ ~

) i/ X0 w4 K7 F. R/ a, Z) \& p0 c  \# m* S, ?, D) ]
( K1 i0 Z2 I. [$ y! A- N6 a- e
4 E- g& G3 _$ t, ]$ K" {
4  多标规划的 Matlab 解法

多目标规划可以归结为


" }: [0 z; a, J8 h2 P
  _4 u6 ~" {& w( E
' ]* C5 r# a: g3 Q[x,fval]= fgoalattain('fun',x0,goal,weight)           
0 s) j7 g( \# n/ U[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           - ]1 t3 {8 j2 K, w
[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
% u3 d  }' K% n& |' B5 z3 |[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) ! t7 s- M& f- R2 {/ l% n- W

$ G0 ^( S  |3 y( ]- e& M4 w1 L: n- E
要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。5 q& p3 ^# V( G' x9 _. x% M2 ~
例 5  求解多目标线性规划问题
" M) n7 n- M' x0 S$ ^
5 O* H! E$ k8 x
' K- u, R  |' S. ?4 T4 m
2 O6 y# _$ D# @解  (i)编写 M 函数 Fun.m: 4 T9 y1 E: v- E- F

8 _9 G5 \. F9 _" tfunction F=Fun(x); ! T4 b; z, ~# u) R" @/ [
* v! F2 |$ t4 Z2 o- u4 ^
F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4); 9 F& O2 e7 q& g/ ~

& P- O# s- v. k$ tF(2)=3*x(2)+2*x(4); , S& `! p9 a0 J+ M

% w$ T$ b8 x! v) X, N  u/ _6 @# f% N(ii)编写 M 文件
( B' d6 g% ?  F; p9 s' [+ \- F& x* D# p. R' ^* d
a=[-1 -1  0  0   
* Q/ m) Q& {: Z2 m! N   0  0  -1 -1    ! ^, n& x) f* d9 j8 f2 s  x
   3  0   2  0    . G9 B4 C; u- {- V
   0  3   0  2]; ! H, `) v* L2 v( t- K1 B
b=[-30 -30 120 48]'; * m) z" Q0 j- ^' j% k4 J
c1=[-100 -90 -80 -70]; ! p' E8 ?. P# |  }9 t  w
c2=[0 3 0 2];
4 s# S) ~( [; h$ Y" [+ I7 ~[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
- Q( B, r, w3 p. E- D0 S[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值
% t3 L0 n) P  E0 n8 ^" c4 K) eg3=[g1;g2]  %目标goal的值 " |3 o! y% n/ [
[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1))
! p3 f& N/ b; q6 ]. b( m$ W%这里权重weight=目标goal的绝对值 + b; [: @; r6 z' }" E
- ]3 [& ^( ^  Q

就可求得问题的解。

习题& h, X' g8 L; o1 Q& u

* d( }: f7 X) |5 F8 F( j
9 U# m+ C" p+ v6 F4 B8 D  O, k————————————————
- [' L5 r6 }$ C$ h: a& A版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。5 I: Z3 w& Y8 }& L8 L
原文链接:https://blog.csdn.net/qq_29831163/article/details/894889328 N+ h# Y! i/ E& E8 t
0 X* q! k! G, ]7 b" ?1 y

4 C+ ]- E2 j6 h) t. `$ I




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