数学建模社区-数学中国

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

作者: 浅夏110    时间: 2020-6-1 15:20
标题: 目标规划模型:求解思路、序贯式算法
1.线性规划的局限性
. z# {* B0 Y( b( _" @9 g6 Y! O只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。" |6 b  T, I2 O2 `. A
6 {. y" k) \" E/ c8 d' z
2.实际决策中,衡量方案优劣考虑多个目标) }1 X: @" k  J9 U5 V8 Q: g5 c
这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。# h4 `! y5 Q! _2 N; N

; l8 F; q+ ~! t! ]7 R3.目标规划(Goal Programming)# \" l# P0 f/ g( i' [. @
美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
- k7 ~2 h1 L4 C& K1 w2 Y4 y) w5 C2 H% H* M& S9 A+ Q1 W
4.求解思路. U1 R3 W; `! b) `; M$ \
(1)加权系数法
/ w8 O* n. F9 {, v# j0 @" P% g0 A为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。
) N. Y/ N5 K* _/ K) b! G) e; m) [' b0 d/ K4 Q/ E3 l0 C# y# M5 U# }8 ~
(2)优先等级法/ D% b1 ^/ [2 ~' A. j, E2 `
将各目标按其重要程度不同的优先等级,转化为单目标模型。
5 R# z* }0 K8 H' w5 k# d4 }: E8 }+ l# W4 t+ j- O' f  u; N0 i
(3)有效解法" b! ~% o8 M% C; {! P: t+ l
寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。
9 i6 D& K. H  g! Y
6 B* c& c9 N+ f! G, k9 q2  目标规划的数学模型
: x, T- c8 M4 e) F( c& p为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。3 D- [8 D; h% z4 O

# O" g+ }. z/ u' p* `9 Q% Y' [例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
/ I& u- e5 A$ z# n# G1 K6 Z6 E6 c" D5 Z3 w
! ~; A: [3 p* M. X  f) g8 k

/ C+ h* ~% i  T0 a5 c, Z解  这是一个单目标的规划问题,用线性规划模型表述为: $ S3 h# w8 v8 C7 F3 o

/ i  c4 o% _) h: h, c, h- a" ]+ ]
, A" Y6 }4 `$ P, H( V4 x- ]- m; V3 Q* N0 s
但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
7 o) H0 P1 X+ E( [* h& v- ^
  q. k2 i( L2 i/ m8 b2 d' n(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。- M/ k" r8 v/ g) O; R
& Y2 a% b3 }! R! v
(ii)超过计划供应的原材料,需要高价采购,这就使成本增加。' ]* l3 ?9 D2 v* J
* @$ h2 V, b4 Q. ]' O
(iii)应尽可能充分利用设备,但不希望加班。 , ]5 y" N" e. X

4 u5 w$ |0 E& T: K$ M- q(iv)应尽可能达到并超过计划利润指标 56 元。" F; x4 R5 a) A7 }) Q, `- a

  p6 R. W* E! z3 f! p. d9 S2 b这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
: \5 N( [* o; L% b1 |+ |6 w( V. r  k
1. 正、负偏差变量
5 j: ~5 T- h2 [. Q! u
9 I) I0 S- I5 `4 }
" b  f( v  m* f* l% A* b, D( Q/ M" K
2. 绝对(刚性)约束和目标约束 # h" m! Z- g, V2 R

0 V4 Z: X4 r) D: ?
8 G% o2 Q3 d8 }# r- c9 b3 x$ o: ^' _6 J7 \
3. 优先因子(优先等级)与权系数
! V& Y4 w: J8 U4 E* |
4 f9 M2 n9 T& \
" e4 s% }0 _( F! Z7 U! l
0 N( j8 o1 w, V9 z9 o+ v) G- z" u0 g" w2 B. C. s$ O2 f/ {
4. 目标规划的目标函数
0 }$ @7 k) K3 X% p' R& _2 k' A2 c3 E2 N3 ?) a5 l

; t" ^9 {! x. C# _- |- S5 g  P# @; J" |( \4 m$ R% u) k
对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 3 y6 w4 {& p0 [! o, [! I) S0 S

- X/ N8 |' P( N+ s$ ?1 Q例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  " V: [, I3 b! d4 h1 b! y, @
5 z$ v4 V, b3 g. }: X. A
+ d7 W6 C4 R2 M9 |9 M9 r
3 P' d8 o% g: w; p" _1 w
5.目标规划的一般数学模型; i9 P+ q# `' A1 `* B% A' n4 J# `/ @

9 `  \8 H7 \& g: X3 p
* u8 K; f# [3 e8 X# z9 e7 A( w3 [1 [4 d& m4 L, V9 ?7 y( ]: h
3 w1 k+ b. N' w( }* `# I& a2 E
建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
+ W; o6 w0 q9 H5 A+ C" p
1 d5 b) J: G0 J! a3  求解目标规划的序贯式算法9 |- \4 F! u" y, C" x; v
序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
! Y0 }, q+ H; y4 @! ^# s8 h
  ]9 ]8 K# g) o- b/ ]  I4 m" _0 p- {5 N, U8 a

- H" P/ [2 P; W0 \! G' G
$ L+ F! b3 ~0 `0 s5 |& [) i5 i6 O/ r: q! m1 j
注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
" U6 h# @# m( p5 N4 n: F! j/ M' ^& I
例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:9 d" J8 i* Q- Z' a4 n& {% O

. \& ?6 a. b$ j
4 y1 Y6 ^* L/ ~+ i# [1 b& J% \1 H2 _5 b5 b
(1)力求使利润指标不低于 1500 元;, s" x4 b% I6 {6 Q& h" ^: C
! J$ ^# @8 I: _. R1 z# D& m. N' E
(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;
. z7 N9 u' r( e6 }8 H& {9 {% ]3 c5 l7 T' n& j+ p6 e
(3)设备 A为贵重设备,严格禁止超时使用;  d9 E. r, V" }7 s, Z9 _
# [- @; G& k, y* M  Y6 t
(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
4 y! R! w' Y( o8 `& y/ l+ O
$ G$ X* Q1 ?1 j建立相应的目标规划模型并求解。: U9 ^  F8 z% O5 A: J3 ]
- P, H( d. ^' ^" l
解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。 : ^* t4 Z& M9 H
0 B* J2 c3 b+ f2 z- V
& X1 Y4 u; l* L  T/ G4 p2 Q3 c0 Z0 x
1 G# q- t  ?' U. r3 f: o$ q/ r: z% ]. u
序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: ' o+ W- O# Q* k' s5 I4 a( {

: g9 H! w% A0 W5 L2 hmodel:
; Z, j  u# f& r4 a* k4 R5 hsets: * V5 o! t8 i  t* A! Z' j& f
variable/1..2/:x; 0 U5 P9 _/ Y  w6 h& L9 d
S_Con_Num/1..4/:g,dplus,dminus;
) `$ e' F0 B# r) H( _% ES_con(S_Con_Num,Variable):c;   Q8 Q# r' \1 ~6 n7 |! Y. a
endsets 6 }' R+ r7 o# F! q
data: & |! A2 D/ J& y7 s5 [
g=1500 0 16 15; 0 \5 v- g$ i$ b/ r! b0 t* x
c=200 300 2 -1 4 0 0 5;
8 z; T8 d& J1 I* |enddata
- \: Z4 b7 N" e: ?; Z( N4 mmin=dminus(1); / G# D2 @. }" S4 K0 o$ [  o
2*x(1)+2*x(2)<12; ) ~) f- v* Y$ e
@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); * B  k- ^) n& t3 E$ F. l
end
/ p* f( v2 X& U! P& X
" }! i# U5 g4 {

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

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

model: : N0 A7 F3 D  m% p) d8 ^. ]
sets:
. v2 l  i$ @, U  g  N& [variable/1..2/:x; : s" T+ x8 S: {% m0 U+ ]
S_Con_Num/1..4/:g,dplus,dminus; / `: o, g3 x! s* i8 w2 |8 E. r
S_con(S_Con_Num,Variable):c;   ~% f1 t. ?  Q) x; i0 w
endsets ' K# _! k( X9 X7 M
data:
7 ?- W6 M8 e: S2 ug=1500 0 16 15; 6 w& {$ r0 r8 N6 n
c=200 300 2 -1 4 0 0 5; 7 p. w7 w# k. S3 V5 u& v5 v5 P
enddata
. _; I$ {3 _1 J6 i- ^min=dplus(2)+dminus(2);    !二级目标函数; 9 F6 U) d* [& Y; T$ K
2*x(1)+2*x(2)<12; ! e7 h" g0 y) f* {* @; I1 M
@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); : q6 \8 S: n+ d
dminus(1)=0;!一级目标约束;
8 s# J7 N% U4 W@for(variablegin(x)); ( ?$ J; D: w& K, {
end ! j/ F, ^2 {3 s" s- j3 G4 ~

* d  w+ |  O! h: I1 n' W求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下: 1 |1 `6 z: V. s+ a' G% l; P
( T0 d8 b0 D2 m. l9 Y- k; L
model: . a! I# j: v, i% [  K, Y, E
sets:
. \7 T! ?& c( `' v; Yvariable/1..2/:x;
. _% ^% K8 q4 J/ v6 _, E: @/ `+ QS_Con_Num/1..4/:g,dplus,dminus;
2 N. g) Q7 P6 ?. i1 E4 p" FS_con(S_Con_Num,Variable):c; 1 v; j% N9 L$ V0 n0 K
endsets
" J% z0 N3 M* q/ odata:
' P0 a3 m# t" C4 ]) ?6 H! M2 Wg=1500 0 16 15; - J% M( I7 e# C* z  \- O
c=200 300 2 -1 4 0 0 5; / g/ i9 o# `. J' f3 g+ [
enddata 5 U8 _9 K. l& e" y1 }2 _
min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; - E" d& s4 k& E1 a, j8 [
2*x(1)+2*x(2)<12;
0 ]9 j4 p. u( u! I& ~' X @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); & K8 T5 G: Q% a1 r! Z
dminus(1)=0;!一级目标约束;
# @6 ?4 v( t* H& A7 g' tdplus(2)+dminus(2)=0;!二级目标约束;
$ H' ^" x2 Q+ d; rend
2 c/ v+ K5 k- h
! {" N  d1 l! m  S1 R目标函数的最优值为29,即第三级偏差为29。 . c6 U* T$ n) q0 K% J1 M) F

4 l& m* r  Y- R, O% z9 O分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。
) V* ?6 B: O; }* ~4 D3 d, @0 j* \' F6 k$ P3 l. E9 H
上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。/ M0 ^* I8 w- l9 A% }
6 }) j" h5 X5 f" F; o/ ^; V
例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。
. X4 v$ E0 J" V( o
+ G9 t5 }4 w: fmodel: / O% A' {/ P* e9 J# q, P
sets:
1 g3 E9 w* z  F6 b1 M6 {7 `7 T( {level/1..3/:p,z,goal;
+ u6 o6 [9 ?7 q* d7 x1 p" @! ]- Z. Kvariable/1..2/:x;
0 s" ?) o9 m, [6 ^h_con_num/1..1/:b; ! v4 ?2 O  j) j7 M6 \0 M
s_con_num/1..4/:g,dplus,dminus; ; x  @! H7 j4 W$ j" }
h_con(h_con_num,variable):a; & R# _, f# p* m  L/ `
s_con(s_con_num,variable):c;
& p2 u; ]3 j4 E( E1 {obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus; 1 `+ g3 \- ^& ~: X2 T" F
endsets
5 b8 l: ?( m9 g3 Q4 q2 e) adata:
6 V4 D: V. j% z) u, pctr=?; ; C' Y  J; _9 Z. z# I1 a% _
goal=? ? 0; $ g/ Y" k9 t! G* S6 O# k# |
b=12; / W' J, P% R( v" c6 C
g=1500 0 16 15;
/ T% d3 W, I- O: \9 pa=2 2; 7 a$ ~( O; Y& k0 ]5 q
c=200 300 2 -1 4 0 0 5; 1 q3 m* D$ r. e- d; N
wplus=0 1 3 1; " V- P( ^* d% c0 H( z) Y
wminus=1 1 3 0;
# R# n0 X8 T+ {enddata
  S  v! L% X# U. j' Bmin=@sum(level:p*z); 7 |  H: w$ R: t! ]
p(ctr)=1;
6 x; y9 F, V- p- G/ T@for(level(i)|i#ne#ctr:p(i)=0);
7 w+ p( ^3 U% ?. t@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)));
  O7 \% t( m. _( [end 1 l+ y0 v7 `8 o+ D" l

! g- h+ K3 }% M: S, M8 U0 z+ G: x6 `# x9 m& h

/ R* B. @) Z' K4 U- x
, t8 E0 E; u* W9 E  `/ a# t( }! V5 L
( N8 w, U2 y- X8 q5 R9 @5 _) C4  多标规划的 Matlab 解法

多目标规划可以归结为

0 R' n0 V0 ~: c( o0 `
. O- e$ ^* p' ?& s

, p9 z! k4 O. f% l# D[x,fval]= fgoalattain('fun',x0,goal,weight)           % m- E  @6 N$ x* A. B  P% V
[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           
2 Z. ^9 R/ n. W5 i0 c" R6 t" z/ _[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           , p6 \) x5 K( p# k% o" g
[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
7 w+ ^6 F. I1 n
: ?* C& y- W2 V/ j
1 s% s8 b. m9 L9 N' C要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
! F7 ^( P) ]6 l  U- o- C 例 5  求解多目标线性规划问题
. Q  e3 }6 ^3 Z! m! L0 U! S( q* ]3 G1 u. [! b! W
- j$ {! k; [- x( ^6 |6 J

, L2 N$ L* X8 `解  (i)编写 M 函数 Fun.m:
5 Q) d4 f& o$ V8 }4 U3 q0 u: s
5 ?* ~  p: ?, T, jfunction F=Fun(x);
1 c5 a/ }2 n6 p, b1 o  |
; \$ j' F$ E7 OF(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
9 m0 E5 U* _5 _5 o6 S5 n+ H2 P( i* K2 c4 F% {3 S, L
F(2)=3*x(2)+2*x(4); 6 `9 ^* Z8 c" A) l- G, k
5 w6 p" N; I% q8 z
(ii)编写 M 文件 1 E$ P! q% D( \

6 A- S% l5 c  a) u8 G! }  Z+ R7 R* Za=[-1 -1  0  0    % a& y7 }$ A; H- F" G
   0  0  -1 -1   
) E1 A2 l2 X) ~+ P' T2 H   3  0   2  0   
9 A+ ~! k" s1 H0 }   0  3   0  2]; * h% F; }  @( v
b=[-30 -30 120 48]'; ) f0 r9 Y  g% d$ O$ ?5 l1 [
c1=[-100 -90 -80 -70];
9 `' J# M2 C/ _c2=[0 3 0 2];
. K2 f" I; w% B- k- |[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值 ! X9 \2 s; P3 n
[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 ' q( g% U6 P; N# j
g3=[g1;g2]  %目标goal的值
4 [8 w8 O4 ]! f[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) , q" P) W4 F; M
%这里权重weight=目标goal的绝对值
% @( V( C+ |3 f' C! C  ?7 U3 f; p$ O4 z" O# p7 s9 s: r

就可求得问题的解。

习题3 w+ O% G. ^: s  d

4 o* x/ v9 c: @+ {$ n- F* O, b, h! E, c% w3 L0 k
————————————————
% h3 b+ E2 p1 c版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
& `9 [, ?# g7 }' r/ ~6 |原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932- [0 D, @3 R1 _7 r( b1 a5 U
( O0 N/ V/ W) |+ \
% r' }. w. a0 [: D( t8 n8 z





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