数学建模社区-数学中国
标题:
目标规划模型:求解思路、序贯式算法
[打印本页]
作者:
浅夏110
时间:
2020-6-1 15:20
标题:
目标规划模型:求解思路、序贯式算法
1.线性规划的局限性
2 f& u& k0 Q/ n- O) T. Z
只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
+ a+ n/ z8 E9 C1 Z2 v- v- L
0 X2 [- b* N9 x v! g
2.实际决策中,衡量方案优劣考虑多个目标
) }4 U2 y: m! C3 G. D
这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
7 a& k8 p$ g$ o! z; s
M' v6 G0 p6 z. q; _2 S
3.目标规划(Goal Programming)
5 T \, U d7 c/ s3 k# m/ y6 W
美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
% ~" i+ \; }9 W
* I1 t/ h# `* N/ y
4.求解思路
' n* G# L, Y: f9 n
(1)加权系数法
% G( j+ _$ s/ j# z) t* p. {
为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。
8 L2 `/ w1 W4 d, N
7 h! t( s) ^3 @1 T) c
(2)优先等级法
8 A$ K* L# ?( @. q) X! r
将各目标按其重要程度不同的优先等级,转化为单目标模型。
* ^' y! `9 T( @$ ]' b- ]# g5 h
5 O9 A u0 ]2 R6 A2 @8 x5 w3 x; j
(3)有效解法
& q- ^4 X! F* `) _. x, Q, x
寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。
" s$ |0 m% B/ ^3 T- X
$ o% r( f' b/ G6 R8 _ K2 M
2 目标规划的数学模型
- e1 g- z6 v1 D$ s1 ~4 U5 s Z
为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。
: E+ m1 v" p% [/ W2 A6 W
' X% }+ i1 a6 _# h- G2 @& b
例1 某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
- C" f q4 o5 e( c" J' U; v- ~
" E7 m" s& L! M; \9 ?* g' M" t
; }- f4 b+ Q2 }( K5 n5 j
; Z5 }2 M3 D* b1 o
解 这是一个单目标的规划问题,用线性规划模型表述为:
+ D3 ~, i2 e# p3 j
8 B; U' g% Y7 h/ i
2 l6 t. ? o% k" @ F+ {
/ G( x$ I% e6 F
但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
. Y b9 J6 j0 b3 p
6 T" @ d4 p2 u7 b. k& n2 }
(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
( ]$ u4 K. N: y
- G: ?; i; d5 \9 C7 i0 k/ G
(ii)超过计划供应的原材料,需要高价采购,这就使成本增加。
. z: `$ |/ j' r* Q& y: t- U
2 n% s' g( n$ k7 Y
(iii)应尽可能充分利用设备,但不希望加班。
0 [, O Q# E5 p6 m' w# }9 F! A
' e0 w( V: Z' x& G. o+ p
(iv)应尽可能达到并超过计划利润指标 56 元。
) F. ^( G* r$ }
' b2 ? A, t/ w- s+ o" }
这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
, I! b9 S0 g$ w( g
9 }* q- x/ v; D9 M! o2 s$ j
1. 正、负偏差变量
( f: g& z$ c6 c; E0 r0 i! G7 v' u
5 ~" i+ k# q! q" _& w0 j! {' W7 R: n
+ G# w1 u# i" `# W# z9 U3 x1 Y
+ \0 X# \9 F: \/ Y
2. 绝对(刚性)约束和目标约束
' h: y; e; U& i5 i$ q# P( s i
4 r; d# t' P% t' m9 f& t$ ~+ s* e
7 [; _* @1 `! N! Q0 q- M
' m* n6 r% [. y& E6 z/ L( q
3. 优先因子(优先等级)与权系数
7 \3 u/ l. Z7 C' F
/ ~1 ]7 q- q- K3 ]& M s; h
/ ]0 {) Y5 Y3 [; u* l
+ ~ o3 `5 |2 `) v" r- x9 q
5 B2 T: D( \, F* o
4. 目标规划的目标函数
' Z) B; c2 J* O" Q
( {' r- K" G5 E# Q5 |! C
1 T5 C/ S# P6 T# r4 v2 K
, k3 x7 D6 S- G: \+ b
对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。
- D2 Q0 W' N! i6 z9 r' Z5 _5 f
+ o, ?) ?8 R) S; y& U1 u
例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解 按决策者所要求的,分别赋于这三个目标 优先因子。这问题的数学模型是
: |! ?) a* M% Q$ `( ]- v# D, j
$ e/ |' ~2 l, g6 A3 f& v# E; i* l
! ]' n8 h9 U" c; q+ Q1 g& @
7 o2 R- G1 Z+ m4 T
5.目标规划的一般数学模型
- e) `" s5 o O2 {8 [
4 `$ D' b; b, r! n9 w' `
3 z0 T: F0 E0 R6 _2 N _+ g/ d$ ]3 J
% C) I/ }( h% A4 [" d n
2 @+ Z% k( S5 T/ j6 i+ P6 b3 l5 O+ ?
建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
; y8 f7 r0 K. {* ? a5 @6 I, S! x. H
, \- T7 D& S6 q1 u$ R
3 求解目标规划的序贯式算法
- a$ Y" D$ m0 Q& f* A0 R
序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
$ B. _/ f9 v: v" P/ f
+ Z7 a! h2 Y8 h& C3 j
: C2 o3 {5 {5 t }$ [
$ m& ]. @: w i! Z/ S' b& f
( Y- k( H; N1 K- I; c6 o
$ F: ^( E& w" f! l7 l5 X. I7 g u
注 此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
3 O# P8 }4 |. b
% ^4 A; q2 y+ ]& F8 W
例 3 某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:
1 n& Y7 A. i% \2 C3 @. g. l- S
* S( H! |; M8 {" l. ]. U0 O
: I% r2 J B$ J% \# k$ D; n7 u
6 w, x4 P/ S7 M
(1)力求使利润指标不低于 1500 元;
/ t9 c/ K+ t( c2 C
& E' ^4 N( V6 f! G8 w
(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;
( H9 d- @- J5 W: N
8 y# _* F2 c3 c' ~+ L
(3)设备 A为贵重设备,严格禁止超时使用;
4 ]. F( o# [. [$ w) y* ?1 ~
8 j) x/ g) D9 m$ U% h" e- _
(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
2 \6 |7 m* e/ g5 W- S8 ]$ o( i1 G3 J
' O% L8 E, U* s9 `1 p. ^' O
建立相应的目标规划模型并求解。
4 m) c0 O; \; c! B2 q
6 k. n$ d, ~, C! G$ ^8 _0 b
解 设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。
7 z) p0 r+ ^; Y
t. S; E% x5 s$ X- V: s9 ]
8 G. h6 k$ h R! }. j
! j, F9 k1 N3 ]% A+ E2 Z
序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下:
9 \1 K9 h/ H$ L- ]
4 b i* P; a4 G8 q# m" t
model:
! F0 E% w4 F0 `: H0 [. t z
sets:
3 u0 B2 }( ]. l( v. m* O7 d
variable/1..2/:x;
, x" i/ q9 z k- A6 h
S_Con_Num/1..4/:g,dplus,dminus;
' W! ^3 R+ |5 S1 c8 ^, m* L# t
S_con(S_Con_Num,Variable):c;
3 Z4 M& V1 o+ D5 u; T, q* U6 Y
endsets
/ p; h5 d& [% a
data:
0 m5 u; S9 ? Z
g=1500 0 16 15;
2 o8 x0 m; N3 s! V9 i j
c=200 300 2 -1 4 0 0 5;
; g+ ]) D/ t- V8 Q9 n, Q, c
enddata
; l* o6 S! w k f' u
min=dminus(1);
$ ~- z% R$ ?2 v0 b) D* ]; q" D; Z$ U3 _
2*x(1)+2*x(2)<12;
' b4 ~. O0 Q# y7 W; A9 ?% o: Z
@for(S_Con_Num(i)
sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
* g9 B. ]3 m, z! u& G
end
$ G8 P! c: J! D [+ ~. Y& ^# _) g
$ @( s, g- Q4 N% Y" [& p
求得 dminus(1)=0,即目标函数的最优值为 0,第一级偏差为 0。
求第二级目标,LINGO 程序如下:
model:
, }3 Z( r" Z( c8 o! W
sets:
8 F( w' S% t/ R' L8 f' A
variable/1..2/:x;
8 d" |" m2 Z/ w4 K( p6 A
S_Con_Num/1..4/:g,dplus,dminus;
1 R3 M, f u# R" @
S_con(S_Con_Num,Variable):c;
0 E2 x3 w5 h" H8 p: v0 k' k
endsets
: ^: V c! p' o8 \9 M# P! k2 A9 z+ i& ~
data:
+ p+ S2 d. R) t5 I$ B5 K8 d& J
g=1500 0 16 15;
! V1 p3 ~( K/ m2 M" A
c=200 300 2 -1 4 0 0 5;
0 ^9 [' k. {/ h0 O' }
enddata
) J" s0 \% t+ G( }1 s/ V1 k
min=dplus(2)+dminus(2); !二级目标函数;
/ L3 {% T% k' E: f
2*x(1)+2*x(2)<12;
' k$ S: b) u2 p# ?4 q' Q L* e; }- D
@for(S_Con_Num(i)
sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
( N" t; d# `7 X6 X Z
dminus(1)=0;!一级目标约束;
8 v+ j5 N/ g0 Z9 ?0 H% A s
@for(variable
gin(x));
3 j5 i2 ?- A) X, w0 n! b& L$ b9 Z
end
$ T5 V4 f/ ?1 j6 P) c4 M- j, o0 d
& X) O' a1 g: r; J
求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
: X3 A8 | d8 {( D3 w; k
4 R! Y0 Y* m. u- C* X2 R
model:
# ?% b+ C/ R) G5 J+ D* q
sets:
! ~4 v0 E* z$ n- {. l
variable/1..2/:x;
- X) ~3 t5 M# B
S_Con_Num/1..4/:g,dplus,dminus;
% I) S6 L3 Q+ o3 f2 O. y$ Q3 V
S_con(S_Con_Num,Variable):c;
?- G: y5 r% \& ~) Y+ B& ?' v
endsets
" Y1 @1 Z8 V' r% O' [5 V
data:
! d& ]8 B: d# c' r9 m+ I
g=1500 0 16 15;
! t' Q2 a- U m# g5 N0 Y) u
c=200 300 2 -1 4 0 0 5;
7 u: I. Q- p* U$ f- \* i3 Q6 Z8 U
enddata
$ k/ }3 s% }" G- r- D
min=3*dplus(3)+3*dminus(3)+dplus(4); !三级目标函数;
4 G J5 q8 |7 i
2*x(1)+2*x(2)<12;
& t6 L! m& e; d" X9 c
@for(S_Con_Num(i)
sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
) F0 M# g- Y, a6 P( ^& f% B$ T
dminus(1)=0;!一级目标约束;
- X4 K' t- ]2 U7 S( R
dplus(2)+dminus(2)=0;!二级目标约束;
1 \: o0 V) P! l+ ~: |
end
" h) ^5 Z- T% P4 c" N8 V, n; O% t
1 F i3 T1 i- J2 K3 D) o
目标函数的最优值为29,即第三级偏差为29。
+ J# K/ D) h. C! ~
6 _: @8 |7 a/ a& P% Q
分析计算结果, ,因此,目标规划的最优解为 , 最优利润为1600。
+ i* o: e# B0 @6 ^/ d7 I
* b, q+ [/ ^8 I! v
上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
9 T [) F: v5 ? a3 |# U# S
. w0 W. a$ [, ~2 o$ r
例 4(续例 3) 按照序贯式算法,编写求解例 3 的通用 LINGO 程序。
! z4 {( |. L; p1 h4 D
1 L" l+ _3 }) N1 [) o( k
model:
$ F( I% l, Y0 Q8 R" N6 Z6 M! r
sets:
$ G* U9 ?: W) }) n3 A" }( ?8 P( K
level/1..3/:p,z,goal;
% R- f* _" Z" O$ F: y0 w
variable/1..2/:x;
1 l0 s2 S2 d% r# q
h_con_num/1..1/:b;
5 W% q: e9 B8 ]0 Z$ q* A% `
s_con_num/1..4/:g,dplus,dminus;
$ J: s S6 m1 V+ k) \
h_con(h_con_num,variable):a;
5 q8 d- L' n' S4 i) u0 w
s_con(s_con_num,variable):c;
' r/ r- Q( O) y" P. C* s! L
obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
) j. J: K7 n* x$ Q) e
endsets
. P" J- M# i3 D" g
data:
! p) S4 z1 M0 @ H# a
ctr=?;
# u; z7 x' \4 `( C) ~" z8 h
goal=? ? 0;
\) [0 N/ t2 N# W7 [
b=12;
$ d0 f. D' {6 z
g=1500 0 16 15;
! k+ q% c" h$ l9 g9 j$ S
a=2 2;
2 y' _0 ?$ M9 [, R5 }9 A
c=200 300 2 -1 4 0 0 5;
( q2 Y6 }. S' J# r
wplus=0 1 3 1;
- }8 e% v2 D* |: W" c3 u, K
wminus=1 1 3 0;
, g5 u& O$ t* \& `5 K5 Z
enddata
- Y/ r( V: J1 f2 ~/ l
min=@sum(level:p*z);
# r* h6 w2 ^: j% o. H/ w/ }1 p \' W
p(ctr)=1;
# ?) s( v& J% s4 \
@for(level(i)|i#ne#ctr:p(i)=0);
9 W# K, }7 S! x6 B2 M) d. ]
@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 G( o6 l1 N3 t5 n' b6 I
end
) e( R' M& P" e/ k) \
! v# C9 Q- g# ?. [
7 f, r$ l. n# v" l
, V% ~4 O0 i% Q
4 m6 R6 S7 Y3 \9 n
- n: u' D& d# ?& v$ G5 ?
4 多标规划的 Matlab 解法
多目标规划可以归结为
/ R8 R( Q5 [. {% M
, j+ Y; A) r5 i6 v9 R0 N& I H- ?; q
. l! O& u9 z. z2 n
[x,fval]= fgoalattain('fun',x0,goal,weight)
8 l. A9 D* m8 i# ]7 V
[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)
+ p8 F: s9 U, Y/ a4 _
[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)
P/ w3 T! {" Q3 E% A
[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
( e1 T" p9 G8 Y* d: r- {1 y
4 h& Z0 d, z5 h+ x
! t4 q. s' v. e8 i/ q0 Z* v
要完整掌握其用法,请用 help fgoalattain 或 type fgoalattain 查询相关的帮助。
' i3 ]' ]4 H* ]' h0 ]0 \+ ~5 N. q
例 5 求解多目标线性规划问题
2 ?- n& L+ a+ S7 A; C% e. `
3 x L r" y z# j$ @" |
3 r# o3 A, g j c5 ]" C5 a* @
0 U0 r( g: N9 U. p9 r
解 (i)编写 M 函数 Fun.m:
+ Z4 j0 [* l1 ~% Q: u
h! E0 h* v% W) a+ Y
function F=Fun(x);
# Y1 d0 h% J" P0 F& S
7 L% Q+ S' A+ ?' I2 r0 p6 l+ T
F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
* ]9 K8 t; @3 H/ Q- p$ @* x- t
n% a0 _5 c) { z1 N
F(2)=3*x(2)+2*x(4);
: ?5 o9 c$ t% r
" @) {3 d! G" o. I/ B
(ii)编写 M 文件
, L) {: Q' R- I5 f2 [' u
8 e, h- E6 M& k# R2 C+ R
a=[-1 -1 0 0
. U# K* `: ]! ?1 c2 J) t
0 0 -1 -1
G7 O8 K6 m& Z
3 0 2 0
7 ^. b5 Y& _! o x
0 3 0 2];
% w/ r' _# y X" r+ m" X
b=[-30 -30 120 48]';
0 z) s2 P1 p, ~+ L& t
c1=[-100 -90 -80 -70];
+ H) U7 h: `0 Z
c2=[0 3 0 2];
. n N0 s1 v$ j
[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1)) %求第一个目标函数的目标值
& m4 X3 E- ?8 E6 n
[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1)) %求第二个目标函数的目标值
5 B; E; r- a$ L' d9 K. m6 d
g3=[g1;g2] %目标goal的值
( ?" G- _/ p6 {
[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1))
7 ~0 [, b) d# R) n s
%这里权重weight=目标goal的绝对值
& \( z" V& H: K( F9 o8 D, j L
+ {8 G1 e$ m$ R. _) A' U
就可求得问题的解。
习题
' p U' ~" n* p% s2 X
$ [3 C/ K' {' B
# ^% |9 K0 d; G; B- y
————————————————
/ G0 {: P7 S+ N0 u' d
版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
# Z! _+ h* r% m
原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932
U+ I; @+ P7 }, D7 a! P; C. v
1 j4 D( ?: D) G
; C1 _- G& w: \: z$ V2 E' v
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5