数学建模社区-数学中国
标题:
目标规划模型:求解思路、序贯式算法
[打印本页]
作者:
浅夏110
时间:
2020-6-1 15:20
标题:
目标规划模型:求解思路、序贯式算法
1.线性规划的局限性
) {! ]% t5 l" ^! O$ ]# |/ Y y
只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
% A- k: |# I6 i$ ~/ |/ d# L
7 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# r
3.目标规划(Goal Programming)
" } `$ p t+ |9 V, S. V
美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
& p/ p3 ?1 H; |9 v6 n
8 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 l
9 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 u
1. 正、负偏差变量
# b* X/ R: M( v f
& R! _0 ? I8 v! l- i5 }. T- H
0 x' S$ p$ }( J% s5 M0 v
6 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# h
8 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: v
2 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, v
3 {, 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. L
8 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 Q
sets:
% `! n) e/ p$ o
variable/1..2/:x;
! U: r/ m, b8 s0 F
S_Con_Num/1..4/:g,dplus,dminus;
' U5 N' B( n4 e& W
S_con(S_Con_Num,Variable):c;
7 B/ I0 [/ E8 E
endsets
! 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' l
c=200 300 2 -1 4 0 0 5;
. a1 c# ]; ]: W) e- D' L
enddata
! M* g5 }, ^7 m- n
min=dminus(1);
1 g( [4 }* x; o/ ^4 O! a w7 i
2*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 W
9 v& ] {- Q1 v8 T
求得 dminus(1)=0,即目标函数的最优值为 0,第一级偏差为 0。
求第二级目标,LINGO 程序如下:
model:
! w. E: S6 } |. U
sets:
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- G
g=1500 0 16 15;
6 T, I1 v3 \, Q
c=200 300 2 -1 4 0 0 5;
2 G& r& Z1 p8 ?' @- F0 P
enddata
/ 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(variable
gin(x));
7 ^; c6 L' [: i4 X' N
end
. 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 I
model:
, ~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 Q
S_con(S_Con_Num,Variable):c;
( ]8 n: t6 i7 B
endsets
: _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: f
min=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" t
end
. 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( N
h_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# b
endsets
. 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. W
g=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 u
wplus=0 1 3 1;
# B6 u+ L. {# U! q' q
wminus=1 1 3 0;
" W3 }, k" u% A7 \) Z/ _9 U
enddata
. H7 `/ ~% D: G4 a
min=@sum(level:p*z);
2 _/ }# L5 U! _; c# g4 L
p(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 V
end
( j# \# [1 N9 `5 ?( g6 q
( k% O, r3 ?6 m
' N/ O4 U3 @) }* O& F1 f+ Y
1 r& f8 L8 b# a
( `; p0 I$ x4 }' _$ V! ^. g) ]6 D
) V: J; i/ F3 G* t
4 多标规划的 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( I
F(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 t
a=[-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# Z
c1=[-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! h
g3=[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/89488932
3 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