数学建模社区-数学中国

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

作者: 浅夏110    时间: 2020-6-1 15:20
标题: 目标规划模型:求解思路、序贯式算法
1.线性规划的局限性
: u; p0 @; [1 F& t( v7 u只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。  q3 J) J6 q; X( `3 y5 @- T. K

& X0 H# S# L! m9 b' O 2.实际决策中,衡量方案优劣考虑多个目标+ t2 e, g$ v5 v) F. @. C, G6 u
这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。3 B; W& f& Y( X% [8 @8 l# {4 y
4 c9 k- _& M- R5 f* M
3.目标规划(Goal Programming); p" X, c# `$ {7 ?& K; e
美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
. V) m1 _8 q# R2 X+ Q) c* _
7 `% }$ \& i8 i: H0 X- t* r4.求解思路3 D% j) f- {6 F- O# l3 k, g
(1)加权系数法9 _6 C9 Q/ a) C
为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。
  Y5 E: k. ?4 x2 Y6 e6 X* ~/ m1 ^; p2 T( I. ^
(2)优先等级法
* K5 T! F- D/ G! X% O- `7 D4 b将各目标按其重要程度不同的优先等级,转化为单目标模型。
/ D* l7 m+ N! U+ P
! w% v( P/ G: U2 d4 C(3)有效解法
/ N0 F* ^; Y7 r7 K3 r8 Z5 h$ y$ b寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。
% ~2 F1 Q8 w6 `) h3 E
, t8 ^$ Y( G; x3 x2  目标规划的数学模型' ^0 X* t+ g4 j
为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。
) y/ @, N5 P& [" s* _
+ _( b* a* t8 I7 n8 m7 i# Z( G8 F例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
8 D$ D7 q8 D) O2 a+ T* k( n7 D1 Z& |; w2 I6 I( |
. m% A0 F* {8 B" @, y4 ~9 j( C, q
8 [; v3 C8 w9 P+ S5 G( ?$ Y. B6 T& p  `
解  这是一个单目标的规划问题,用线性规划模型表述为:
# q& A3 Q7 f/ ~# u5 y
5 l- U% A8 ?- z0 a) o
1 ^  F/ f1 i$ o& M5 _( t2 G. s0 o% [( \- Q% e! n
但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
9 t' i$ K3 y. I! @6 V& n
0 C) V% f; D9 w  Z- ?9 x(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
) [, }+ t$ w3 D6 x, O
1 V: q9 e# A9 k# D6 O(ii)超过计划供应的原材料,需要高价采购,这就使成本增加。5 i" T3 |( Y8 Z$ `2 _9 M
+ E0 Y3 u1 w' N$ U: j
(iii)应尽可能充分利用设备,但不希望加班。 6 C0 b9 E2 A- l' ^* y' L

# E) l8 ?  V) Q7 }7 n  L+ |; N(iv)应尽可能达到并超过计划利润指标 56 元。8 ]" k6 W! U! p* t5 ]
9 j+ x- G6 i# t$ |1 y" T* p
这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
/ K5 }* \, e, L8 ]; M& |1 I' Q0 l1 f9 @
1. 正、负偏差变量 * \4 f6 F: ^3 |' C. z6 J
7 _* z5 G& }' z1 F. ]8 I
$ h1 P( }; I: U: J/ }7 w
) {  K- \" `7 Q; S! g1 U+ r0 q
2. 绝对(刚性)约束和目标约束 8 {  S+ V) r& n

8 ]2 L( r" R- p! r! E* T& a
) K7 r$ w/ k1 f* r3 K: y' }, a* ^; L5 d; v" m7 {: A6 G) @8 m6 h9 \
3. 优先因子(优先等级)与权系数
0 W6 B+ @: g$ n/ R2 A
# n  v& X! F7 C# _
8 o4 b3 H9 _$ ]+ p: y  |1 ^1 {/ A; M, S( A, D4 @, H( C

% m- u3 I1 @  E2 A5 {; t3 g" y# h1 n4. 目标规划的目标函数 1 ^9 {; I) h/ R  ~" k& i; P) c) Y

! a0 ]; o7 Q/ k0 ^2 {& r. W1 v
; h( H' d) V- E( a. h
7 X" T% Q- J- N8 }* e- t对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 2 s7 P3 q' _/ Z7 G9 b8 @8 {

; w0 x, s$ K- ?4 ]例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  3 w3 b9 W: W# T6 R

) S/ ~1 B. f$ {/ ~9 l) Y2 K
1 _: o3 r& G! G1 X. d& k0 a5 c
2 C+ I( V  H0 S5 G. H+ }: @  p4 G5 O5.目标规划的一般数学模型
! A2 ?( o* w3 k! x  O
4 ]1 Z) `5 @& p3 L
3 |9 l' q2 J6 ~7 U$ M& C
6 q% z$ `3 J5 T8 y* D9 i' b. q5 x# T# R! ?4 x
建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
# z7 H% }6 ^* u" {7 m
! V' F( R9 n: v0 u6 f2 G- V3  求解目标规划的序贯式算法/ g) Y: r, M" T' q
序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
6 Y! R  e) B  F
) f, `2 F: k1 o# x$ V/ R# Q; i
2 G$ R7 R# _  Y5 y3 ~: c- ?" M# z& l0 I# a

' O& F, q& [! N! m# ~- S' ?' x$ Z7 s; o4 X7 Q7 B
注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
5 b- y+ I0 M: P  z) [) ?: o
1 D% A/ s5 |, R例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:+ k7 Z: }6 }& a
/ A) Y6 H4 a+ G- S7 \! K

4 v  b9 Y/ x/ o$ v$ \* Z7 Q# u: A" }7 e
+ ^1 g4 A3 L# l0 W7 r6 C# m$ R$ Z(1)力求使利润指标不低于 1500 元;
$ W/ R- a2 y+ s9 P! Y0 g# `' t
4 M/ S5 O" i6 ~+ I% x& b8 ^(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;- p8 X6 S# {" @6 g  I

. g) U; p5 b3 i( k(3)设备 A为贵重设备,严格禁止超时使用;6 q8 B6 ^6 f' u; w, h( S
$ _+ i8 j7 m1 |. K' ?7 R
(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。- U6 J+ t5 {7 r7 i' v
% L( c5 I2 |  ~7 R: q
建立相应的目标规划模型并求解。- M$ d1 c* J" f2 z9 {+ V
3 \, m& z& D1 W( B
解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。
: ]8 C0 `) S8 J! w& Y; P: @5 w& N
+ `8 B# v9 g0 j8 O3 F' l0 m# A$ Z6 }/ O- P+ \& o
" V5 p( i3 A1 P* _
序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: % S- n) ~; y: s$ r
- @9 q& d! Y7 G' {- }4 }' J
model:
& c0 f; h5 f3 E/ y, isets:
: \" s4 s% B+ C$ w5 jvariable/1..2/:x;
4 H4 F4 Y* u  J2 H  nS_Con_Num/1..4/:g,dplus,dminus;
, n* C. T6 f- Z  c" i, kS_con(S_Con_Num,Variable):c;
- P' }" B/ I7 ?endsets
4 M! K+ X  W* t' Y" Odata:
% d5 `# G7 `2 Ug=1500 0 16 15;   _/ n( T+ F0 q/ D+ p3 j5 @# L8 K
c=200 300 2 -1 4 0 0 5;
3 E9 b& ~% x1 a% `% R. cenddata & r" ~9 q: _" g
min=dminus(1);   I3 e( \- A6 |4 ^
2*x(1)+2*x(2)<12;
% U, e+ [( k! j# R2 g2 r@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
0 L' k. V7 U* s9 b3 j6 qend
. v0 X1 Z: G! D9 d0 R0 U) [7 [5 l0 {
6 |0 K$ n3 c, w: C( x

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

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

model: 4 J+ X- c4 i; S/ X/ N; S0 _, X
sets:
- {; a8 x3 u# S+ g# J2 s$ t0 ivariable/1..2/:x; & N6 O3 D' s4 L- l
S_Con_Num/1..4/:g,dplus,dminus;   n0 i* }4 F  t# t- P
S_con(S_Con_Num,Variable):c; 9 p' r" n3 T6 F8 J/ w
endsets & D4 Y: L$ m' P5 V* I
data:
( `/ R, y4 f  z$ X; z  y  Wg=1500 0 16 15;
; b3 y- B+ `; c2 j8 U% m5 Q3 h; }c=200 300 2 -1 4 0 0 5; 8 Q7 s8 {( `- Q+ k8 k+ D! O
enddata + n& X8 P8 m1 y: p
min=dplus(2)+dminus(2);    !二级目标函数; 4 d: c  u" m( O  @
2*x(1)+2*x(2)<12; 1 v1 {- O% b* b% F. v7 V4 ~
@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
- Q+ R. a/ O7 P8 x; a0 O: Rdminus(1)=0;!一级目标约束;
% `4 D/ e9 _7 [; n. ^) r3 _- Q% X@for(variablegin(x)); 2 t6 N8 ^) {# p5 m; k
end
& ^8 E. W9 R# G9 ]& }7 D0 T& [$ I" |& x( `* E
求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
& t9 x: a2 V  L- j, t
! l! }0 {4 D) D( `2 N1 C9 C# _model: 4 M/ _3 g" @6 p: G% ~
sets: : a# U# f! c7 c6 D5 @
variable/1..2/:x; 3 ^8 ^/ c7 N/ p* V6 p7 C
S_Con_Num/1..4/:g,dplus,dminus; 0 U# _, Q$ R8 d$ b
S_con(S_Con_Num,Variable):c; 5 p3 x4 J( _) n# s. Z- g4 |
endsets
3 e& a; b0 ?, I, }1 o( jdata: 2 j2 H- ?, I0 t$ Y- w* L* ~
g=1500 0 16 15;
  B: Q. U$ [2 Rc=200 300 2 -1 4 0 0 5; $ f( N( k7 [& a+ P5 f
enddata
/ J9 k  h; A% Y5 F) Qmin=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数;
# Y4 t, ]4 ]* b) r2*x(1)+2*x(2)<12;
8 P, [$ O1 R' D6 x @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); 1 X) e3 k/ u6 w" b
dminus(1)=0;!一级目标约束;
: |/ u6 [  [) m8 f- f# A& S7 Ydplus(2)+dminus(2)=0;!二级目标约束;
! ?4 r- z" W) t, xend, O& u! x, K) s& E% f
( h; A- P7 Y! }% Q. G, S
目标函数的最优值为29,即第三级偏差为29。
$ u# `# O; I' f6 x. r$ T9 V
2 e( f0 N  h+ D+ E分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。
; M5 U; }% c. z6 v; D2 u3 P
6 y: Y# l. o# I6 \上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
$ X9 Q# h9 m4 D( m, ]6 [: \4 y% R
# q, }% F$ ^7 i8 I+ C例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。$ s& @& t4 G" T

) I: A) |8 |& qmodel: + n+ K- b! `$ d$ w+ _
sets:
; U! i# V" Y+ ?" v. Blevel/1..3/:p,z,goal;
1 G+ V) M/ B9 Z' |: H9 Ivariable/1..2/:x;
  v: b$ ~- {' E6 |2 z5 th_con_num/1..1/:b;
9 P2 j7 O- R8 B* ~% Os_con_num/1..4/:g,dplus,dminus; 6 f5 V8 ]- s& G; G5 J3 p; d0 ?
h_con(h_con_num,variable):a; ! @4 N( I6 z0 h! O% j
s_con(s_con_num,variable):c; : K$ m& b  c! S  k4 z8 I
obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus; % ]) C& J6 |: {) x# R6 w5 _) s& z1 ?
endsets 8 Y4 ~% V9 I/ N: ?. F* @  z. j
data: 1 O/ Q) ]" D" h" [1 W( v4 E
ctr=?;
" s  [2 O. ~- |* Tgoal=? ? 0; ( ~2 Q' L$ Z$ l
b=12;
6 z  U" {* N( _" A4 l6 |g=1500 0 16 15; 2 Y2 J: D* ]! W
a=2 2;
: G0 c! D! h6 s( G+ @- Y# S5 c$ sc=200 300 2 -1 4 0 0 5; 8 @0 v2 I( A( D
wplus=0 1 3 1;
1 D3 g3 D/ B9 Bwminus=1 1 3 0;   f+ Z* ?( X- f! b! ~( f7 T
enddata 0 `- ]: M/ w  x* Q1 R) w: X
min=@sum(level:p*z);
8 [: [3 _$ Y3 f9 _, d" bp(ctr)=1;
2 U3 z+ m% L( ?6 M8 i/ I@for(level(i)|i#ne#ctr:p(i)=0); ( `$ M( Y0 f' _" k; 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))); + {& }! g& L3 c: I8 B
end
, U. I  ]  V' i$ a3 Z4 o/ I7 s
/ d" p' u! n5 C  F2 |2 x' W* g/ c! u3 }! M: {& M

1 E7 g& R& \& T( U9 `
0 t% W# e" Q+ e1 ?3 o; ?1 k; o+ c) O* Y5 \" S7 W
4  多标规划的 Matlab 解法

多目标规划可以归结为

0 N, d) K$ Q7 ]$ `% O: _& L+ o

5 |1 t4 K3 Y! g. @! N  s
0 H; B" y# m) `4 r' j[x,fval]= fgoalattain('fun',x0,goal,weight)           
; p/ i2 L6 |1 Z# I6 I' _[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           
2 g1 c& [" {' d4 V/ L9 B1 |[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
4 c: w  {2 p# G, H7 K# j[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) ! T/ e# _0 I, j6 C6 N

/ E2 H4 ^* U9 p* m1 j+ n/ ?+ T5 B$ t# k6 p
要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
9 M  `1 M" H3 ?3 n; l/ k* E# W 例 5  求解多目标线性规划问题 4 X3 T/ s- V) k" k* k4 `' R$ K

5 G* i1 U5 l. J0 ~; m! M
' f2 f4 B) I+ o5 I2 A
/ @- I6 P* e* D: Q解  (i)编写 M 函数 Fun.m:
7 x- m* F; w$ E" K8 z
; B  z7 [. t7 c3 i8 [1 E' sfunction F=Fun(x); - L; d/ R/ Q) k) O( B5 d1 z
; }2 U+ ?, u0 w' @
F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
  D4 I3 w- B9 f6 J1 l4 x- i; v5 @: y1 B6 N6 T. n
F(2)=3*x(2)+2*x(4); 3 Z1 l$ J4 ~2 V4 w# t. k

8 |5 e, D* E2 L, q(ii)编写 M 文件 / `1 W+ l( V& t0 B, F
3 _) d+ H3 Q) F# P! ]" g
a=[-1 -1  0  0   
( c9 |# \$ B% s5 n   0  0  -1 -1    / A  j. e: D2 @4 s) M2 u
   3  0   2  0    7 n5 N- j# [8 [. L
   0  3   0  2]; 6 d, i3 t& E. Y" J$ J# w: H
b=[-30 -30 120 48]'; % `9 @" @2 `# E7 N# ^
c1=[-100 -90 -80 -70];   ]9 Y1 f/ n) X) J# |/ L7 q$ X+ d) L
c2=[0 3 0 2];
/ l/ g! E8 C) O# U[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值 ) n/ p" s+ E  G2 v- s
[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值
% J5 [( @+ L) x6 Eg3=[g1;g2]  %目标goal的值
, J9 U& m9 |- [( b  i5 P8 A  k[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) % |( d. Q( w, L6 `4 E4 ^
%这里权重weight=目标goal的绝对值 - Z: J9 c9 R& T) S+ Q
7 n/ D! O7 `. D' u! M) z, i8 S+ y

就可求得问题的解。

习题6 H3 d" ?' |- M; x: U

5 w: v8 e6 A  o4 I, ~6 R& f9 }- T0 b. r6 }/ U
————————————————
% U: O1 \" J$ \4 w版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
2 B+ `+ M+ r" n3 M3 r) u原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932& c  |, k& e  F" w7 X+ g# l; d7 _: `

# X8 r1 B! P' Y9 d% b: B: ~" o2 @$ S) K6 h: A: h





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