数学建模社区-数学中国

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

作者: 浅夏110    时间: 2020-6-1 15:20
标题: 目标规划模型:求解思路、序贯式算法
1.线性规划的局限性
) {! ]% t5 l" ^! O$ ]# |/ Y  y只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
% A- k: |# I6 i$ ~/ |/ d# L7 R5 I3 p  G. X! e9 C
2.实际决策中,衡量方案优劣考虑多个目标
+ b2 v: d2 N0 I. o4 f这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
9 @0 d- b& h( R; x9 u
/ t; }$ z! ]4 C3 R( k# r3.目标规划(Goal Programming)
" }  `$ p  t+ |9 V, S. V美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
& p/ p3 ?1 H; |9 v6 n8 i0 C: K. G  u  D" i" K7 c
4.求解思路  n/ k. i' Y% O3 N: G- a! D: N, j
(1)加权系数法; J6 C1 o7 `2 y
为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。
/ p# f$ Q% L- x  o3 z3 a/ M8 v" L; Z  f6 W8 p* {) r; k; Q9 j' M4 {
(2)优先等级法
3 L+ {& Q3 h" P: X2 E将各目标按其重要程度不同的优先等级,转化为单目标模型。4 X/ R3 W/ `6 j& H1 z" |- a
0 K4 i$ ]% L8 E
(3)有效解法
; a5 }1 J. j$ x9 [5 P寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。 / R1 i" T/ G! T& J5 @+ t1 O6 |, I8 D
9 H0 [6 r3 p  g$ u& X
2  目标规划的数学模型( x: a) L/ o( l- g- m
为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。
  @; t" n. q! Y/ j9 L4 K; _; H0 d+ L
4 N( f  ?' g$ ?4 x" c$ M. u% d例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
1 G0 t2 Q4 j# m+ k
* K1 K4 t8 E; e8 y5 Z: M  h# G8 H( N* }) g# L3 @

0 G7 P" U/ X/ c0 D% {. W解  这是一个单目标的规划问题,用线性规划模型表述为:
0 m0 L5 J5 t/ t  V
! {! I, ^  H& t
$ t/ W+ T! i/ t
/ M/ w9 d3 y3 m8 v; s* c但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如9 i+ u9 c8 [" i4 I/ S5 [& W

6 E% y, A: j9 y4 Q( |) H(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。; \2 L% s2 P1 a4 x2 m* v# M
) S  Y; i" o3 q: o/ d
(ii)超过计划供应的原材料,需要高价采购,这就使成本增加。( K! g% C1 a. h! j( c9 c
  S) B8 w7 Z7 _  W
(iii)应尽可能充分利用设备,但不希望加班。
0 e8 T' Z6 b' F6 l9 C0 }; B3 T  }3 ~! o
(iv)应尽可能达到并超过计划利润指标 56 元。/ D! _. T- N* h; h4 U/ j
# X+ f3 u. s, J$ i8 K, w: b( ?7 b
这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
3 D% f# J' S4 j8 ~& n
! q9 b- Y5 g$ f9 _$ x8 t6 u1. 正、负偏差变量
# b* X/ R: M( v  f& R! _0 ?  I8 v! l- i5 }. T- H

0 x' S$ p$ }( J% s5 M0 v6 r* u7 Z" H5 G, f( I: D
2. 绝对(刚性)约束和目标约束 ' e. n/ j8 W/ D  V" t6 b" \

8 F2 `" \4 w. K+ m6 P
; u9 k; e" r0 w7 E* _! I0 Q+ Y/ C1 G' _- u
3. 优先因子(优先等级)与权系数 0 _4 Y( f3 w/ _0 y( }

' e4 |% C7 C5 q. s
9 Z; t7 V* Y7 ], J' u  b) m6 p5 V
, E3 e0 e# m# h8 B. g: Q+ s/ @7 n
4. 目标规划的目标函数 8 x6 ~# K% a( n6 y* A
& K5 E: v; T0 J2 F8 J* q% w
$ I' v6 [  R( O: w7 }  o9 n
$ A2 A( D; g- i* U% Q; q1 O
对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 ) i  V: W7 o: S9 a( O& F
; |2 Q- z$ B- G6 D
例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  
5 a% G; e* `  z( v& {
2 w) w9 s! _9 D) y& J
$ z$ b& Q  W" \$ p  L$ y" l/ j- U: v2 y; U, K# ^$ l/ O+ z0 E: C
5.目标规划的一般数学模型
, L& w6 ]# p, l) g2 C) @$ _4 ]
; f4 ^$ f- O3 X/ M$ `+ o) t& F" K; [" E- r+ Y# T+ g

$ P& U8 }6 ?, d* I3 w$ X# ^# `
0 n9 s. K, D4 b- i建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。 1 R" ~4 w( N- x# f* ^/ f
  `+ q$ ^2 g1 a
3  求解目标规划的序贯式算法
. \8 s+ j+ U9 w7 h序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。 + c+ o$ S7 W2 y  _# V5 I+ b

7 z8 q- [7 Z. j7 G" ]; x+ t& Y3 h/ w, }) n$ V- \  a# E( E9 w

9 _$ R, ?% S: C! E. K0 x, v3 {, G2 ]" ]% }7 R
* y3 w1 E# ]" ?1 l: d: R
注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
, L" a7 F) p+ \  Z( m7 r
& i1 S# E4 ]4 C1 _8 C例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:- s5 P* p( c8 V: ~3 u

: [. f4 X6 _! M( ?. x) r3 @3 J* y, R9 X

9 t( R; f$ q" I, @6 m(1)力求使利润指标不低于 1500 元;
2 |& b  w9 G; B
6 P4 S$ k1 L7 ~(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;
0 q( a8 r+ n: N+ K9 V
- f& z0 r) @3 g' {(3)设备 A为贵重设备,严格禁止超时使用;" T" \* g" q# P+ F" N$ T8 c8 _

" T! _+ _6 P$ f! b& E# o9 H(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
. T" y, \2 B) y# m; E. L8 i  p0 X- d- Z* n6 |8 z
建立相应的目标规划模型并求解。
6 L% x, F" w1 p$ Y- o! Y( @  n' e5 j- m" w) g
解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。 * L5 q4 u8 O4 J
6 A+ K+ z, }$ _; l( Y( a

( B$ ~: h" e4 S' I3 l! L# y
" q: t4 L; q& B* A: f  `7 k序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: + E+ L$ Q+ \6 f) z$ A. s; c
9 \8 Z$ R. f: j9 j
model:
: o. @9 H2 d8 k2 Q, q6 Qsets: % `! n) e/ p$ o
variable/1..2/:x;
! U: r/ m, b8 s0 FS_Con_Num/1..4/:g,dplus,dminus;
' U5 N' B( n4 e& WS_con(S_Con_Num,Variable):c;
7 B/ I0 [/ E8 Eendsets ! o" b. [8 _; _8 V
data: # p) m- v% R: C7 J. G* u5 w: H1 g
g=1500 0 16 15;
7 {4 K3 d1 P/ F5 n- D& j2 l' lc=200 300 2 -1 4 0 0 5; . a1 c# ]; ]: W) e- D' L
enddata
! M* g5 }, ^7 m- nmin=dminus(1);
1 g( [4 }* x; o/ ^4 O! a  w7 i2*x(1)+2*x(2)<12;
: f  O+ X% t! ?" D% z@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); . {3 Y5 W6 M& h- `4 }8 c
end
* c* v  N8 {& N' L, h8 W9 v& ]  {- Q1 v8 T

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

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

model:
! w. E: S6 }  |. Usets:
5 m* B* g/ D2 S7 S( ^variable/1..2/:x; 0 J/ |* a& v% l. O
S_Con_Num/1..4/:g,dplus,dminus; ( w$ W6 w3 Y/ t( I* t+ Y$ w
S_con(S_Con_Num,Variable):c; , ?3 q/ \5 Q( L8 T) \( y9 J
endsets / [+ S) ?# R& E4 ^! ?* j7 w" {
data:
# R6 E  w8 d; U8 m9 h- Gg=1500 0 16 15; 6 T, I1 v3 \, Q
c=200 300 2 -1 4 0 0 5;
2 G& r& Z1 p8 ?' @- F0 Penddata
/ q% k. l- a( A: R$ L" B1 {min=dplus(2)+dminus(2);    !二级目标函数; ( P+ u' ^1 o8 i" ]0 Q  X
2*x(1)+2*x(2)<12; ' }1 u4 S6 a5 d
@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); 9 ]. v" w9 a( w7 I- @
dminus(1)=0;!一级目标约束;
5 o% g: @! T$ t4 O@for(variablegin(x));
7 ^; c6 L' [: i4 X' Nend . a  G6 o/ B$ n, Q
/ E: R/ ~4 t8 [' s2 _
求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
( T  V" i, c3 K& {$ w
& u) L, r3 J4 |2 j. n8 Imodel: , ~7 S7 a, \1 Q/ k( C* K
sets: # q6 _9 k2 ?9 c: v) \$ d
variable/1..2/:x; 7 Q; A# {! V+ K% q2 I* v8 O
S_Con_Num/1..4/:g,dplus,dminus;
* z+ H. v- }" x3 QS_con(S_Con_Num,Variable):c;
( ]8 n: t6 i7 Bendsets
: _7 |5 P) w+ P0 I% r2 {data: ! ^- k7 A( F0 e$ k# i
g=1500 0 16 15; 9 w7 E- ~, M* \0 y. g# F: [, c; H% J- a8 m
c=200 300 2 -1 4 0 0 5; 3 p: m( {: Z. R+ z% B" j1 [- {
enddata
& \, ~! ^4 @: i6 R0 v: fmin=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; . T+ U3 n. F) J+ {4 F5 L
2*x(1)+2*x(2)<12;1 @% w( N" _. O" D3 X. b
@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); " t5 S* |1 B5 T
dminus(1)=0;!一级目标约束; , J$ \6 s2 ?6 v6 s
dplus(2)+dminus(2)=0;!二级目标约束;
5 G5 V2 |  g3 V+ E5 O4 i" tend
. u, m" ]( F: i" F7 w
! G6 P/ \: h: J1 ~0 Q- O) D5 R目标函数的最优值为29,即第三级偏差为29。
1 {( a8 x2 l1 B" a3 S6 s& m1 v
5 x- w' P+ i% G" L3 R分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。3 Z3 s2 G& F! R' F
) l6 z$ d" w7 T% x. F: e. s
上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
& f8 _* m# B9 z& ~
7 o9 ^; V, i- l' \例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。1 L% [0 z6 e4 H) F0 j2 o1 x
8 J  j3 |. a3 F# Z1 k
model: 6 j6 _, M+ }& ~) e; n& c
sets: 8 z+ r' @- C* p. ^" H0 |* p
level/1..3/:p,z,goal; & k; o, ~% O. l  k# g6 I8 w; ^
variable/1..2/:x; 0 t7 ?  t# U8 Q% Y. T6 a* o+ o
h_con_num/1..1/:b; 8 R& I6 T" c- M/ P, R! U
s_con_num/1..4/:g,dplus,dminus;
6 e7 V; ?* S6 }2 _+ f' q( Nh_con(h_con_num,variable):a; & L7 x( _& b- m9 c- u% j
s_con(s_con_num,variable):c; ( o) L9 U" ?1 L7 p
obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
" H5 @9 ^( C# bendsets . i1 Q0 K7 B# ~- l. M3 \
data: " H8 r0 P7 e9 E$ O8 l& N
ctr=?; 3 s4 L- R! I, b6 M  q* v
goal=? ? 0; 1 N; b1 u5 \1 @7 l; M
b=12;
, W+ B* K, q% i. Wg=1500 0 16 15; : K& V: W$ u1 `0 n' y% `; i  d
a=2 2; ) I! @. u0 {% g7 H
c=200 300 2 -1 4 0 0 5;
4 g9 e$ [" A  h9 |# g; @$ x! z1 Z8 Q2 uwplus=0 1 3 1;
# B6 u+ L. {# U! q' qwminus=1 1 3 0;
" W3 }, k" u% A7 \) Z/ _9 Uenddata
. H7 `/ ~% D: G4 amin=@sum(level:p*z);
2 _/ }# L5 U! _; c# g4 Lp(ctr)=1; : [1 ?* x# h- K7 ?  o  E; j
@for(level(i)|i#ne#ctr:p(i)=0);
. i& ~) S3 g/ R! w# k% Y% M@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)));
0 y, \0 ?0 R0 ]& _( ^2 a5 M0 Vend
( j# \# [1 N9 `5 ?( g6 q( k% O, r3 ?6 m

' N/ O4 U3 @) }* O& F1 f+ Y1 r& f8 L8 b# a

( `; p0 I$ x4 }' _$ V! ^. g) ]6 D
) V: J; i/ F3 G* t4  多标规划的 Matlab 解法

多目标规划可以归结为

* s/ b+ b9 l- f8 |; \7 Y9 z4 p. P
" \1 u1 r5 p) f1 N2 \) s
4 P3 D/ I6 h' w
[x,fval]= fgoalattain('fun',x0,goal,weight)           
9 D0 `$ x0 N6 }$ N% r: K[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           1 Z! y: U) h9 g* t( Z0 O
[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           5 M% b7 P" i( ?/ t# Z5 I0 D
[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) 6 }6 ~3 r. o: J5 w7 p, z4 W
4 ]: F- T7 I/ n

1 X9 g- ^! @+ X( ]4 `要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。2 w6 L) k- p5 a, L! H
例 5  求解多目标线性规划问题 $ ~1 z4 v& c; O* P

% B4 B4 e/ H. U- {- C3 ^3 }* R  n; W, J. E. v; {2 j

) k7 `  N; ?' N2 U解  (i)编写 M 函数 Fun.m:
! O8 \7 c& V+ r7 }% ~8 Y0 G* n% K( y, _  Q
function F=Fun(x); 8 O" o" I! H" E2 O% q, `

8 |$ d! |9 T; R( IF(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4); 8 c& T1 W( @+ i8 x5 K' B
/ S. Z5 W2 B* E; o6 P! |7 M
F(2)=3*x(2)+2*x(4);
( z! W% c% V  b0 @; i! j! y. p7 P' x# l2 C* d/ n$ \
(ii)编写 M 文件 5 w$ ~+ |4 y7 x! J- H

' A4 P( M& c1 G" K* J$ O6 Y6 ta=[-1 -1  0  0    - p# n% H$ d! F" j" W. p5 {3 j
   0  0  -1 -1    " T9 h4 e1 j. [0 {
   3  0   2  0    1 n9 h) R- a8 b+ k4 Z
   0  3   0  2]; 9 o4 _" q) y9 p8 y, T6 x2 _
b=[-30 -30 120 48]';
6 i# y" T! [  S; P# Zc1=[-100 -90 -80 -70]; * h! d8 N, p. n0 t; @
c2=[0 3 0 2];
: N/ z( i; e+ I9 Q. A[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
1 D& q  V; v$ I& {  A[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值
6 d5 N3 A  t) P# L: s1 C! hg3=[g1;g2]  %目标goal的值
. Y8 V4 [3 }) S) Q[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1))
2 S. d( M6 k4 Y; W" I%这里权重weight=目标goal的绝对值
7 j; [; U0 F% e
4 p& i% c0 [& }* x# p6 |

就可求得问题的解。

习题# u9 o- e( B5 Z: p, a( |

: ~8 S: B% X* H' l, ~  i8 O" R5 C) A3 J% s! }& U3 ]
————————————————2 z  i# ~! k' z- L
版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。+ G) r. H+ r2 f$ p3 M5 M
原文链接:https://blog.csdn.net/qq_29831163/article/details/894889323 Q- D- }0 s4 Y& }) b
0 A( a' G7 B3 E1 e' n5 k1 q' u/ z
6 r8 \/ `# P0 g2 F; b$ d7 N$ o9 J! `





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