QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2397|回复: 0
打印 上一主题 下一主题

[建模教程] 目标规划模型:求解思路、序贯式算法

[复制链接]
字体大小: 正常 放大
浅夏110 实名认证       

542

主题

15

听众

1万

积分

  • TA的每日心情
    开心
    2020-11-14 17:15
  • 签到天数: 74 天

    [LV.6]常住居民II

    邮箱绑定达人

    群组2019美赛冲刺课程

    群组站长地区赛培训

    群组2019考研数学 桃子老师

    群组2018教师培训(呼伦贝

    群组2019考研数学 站长系列

    跳转到指定楼层
    1#
    发表于 2020-6-1 15:20 |只看该作者 |倒序浏览
    |招呼Ta 关注Ta |邮箱已经成功绑定
    1.线性规划的局限性; N- r9 ~* j- O9 l8 m) W- D9 j
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
    - w8 d, }' l# o& _6 v- G- a; ?% r3 R8 `* H9 o
    2.实际决策中,衡量方案优劣考虑多个目标
    4 ]/ a1 `+ r5 [9 z6 n2 F这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。" I9 E6 h* {$ h! [) S

    8 S- z' D0 ~; d! ^2 K5 D6 ?6 c3.目标规划(Goal Programming)- }5 N( {# `4 Q6 C8 H3 ]  Z
    美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
    ( J8 c7 i" R" }) j8 c6 L) R" J% @" k. s% g% P
    4.求解思路: l# u( r9 ]' l3 c( }8 n; B2 A  h
    (1)加权系数法
    8 v! {5 K4 b% Z1 F) x. b1 g) `/ |为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。
    + v8 D! W% e, t- D  L8 C7 K8 S, |5 X* r4 p; E0 t
    (2)优先等级法
    ' x$ o- c. ]" P; ?将各目标按其重要程度不同的优先等级,转化为单目标模型。/ b( @9 `! Q; ~6 y, e0 J
      Y" A8 L5 |* g5 ^/ L7 h) Z
    (3)有效解法
    ! f2 `! N9 ?+ s$ w寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。
    7 e$ V. K4 @% D5 E2 v
    " t2 ]' Q- M/ w0 C2 G4 o: W1 O2  目标规划的数学模型
    7 B0 y2 Q3 {( y) {5 V3 g. r为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。# T+ E+ U: W. ?
      Y/ c5 H# ]& t- c: p  H
    例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。! ?* S6 d! m. J" p
    8 \1 M7 u# \7 n3 q5 d6 w# K: X' A

    5 w( M, w9 L' ^% g: W- Q0 q6 K0 k9 `" _" X( g
    解  这是一个单目标的规划问题,用线性规划模型表述为:
    2 A  F$ |# i( s6 O! S+ S& J0 V5 Q9 v

    1 Y3 _* {# y6 Y. `8 z' E( C' F# b* o" i1 V
    但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
    - C" [0 O, |9 M* g" K& l3 \6 ]$ T2 [& Y
    (i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
    9 _& T% w1 `3 H' m
    / B) L) R# X; @/ {(ii)超过计划供应的原材料,需要高价采购,这就使成本增加。, u7 b6 A& L: O  x
    6 T7 d; u4 f: z& s8 s* ^- M9 u
    (iii)应尽可能充分利用设备,但不希望加班。 % K  a  H' t( o/ ?# |& \
    $ x$ p/ P2 U& Q- _8 }6 M: y1 H
    (iv)应尽可能达到并超过计划利润指标 56 元。
    ) }5 A! {' f8 I! _* H
    ! `2 K' l- p, r5 @7 w$ s! K这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。 : s" u# p9 U* V, L$ e/ [, c
    0 ]' w6 m/ J5 H& T) ?. z
    1. 正、负偏差变量
    % O% V6 q% i0 K: t. Z0 n3 ]9 T* D, E6 ^
    ; W0 W' F( c8 m7 Q' }$ R

    $ e- b/ [; H- m2. 绝对(刚性)约束和目标约束 * U8 S# I! L0 j9 C5 T5 X5 _" Z. h8 n

    6 _* W3 M# s5 U# i' b& V  H# |) X
    ' J+ p* G$ a0 a# }2 k
    , }) Z1 L4 ~: m& B5 H3. 优先因子(优先等级)与权系数
    6 M; p# }% O6 X1 K' V6 Q: k* Z5 Z- t" H' Z7 ~( z, v+ G2 O0 \" i

    9 o8 i  r" [9 G+ @
    7 p. _0 e' {* y6 d6 M2 H" z& j+ D2 n+ Q, R0 `/ F
    4. 目标规划的目标函数 $ Y9 T) s: w5 Z; H" M; r1 x- l; n$ d0 W
    * ^1 h$ K" n( S- I

    * U" f) }$ ?$ I) {
    $ G+ D2 h# }) b6 l# s: I对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。
    2 H% k7 y1 g! b5 w
    4 j! ]' U  g. Q) a例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  
    % T8 V2 `0 R6 W7 w6 {! g
    9 L) h2 s/ T, o. n+ s
    % J7 L& n9 q  X2 P+ i: ~& X! n3 @/ b# n
    5.目标规划的一般数学模型: i5 H" D) [% \3 J- \
    8 D! G% h' f; s9 Z
    ; z6 J3 V/ u3 B3 m8 M9 j5 U- [

    : f: l$ ^! E# B  T2 x
    ; Z6 T" E* ~5 B1 P  y+ H9 Y建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
    # \& _8 G. h4 C4 h) F5 |. d# m
    5 X; {$ ?2 }1 V9 F) G  r3  求解目标规划的序贯式算法
    6 Y1 L( ^, s# ^- J0 N6 `  s序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
    ( w" Y  z+ t3 M; Y. w- J
    - u  M% }& U2 j. m/ Q
    ( L( G8 X/ a$ Z6 g" k, k
    $ e6 V: I: @  l/ P1 R0 U/ K
    ( @( j; Y  ^" U( Q! ]5 i# L6 |* n
    & Y' a. _. {9 e6 Z注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
    , t0 j) q4 ?2 P( ~1 F5 \3 V" b; B/ l( c+ {9 W
    例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:! W% ~( q3 L( H1 h( N0 Q, E/ L

      `' X" C/ ]# Y# W+ h" s& @, R/ [% d6 M: v1 B! z

    3 R2 g3 b* M4 ]: V) ~(1)力求使利润指标不低于 1500 元;
    ; \: n0 }3 j+ m# z' }$ r% O/ Q/ Z/ [' k) X8 ?8 R7 `! d+ V
    (2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;
    $ t8 E9 Z4 X) d6 `$ ^0 {
    8 j# R4 g- x2 b& e' ](3)设备 A为贵重设备,严格禁止超时使用;$ `% g; h  Y) Z) \. I' ]' e; c

    ' Q) _# j6 {& I- w! w(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
    2 ?; q- J3 o8 B" S) h4 C% d% a8 E* d1 c0 ~
    建立相应的目标规划模型并求解。& i5 ?4 y! ]0 k: S$ y+ v/ }
      \* j: D/ j$ b- {( ^' n6 }
    解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。 " w$ n, b2 T& p* W
    , [7 W0 }9 U4 i) n
    9 ?# T& p/ l1 J" U( R* v1 w
    $ }8 c1 H/ [: U5 ]4 N3 Y( @
    序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下:
    ; u. e. `8 u7 q. Z0 \: C, t
    & L& L' H$ Q3 L6 c4 R5 t$ tmodel:
    4 m! h6 }' a- T3 p3 ?sets:
    / Z( }3 f) R0 N2 r% C  _+ evariable/1..2/:x; 2 H) w; r* K3 G, P3 D7 t& T
    S_Con_Num/1..4/:g,dplus,dminus;
    + {& p$ D) K6 x6 j; l& w! IS_con(S_Con_Num,Variable):c; $ E- X9 C5 ]' M: Z2 |3 `* `% @
    endsets - D' J% q: i' H4 ], b, r
    data: 0 J  v# p3 G8 [5 R3 A0 f0 ]
    g=1500 0 16 15; 9 X  H6 S0 [) Q$ V5 O
    c=200 300 2 -1 4 0 0 5; ' F8 W! @0 z5 X( B( V
    enddata
    ; T2 u* q; X; zmin=dminus(1);
    % {! j9 p7 `# Z$ u7 S, `2*x(1)+2*x(2)<12;
    0 u5 t0 i. H1 Q4 L- V7 p@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); + |. m0 B" r5 }
    end4 i+ C  Y$ \9 h& Q

    9 ?8 |5 J+ U  ^# H, G

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

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

    model: / T" ?% G: q+ F
    sets:
    * w& _1 d' l+ @& T# W0 svariable/1..2/:x;
    5 \) d  \" h$ P/ {7 ]S_Con_Num/1..4/:g,dplus,dminus; + D4 S, O! h! c, X( J( i$ ?8 \
    S_con(S_Con_Num,Variable):c;
    / G. u4 G2 J6 }8 u& f% i- S, }* @% `endsets
    ! L, w+ O/ u7 Z- G% Edata: " U$ ~. K, u* t1 W
    g=1500 0 16 15; , T6 V0 k& u5 L. ^
    c=200 300 2 -1 4 0 0 5; 0 q+ y2 l& K9 u& H
    enddata
    0 w# G' N# `6 o. n6 C  A& O, Pmin=dplus(2)+dminus(2);    !二级目标函数; $ a7 p* {- A4 D8 j9 p# t' R
    2*x(1)+2*x(2)<12; + A) D6 |* U; S7 w
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); ; E  ~1 x( B( {+ m
    dminus(1)=0;!一级目标约束; ! A3 ~0 f! E1 l- t
    @for(variablegin(x));
    5 b% f( L0 z& U6 x- Q; Yend + J: Q0 z) G: M

    8 z& ?+ y+ ~* j& C* |  _4 g$ G求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下: " I6 t  a* S- E- C3 ^% a2 }

    9 O: }4 I  V# V: gmodel: + I- A2 _6 ~" k( e9 B
    sets: $ X8 z7 l, r0 W
    variable/1..2/:x; * G9 C* q7 s' O' U7 ^
    S_Con_Num/1..4/:g,dplus,dminus;
    1 Q: z0 C( e/ u) ^) Q; `- yS_con(S_Con_Num,Variable):c;
    2 x+ k9 P" Q/ ^endsets ) u- F  K$ C1 L& E+ q6 P- [" D
    data:
    6 K# E& a) `/ r) C& L2 T: {- sg=1500 0 16 15; . i5 w6 \# ?8 X* |
    c=200 300 2 -1 4 0 0 5;
    ' Q$ m0 X' O& Z, O- m" t  |7 xenddata * F  n9 b. l% C' `. f* s% ?( d
    min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; 3 Q; v7 d. g, F3 m* j3 b
    2*x(1)+2*x(2)<12;* q$ }5 K! ^( o4 U" |
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    " {1 X8 w* e( L& e6 {) Idminus(1)=0;!一级目标约束;
    9 z9 e: r# T8 i  l' qdplus(2)+dminus(2)=0;!二级目标约束; * d2 P) \) r$ \, C) L
    end
    * p% F. \6 |- p. E; O
    . f& w+ Q& k6 k- C5 h9 L; b  q目标函数的最优值为29,即第三级偏差为29。 - ^, a/ P! A. L7 F% g
    , y3 @+ b, y0 {
    分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。
    & z' m, e" w0 ~' b7 p: T1 O% |* }$ W% Q* X- x* d  A6 F0 V  g
    上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
    ( v2 V3 u2 Y* t8 F3 n
    5 D2 L% r4 @( Y2 X! _. G例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。
    5 G! A" K% B* P5 K% A8 @
    3 E$ q' c9 F% smodel:
    ! U: u4 u) n5 ^sets:
    ' k/ z  j* M% |! ]) ]& Blevel/1..3/:p,z,goal;
    7 _) d9 m7 }" p% Y, L1 [" V5 T* Tvariable/1..2/:x;   K5 a. y2 C- x( i4 M& s+ ]
    h_con_num/1..1/:b;
    5 t- O- l6 M2 g% Y) t! ps_con_num/1..4/:g,dplus,dminus;
    5 S& F7 q" g; K' j% Kh_con(h_con_num,variable):a; , @( C# I% T7 L( u
    s_con(s_con_num,variable):c;
    ( d" x, q0 I; C! j: _! _' |obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus; 2 n& H1 Q/ G2 ]7 e) j  ^
    endsets ) h  z  q) @( w% G8 N! r& n/ e
    data: 0 X$ @. {+ W  ~8 H& f
    ctr=?;
    $ j$ Z7 g2 \6 sgoal=? ? 0;
    ' j% H  A( e; Q8 z2 L% ]: \/ U9 vb=12; 1 H7 z$ v+ d3 ^1 t5 r: ^2 _
    g=1500 0 16 15;
    - n8 d" V: d% K+ z/ [a=2 2; 2 }  I! g, g+ _
    c=200 300 2 -1 4 0 0 5;
    9 Y6 `6 w, Q+ R" q' o, xwplus=0 1 3 1;
    3 j+ @) H( K! J7 mwminus=1 1 3 0; ) C7 f. G9 M" _& F
    enddata ) o( S! b& Q1 z- H" Q3 U: {
    min=@sum(level:p*z); - T$ y! I" K5 X" Y* e) @
    p(ctr)=1; 4 \: J, Z; |/ S( F  w3 ~, x! B
    @for(level(i)|i#ne#ctr:p(i)=0);
    / P1 _: o; d' E/ @@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))); 3 v' P' m/ v' ]/ X0 G: a6 s
    end # [) b, d/ k, y- H( u$ I. L  K3 a! k
    - R/ k; F3 P' @

      L* D! ?# g  g9 `0 L0 Y# I1 Z* }6 u! U7 c; ?' l1 ~6 P' [
    7 _  m6 r5 T3 g' m0 y# B# S

    * C& C) X1 ?+ s  u1 i4 F( W4  多标规划的 Matlab 解法

    多目标规划可以归结为


    . X; S6 Q- {- x# Z" u$ Q( R$ a/ w  m/ o- v7 |/ k7 p% w" h0 P

    ! C! Y6 {! ~9 H6 A[x,fval]= fgoalattain('fun',x0,goal,weight)           
    3 ]5 y: p4 j5 W8 x! k6 \% l[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           & n. q# M& L# g8 f9 U
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           5 N3 u* d; d1 s; a) O4 X
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) 6 x+ f+ D9 U+ s5 I4 N2 P

    9 u0 m1 \! r' @. q5 o* U4 n4 v: P" m/ e- y/ {0 [
    要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
    ! g9 l8 o5 \4 m: M, w 例 5  求解多目标线性规划问题 : z1 U( I; d; J) H
    2 A6 x" y0 B: b# m7 ]

    - ~3 R" v5 C9 _; V2 A
    2 t4 r0 q, ?: `解  (i)编写 M 函数 Fun.m:
    6 I* g, C8 U, H+ L, @& F8 O) m
    $ d1 x) ]+ M2 k# Efunction F=Fun(x);
    / i4 Z% ?! [% K7 S( k' V6 E5 V4 Y1 h
    F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
    # \& y% h9 E  d) i7 q6 b
    6 f4 G# M# M+ ^' mF(2)=3*x(2)+2*x(4);
    " E9 x% d8 d4 S# t4 v; l6 u; [' K* g2 J: A9 C/ E) d6 Q
    (ii)编写 M 文件 1 T2 S9 k) }! J- ?$ V* I

    0 b- b0 m' I/ m# y+ D( C" y9 ea=[-1 -1  0  0    4 }; h" e3 K; c8 m  Z
       0  0  -1 -1    5 b3 Z, e$ G, x+ b" r& d4 @1 h+ f; N
       3  0   2  0    % p/ l& \" A& ]4 q5 I. U5 X
       0  3   0  2];
    0 S2 D; \! I8 e& e6 Ob=[-30 -30 120 48]';   b4 ], C3 A  K
    c1=[-100 -90 -80 -70];
    ! h- G7 N9 O: k# Ac2=[0 3 0 2]; $ c6 E- M7 D+ g/ H
    [x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
    # K# V+ J! B" h[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值
    / d, A! _; E) ], V4 jg3=[g1;g2]  %目标goal的值
    $ e# P9 u9 }) y) r4 {6 K9 l[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) 3 `+ S2 b" v9 I/ V
    %这里权重weight=目标goal的绝对值
    ! u, C; Z6 S* W. L
    3 Z- D) _7 @* m* {9 h( M/ L

    就可求得问题的解。

    习题
    5 C3 {9 S+ @9 G2 J# @+ z0 ?) ?" l* u3 |$ h% m( ^' C- l8 W9 i. B. `
    4 X% X' f6 t2 B
    ————————————————
    3 ^! Z+ |! J+ a$ l/ @) F  g版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ( T0 Q% W1 D. j7 j原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932. |. f& C  ]; w. Q- `8 U, {, Q6 f

    9 I: `4 \0 L' V3 y) ^3 f' F3 h: B, E& ^  y1 e3 Z: @
    zan
    转播转播0 分享淘帖0 分享分享0 收藏收藏0 支持支持0 反对反对0 微信微信
    您需要登录后才可以回帖 登录 | 注册地址

    qq
    收缩
    • 电话咨询

    • 04714969085
    fastpost

    关于我们| 联系我们| 诚征英才| 对外合作| 产品服务| QQ

    手机版|Archiver| |繁體中文 手机客户端  

    蒙公网安备 15010502000194号

    Powered by Discuz! X2.5   © 2001-2013 数学建模网-数学中国 ( 蒙ICP备14002410号-3 蒙BBS备-0002号 )     论坛法律顾问:王兆丰

    GMT+8, 2026-6-15 10:10 , Processed in 0.396549 second(s), 51 queries .

    回顶部