数学建模社区-数学中国

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

作者: 浅夏110    时间: 2020-6-1 15:20
标题: 目标规划模型:求解思路、序贯式算法
1.线性规划的局限性2 m/ i; f+ b5 t- k
只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。: T7 `4 ~* ?& h% P; T8 |! _& z0 u( E

1 |& P% S+ L4 z( |. b! ^. C* o 2.实际决策中,衡量方案优劣考虑多个目标
. n. X7 \1 h/ _: ?6 r1 A' ^这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
, a0 F4 g+ e4 n6 ]
9 o$ T9 Z0 [$ i8 \3.目标规划(Goal Programming)/ X4 l9 u" j$ O. K# c, W
美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
# }6 ]4 L; E' S' L  l2 y( E( E! T8 ^8 o( l0 \+ ~
4.求解思路
4 R4 k$ ^% u& S$ R+ E% }(1)加权系数法: t: j  Q0 I4 N, E
为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。+ n" e7 _8 V% U$ c( E

7 B3 a" f: }* {& K. x& J" s  q(2)优先等级法
4 A# u1 V# d7 R, w) r0 Q  s将各目标按其重要程度不同的优先等级,转化为单目标模型。& |" a/ V7 V9 b+ X" X6 ~
' _6 F( P0 s, o
(3)有效解法
3 X0 S, C1 P, S. X, F" ^) ?寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。 / m! F- K  P+ q+ x

( K) S/ k1 S( V! d7 H+ e2  目标规划的数学模型% q. |9 X) x  y" K0 M# V; ~
为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。
: ~0 c( x$ @  Y4 F* k9 l/ }; i1 A( a0 U% x. T: f
例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。( P* H  e1 d6 m3 r' S2 S1 V$ d
% j  ]$ b) z, M0 R% ?( E* F: R  \  M9 d

. \& D% y. \4 P
6 C  C+ ~* c" w! x' j) a解  这是一个单目标的规划问题,用线性规划模型表述为:
# t/ p9 l+ M2 P+ X
; y" k! b- }; Z( f: A* Q3 [/ r( X
& K( B3 U" [" i. T) {& g
- Y3 R- {9 a, H  U但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如' f5 t. t8 \1 p! ]
$ p2 ?5 T& C; s
(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
0 o" F2 J& Y6 I/ P( [0 G  }8 l- @/ V2 Z  s
(ii)超过计划供应的原材料,需要高价采购,这就使成本增加。( f5 b+ s1 _( j' c1 ]! r
; W9 Y3 g) p/ q6 L' m: }& K0 i( c
(iii)应尽可能充分利用设备,但不希望加班。 . t3 ^: }& u  A

) W' k! B5 ?) z' N0 B3 S8 ^5 m(iv)应尽可能达到并超过计划利润指标 56 元。  i8 B7 V- ~; X0 u4 {- J
7 i4 \5 @. x# D1 S4 m7 l. n( m
这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
* x, Z4 h! J- C" h: F7 y" T( C& q& T3 b# r
1. 正、负偏差变量
$ h( f2 U7 E: @& T' c
. c( T' |+ \% N. y% G. u8 ~( ~5 y/ M7 w; V5 s: z: X3 m. t
5 N% P: B% w+ k" Y* Z
2. 绝对(刚性)约束和目标约束
# x: b1 b! n" N4 _. M2 y) G
9 p- W0 w1 C; @( x; o1 G) q
% ]3 u: u/ q; J# b. V4 a, X  r% S- m. L4 V/ s- ?0 z, E5 p
3. 优先因子(优先等级)与权系数
0 g9 s3 Q) F7 c/ {" W0 L
+ y* ?; o( `  |) ?0 j( ?4 J9 n
2 R. C1 R- |( {8 d( O
! A: N- s8 q/ e+ m6 y9 ]
$ _8 V9 o5 C! v* y* q, I+ E' c4. 目标规划的目标函数
3 Z6 R+ w6 y- s$ g. R6 D9 P% N" i! a0 b5 i- F4 t

' I) p# D# d' X6 g
7 `0 ~7 h8 _6 p; s0 u9 C; r. m对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 7 F6 e/ ]# Y# r, P, ^, Y
  M! v; I( _  C; O% F! ~7 V4 Y
例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  / F6 j5 w, Z+ o7 c

, ], k) |2 C' S6 L  k- }: ?, v7 j8 D" B; i4 H

- f  w5 q0 \6 W: @6 s) L% N5.目标规划的一般数学模型1 P7 B- G, D3 K4 I9 g) ]8 h/ e

& s1 i& S4 D: ^% a% Z8 l5 c  k

& A+ G! i- G; F# j4 N. M& @; q# l& X
建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。 / O% _0 A  {& B* O# e3 H

  W, a9 p5 |6 E; i6 ?0 o3  求解目标规划的序贯式算法+ v; r: e1 k8 }4 y% x" a# q( s! A
序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
( u. L8 {9 V; e& p) S$ o# t  x8 ?( c! t3 A* j( }

) U9 G2 r' a% k3 \$ `1 N
  e! m% C; ~. L/ q, {9 z# N9 S# U7 F) @1 `' `

# D! H( t2 K' s0 o6 H2 V+ M注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。 7 I+ W1 Z- R4 v+ [# Y* B7 y, v+ m
+ x" H+ ^7 O" \0 Q  B2 |
例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:5 C5 @/ g& @# u# }4 r" I

/ A; W/ f, i' @2 G, l; d: b% J2 i6 ?" j3 o2 t# J2 X* D
) X: k4 a+ Y! g
(1)力求使利润指标不低于 1500 元;  t' J5 U% c( W

1 m( M8 Q4 k6 h7 ?" ^8 O$ ](2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;
" t7 K1 v5 y7 H) ~! B  |2 S. E% _% j
(3)设备 A为贵重设备,严格禁止超时使用;, z/ X9 G  p- l6 `" v

6 U3 p6 B* K/ [) I- |# U2 _4 I(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
! m7 {! G9 j8 c' e! H- ]4 u  Q) U( A' G4 J& U4 p
建立相应的目标规划模型并求解。
- I4 a) G& {, i1 H
; D1 Q/ M0 V$ C& p9 T解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。
6 A! M4 ~5 I* K, }) L  U& n- C, N& Z3 ^( V- A: z
# m) Y: b: t. L/ b6 C0 p
& t9 A# ]% U% L3 B, }% s
序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: / \( G1 G& Z2 Q* U4 Z  F+ w
9 k5 N: r, h( u1 t# [5 \5 \
model: 5 G. T" G6 }& U: u) |" Z
sets: . K% P+ H# _) v& Q6 [3 W* b& w
variable/1..2/:x; ! F! d# x) H) h3 d( o) b- P
S_Con_Num/1..4/:g,dplus,dminus;   o; f9 f; }& b0 a
S_con(S_Con_Num,Variable):c; . y# \7 ~6 s# |7 h0 u& t
endsets
- J( s$ k$ U3 s8 s$ Ddata:
- r7 d" b/ E- c, \" m3 @' _& `g=1500 0 16 15;
0 I; F8 a% H. B0 E/ @c=200 300 2 -1 4 0 0 5; + T8 D) x, |. @% b( J1 m% ?8 Y5 p9 ~
enddata
0 H- Z6 z/ y$ P2 \& {3 z& I8 Imin=dminus(1);
8 Z* D% W3 I+ G) A8 G/ J* a' D2*x(1)+2*x(2)<12; ! O$ n4 i. i5 W2 s
@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); ; k- k6 ^! b: A8 A8 n
end
; I2 X# e* o) k6 n4 L
: V* l0 i. t& e. _9 H4 u

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

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

model:
  i* @: N( t7 |% N, O% hsets: 4 h( }2 N2 e8 E9 w
variable/1..2/:x; ( Z* b/ L% J$ @3 u0 n- D: K5 B
S_Con_Num/1..4/:g,dplus,dminus;
0 r6 \4 K% Q% y  ?$ Q( ?. rS_con(S_Con_Num,Variable):c; 8 s$ @3 A3 r1 g! b; |; N
endsets
: [( p2 F* w8 \# ~+ |9 vdata:
, B$ u& m* \; Rg=1500 0 16 15; : g% N3 L8 \( j3 T2 y
c=200 300 2 -1 4 0 0 5;
% n- T" v* x# R: v( Benddata & H& a3 ]- ^+ V9 `2 q5 s0 F3 L
min=dplus(2)+dminus(2);    !二级目标函数;
+ z) V/ o9 Z: c, J& }* X# Y- x1 H0 u2*x(1)+2*x(2)<12;
" `6 [! r$ e  X6 ]$ T@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); / l: P& I8 R& E' K  M! e
dminus(1)=0;!一级目标约束; + H  h8 R' ?4 U- k% E
@for(variablegin(x)); + x( {' `6 U4 z- I$ {
end
" V$ K0 M( q% M' c& I. k
" o; x# V) L6 \. V) ^, z! w4 J求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下: 9 t1 ?8 r  \8 I% p

# G) p: w0 k! a  z9 Q, \4 z- V0 Xmodel: 8 K5 q  k# e0 v2 ~& I" s
sets:
$ X# K5 J2 |3 Q7 d4 ovariable/1..2/:x; - K+ C1 L, {3 _; m$ Z
S_Con_Num/1..4/:g,dplus,dminus; 5 ?! K# f$ p, z
S_con(S_Con_Num,Variable):c;
- f  s5 q( G4 G9 @+ V0 h9 T: xendsets ( F( ]( ]) N; }
data:
0 m- K: h* H5 }6 h. Mg=1500 0 16 15;
+ j: r; }8 G5 B; uc=200 300 2 -1 4 0 0 5; 0 N' p' [. G. d( W; m$ H
enddata
& r& R2 F- K. R! s' O$ Bmin=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; / z9 o2 j. l/ F' D1 @. L' L# I
2*x(1)+2*x(2)<12;* g% L0 q% }5 [7 d# S) ^& a
@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
" r7 i% O6 v" @& {dminus(1)=0;!一级目标约束;
" z( W' F) f4 p% J8 {, bdplus(2)+dminus(2)=0;!二级目标约束; 8 g( k7 z1 X4 b/ n4 b
end
8 K9 X! _) x1 D* E' v9 g+ y* Q3 E& g0 n' [; A
目标函数的最优值为29,即第三级偏差为29。
) ]# M' \3 p2 `* U7 J8 f% J
3 l# }8 S0 Z9 X2 ~/ j7 }分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。
' [0 r( }$ [: V8 p& Z3 f2 V, h
5 c, W6 i3 @1 S' x. O上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。$ t: F! Y3 c. f" ?1 R6 q9 ~3 f
" k1 u6 V) m. J/ \' T/ S! s
例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。
1 r1 J3 `, \; H! ?0 l9 W( r
% E8 x" Z4 {. hmodel: 0 s0 j& O- t7 k$ N: C; ?, e. a- h
sets:
! H& b7 o. W1 C7 `$ ]: @level/1..3/:p,z,goal; 7 A4 c4 B9 {- |; Z
variable/1..2/:x; # v. c9 k# D* }# R. ?) g/ k1 u; B+ i
h_con_num/1..1/:b;
8 s8 F0 q' z( Z+ O7 x( as_con_num/1..4/:g,dplus,dminus; 5 h; Q/ K- p& l  |6 N# ?8 o* }
h_con(h_con_num,variable):a;   L% a; j# G/ i) o, |
s_con(s_con_num,variable):c;
3 X) J& O  L% K- r$ k% D2 g& uobj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
. b& h; K! V  d8 Q' }1 @endsets * H" Y; }' y0 a9 D5 R2 @, w7 k
data: 4 \& M- D) `/ Z' x# x* i4 v9 |
ctr=?; + ]6 y& }( d, s3 d& G, P
goal=? ? 0; 2 }' o! [& }2 x* h( c9 y
b=12;
& u6 I  a: O# U! P3 ?g=1500 0 16 15;
4 R* y, Q5 T+ }+ k3 G, Qa=2 2; 6 P) y8 c( `; `6 C
c=200 300 2 -1 4 0 0 5; + i! E* ?) `1 q( a6 |2 b% t/ C. a
wplus=0 1 3 1;
; }# F. E3 ?. _: J: I4 R; zwminus=1 1 3 0;
$ D. T# f2 i( @9 v  r2 V  q, \enddata
5 A& c6 w( A% t4 S  i- k  O) f. smin=@sum(level:p*z); . o7 h+ f3 F. k  |7 ~) p/ P( x8 b1 V. L
p(ctr)=1;
9 h; {1 n* x; Z! _2 A@for(level(i)|i#ne#ctr:p(i)=0);   I- |1 g4 f! J) r, O
@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)));
. Q! U$ J- Z9 Z1 O- oend 3 j) b2 M+ Y' G( P1 |2 H
! M$ }/ M) g) [6 r9 z. f

5 v2 \4 i; N& \, Z
& P5 x. q" I6 A7 k+ c
6 Y/ O  b" i: R# K4 g# \4 o( {' @* k( }9 s
4  多标规划的 Matlab 解法

多目标规划可以归结为

8 G+ Q/ u3 J. k8 t: b$ P2 M7 Q

6 ~6 s! F9 h  u) ~6 N
  Z5 v4 ~# g3 [6 B4 \[x,fval]= fgoalattain('fun',x0,goal,weight)           
; B, @% R* R& }! X* ^1 ~. \/ |[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           9 X5 Z8 ]) d! \" C9 W' [
[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)             ?2 X1 N, t2 m' S: `
[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) # H6 ?2 G+ i7 T" {/ S
- \6 ^& T7 D5 w# |

# r( i4 ^2 i) Y5 f3 Q要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。7 ?1 h: j* e, N0 @& p* V
例 5  求解多目标线性规划问题 5 W& i4 m' F  [7 U, I! t6 O

$ r) ]) t) `# o6 U: P
% ^9 M  x- v1 b3 q
. q+ L( u5 b$ A* Z5 f$ k解  (i)编写 M 函数 Fun.m:
) [3 M1 ?% u9 [8 b3 R. S0 t0 R* L2 F5 v/ g" I; ~( C9 ~1 C8 W
function F=Fun(x); 8 E2 b1 s' h! G: l: i7 `1 T( _
/ P+ d( ^7 b( w
F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
- O) P0 |% e4 b0 A  y+ i' P4 ^. p( o! s
F(2)=3*x(2)+2*x(4);
" {. |+ L* a) V6 p% v, M* p/ L( I  l3 }
+ G; S" i' N  c0 M. x5 H9 j9 ]3 \(ii)编写 M 文件 7 H0 V+ S8 Z- M9 s' }8 {, N7 s

- x7 k' M# M5 f/ o# [a=[-1 -1  0  0    6 n7 S% m: u* ~; U7 u6 D
   0  0  -1 -1    / [1 j) H: W4 n- I6 G  ]% i- e& X
   3  0   2  0    ! R# P* ~$ y. ^$ H6 f
   0  3   0  2];
' Q, z, F! W6 a, cb=[-30 -30 120 48]'; - N" \- ?6 Y/ P  H( T' M+ A; z
c1=[-100 -90 -80 -70]; , B, o6 {# J3 W+ ~6 C5 ?
c2=[0 3 0 2]; ' _9 j; n4 ~- s% }! L) ~, Z- V
[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值 1 {& J4 M2 Q# J/ g5 P  W$ L6 {. d' B
[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 8 Z" R$ L8 k- r7 z+ u$ a4 h
g3=[g1;g2]  %目标goal的值
8 p. I3 k0 G$ W+ i6 \[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) , c# u# S0 v( t" ~
%这里权重weight=目标goal的绝对值 7 F# T1 W$ D9 ?& b! T! a

+ K  e: E5 w% ]+ ]4 U1 [% t1 T- V

就可求得问题的解。

习题
/ Q6 O5 l2 l9 \$ d
+ ?8 `5 }* }. ^3 X0 g. E; m' K' h7 e  f! B3 O
————————————————* Y  i4 f0 j8 Q7 V% p8 w# t
版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
3 i$ [/ F1 I6 a! L, b原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932
! }: f0 M7 w0 c$ t6 c: W8 D5 M& K" P  v5 P  b8 O9 }# q
, Q  [$ Y# Q- Q  B





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