QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2395|回复: 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.线性规划的局限性4 Q6 x2 l  ?( d3 N6 P: r
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。0 ?& j+ Q7 f9 v. W6 C
    - ~* S  s5 N% ?; E6 s* p. V$ m
    2.实际决策中,衡量方案优劣考虑多个目标
    2 f0 G5 @% {1 p( A/ @* f/ k这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。  `3 l3 N/ Y$ D! G

    8 Y( r7 q5 ~  ^3 E8 ~( f3.目标规划(Goal Programming)+ _- K0 ?; x/ t$ E7 O
    美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。9 x; d4 @  b& ]$ I

    $ v* K# t' z% `% @5 ]4.求解思路
    8 \. l5 \7 P) J5 y(1)加权系数法- F  y5 h$ p. a
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。
    - Q8 J. w! Z# I. l
    7 L4 P" `6 F% A' m(2)优先等级法, Z$ @4 ^7 ?8 c
    将各目标按其重要程度不同的优先等级,转化为单目标模型。
    4 P0 G& J5 T" y# D" u- F' f, R7 c2 i5 H  t- f
    (3)有效解法8 F% S6 l$ m8 V. o% k' B
    寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。
    # L* V. w) s" R# ?4 `' Z# Y: o$ ~. O: c6 ^3 g& E2 t8 U- Z( B* o
    2  目标规划的数学模型1 O, N  o/ X6 y% t
    为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。" d$ ]3 C' J+ {7 v- b
    & }9 o! e+ d' `% ~' U& O3 T
    例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
    ) E$ k; ?! C% K5 T' {, L
    7 E. \6 m+ ~; ~9 K4 e- R2 }. g" b+ R; g: I$ k+ p4 S' ^

    7 V3 ?  u) n1 Y$ z* V解  这是一个单目标的规划问题,用线性规划模型表述为: 5 o1 n. b; |5 e/ s. w( P
    + Q$ Y! [" h% z2 ?; f

    . {6 |0 J" t" r) M* Y. A" L" j" S  g* s% b5 l% d( e
    但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如4 `3 H# t  k9 T) Q6 E/ k* g

    6 t% w9 `5 E- J! I. j1 d8 `# _9 a(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
    + G5 v/ f4 Q/ _2 \( h) J, f& _5 f3 q
    (ii)超过计划供应的原材料,需要高价采购,这就使成本增加。% j/ F9 B8 S% x7 ?2 L' r3 B

    - o' ]) x' W: [: n% H& Q(iii)应尽可能充分利用设备,但不希望加班。 . v- P  f, {; [$ }! b+ p. _

    & M% O7 c6 V* ]. [4 B5 ](iv)应尽可能达到并超过计划利润指标 56 元。
    $ g' M# C1 b9 s* c* ~9 {$ w2 k0 H) h: s3 X* X0 ^0 k
    这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
    ' B2 q9 H% J" P' t" e9 X6 Q( w4 i& X, f% E/ B$ [: w7 ^
    1. 正、负偏差变量 3 A- t' F8 F( z* G( i0 w

    + q& s1 _, I- E
    / Q1 J7 s2 m7 K1 @  ^' G  y2 r0 x$ E' i) m
    2. 绝对(刚性)约束和目标约束 # s7 R3 m1 W- H0 `7 q6 V

    ' C, m8 W, O. Z1 M7 U( S: ^
    $ f9 T% d5 w: ]) Y0 ]( l$ b+ V% J# U
    7 k+ d0 X9 Z' i6 k  a3. 优先因子(优先等级)与权系数
      K; U  }. @% o5 P6 K. V; f4 M" A7 k4 A8 M4 a8 C& A( A0 Q

    ! q. v- G) B; R0 ^# q6 F
    0 }' K( o* j: A! A  d& B. _
    ; `* [* X& B* Y' v4 ]9 m4. 目标规划的目标函数 6 A5 b* J% s7 G) ]0 r

    0 m* x+ g$ T9 f4 r2 \* e5 I7 a; A+ O2 U

    . g! z* w9 j; x/ D- D+ B  j对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 + T& @$ v, {+ [: p! v

    # P, Q' r. D* E9 e2 H# p; M1 j例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  
    5 C1 D# Y  K' I# x, s: S3 L9 v. P
    + N4 q5 t" j" M* ^" P( A) X& @9 M4 t
    ( _- o6 I) f3 Z' G# `
    5.目标规划的一般数学模型
    1 @  [; T' s8 {- ?, ]* {
    ; g9 g8 E& p1 X) a, W$ o0 V
    ' f* n% F6 m) R  G8 f
    % Y1 N9 k$ S% H( h3 @' ?1 {& C% B5 X/ M1 j) H
    建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。 ! f* S6 o( a! }- m* C
    2 a( S+ A" A$ z) s% g* s
    3  求解目标规划的序贯式算法8 |: ?4 I3 M" B1 ]5 y
    序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
    3 V& O. O+ I) ]
    1 g1 ?9 x: u" v: I4 Z' q" ]. Y8 o( Y2 t2 B+ R% \7 I

    ( T, s! h. P+ M$ n6 `
    ' E6 l* X9 x4 s* x8 \( t! [7 ^" H
    5 a5 U+ b( E5 I3 q注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。 * ?* v0 n* }- U0 o
    0 \* }5 Z1 }* F& I* m8 Z7 r
    例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:. n; |$ t9 q$ O# q( `  C
    & F' c, z$ a. \, g) k
    8 y% Z& m. V0 e  M4 F
    " p9 ~- ^8 _( A" r+ \" r( p
    (1)力求使利润指标不低于 1500 元;
    5 j1 G: z& T$ t) A0 x& {, f  H
    5 v: O+ U; w, j% ~1 n+ i(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;
    9 X! j! b0 w" r* `( Z4 _: h+ k; C
    + w" r7 v$ c2 P" j; H! t5 B(3)设备 A为贵重设备,严格禁止超时使用;
    $ z' \- }+ h4 O3 }+ g1 _1 {' h2 A
    8 J. x9 T# d* t% m# G(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
    $ r/ x% p* X4 s+ f* X4 W2 y3 j. X9 c4 E3 V* J/ b9 @
    建立相应的目标规划模型并求解。$ n% h& \1 Z2 b: d0 h- B& J; [
    # O! _1 [  e0 H1 r; L. K
    解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。 ) n. n; s5 g" z
    9 V& U) q" E' T; q2 b: c) N! e

    2 P' H  i' o+ A' Z5 B) P- g# {
    * W1 ~- Q, e6 Z0 T& ?6 ~序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: 4 P7 v0 |& ~  v9 G0 m9 `7 }
    9 p1 U9 s2 V$ }( [7 \' U' f
    model: - {1 g1 X* v5 i& R6 g
    sets:
    6 |& o0 o) b7 E& Gvariable/1..2/:x;
    5 @/ C/ o- S! A8 ~S_Con_Num/1..4/:g,dplus,dminus;
    : y% n4 x1 B, iS_con(S_Con_Num,Variable):c;
    4 T5 m# P+ F+ a2 Y5 J3 Zendsets & t1 Q. n1 B( O
    data:
    # ]1 t+ P; \" k6 ^+ Q3 o: n1 @" q: ag=1500 0 16 15; # G0 ~1 v/ l: B3 t
    c=200 300 2 -1 4 0 0 5;
    8 Y0 ?. v) M% A1 X7 E4 ^" o+ }enddata
    # X: l8 O5 S2 b/ ~( m; ^* O, rmin=dminus(1); & }" q, j* c/ o) j
    2*x(1)+2*x(2)<12; + u6 ?( G8 K3 M5 V0 _
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); % f! P0 N5 q9 W" C# U' ?
    end* c5 i5 ^3 D: `# y. I( C6 Z6 x
    / W3 S% `" M+ I! @

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

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

    model:
    + h; p: e* ^) Z" o, [; tsets: 9 D" B$ |5 L0 C; d, T% i( P
    variable/1..2/:x; 4 I+ R& A2 A. }$ a
    S_Con_Num/1..4/:g,dplus,dminus;
    $ Q5 J# R0 `3 n) z3 ~6 l, |S_con(S_Con_Num,Variable):c; 4 n- t. D2 U: |6 ]/ w
    endsets ( C) m  _5 o1 V" ?: u% A
    data:
    1 i5 `0 ~2 p% ^" _7 R/ @g=1500 0 16 15;
    2 ]% r8 N7 U: ]/ Kc=200 300 2 -1 4 0 0 5;
    " O3 H$ ~& F1 ~/ u! T  l0 @+ }enddata
    2 l* Y/ {4 K: d' Rmin=dplus(2)+dminus(2);    !二级目标函数;
    ' E5 I2 E8 z8 y) q# [2*x(1)+2*x(2)<12;
    2 C* E# p% U: G0 [* o) p: v3 w# u@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    # H, S: d9 b; Z/ k/ X# o& pdminus(1)=0;!一级目标约束; / m1 R6 N& x3 E2 a' D: U
    @for(variablegin(x));   i" |: S* _* I% h" p, o
    end
    - s& b5 Z, _8 r! Y1 V. G
    5 I, ]4 ]+ d2 t. l0 ]7 A  d/ ?求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
    1 ?- }  L, l0 a
    # j. E3 Q4 i; p. S+ t! y  m$ ymodel: ) T9 H7 s7 X4 @" k- A! s8 `1 ]
    sets: * ~1 v2 |/ m; H: P) G
    variable/1..2/:x; " \& E7 b( x' Y" l
    S_Con_Num/1..4/:g,dplus,dminus;
    ) e. Q0 o6 V8 i. r3 DS_con(S_Con_Num,Variable):c;
    * t( F1 ]& |# D# Z) C) W6 Bendsets
    " B, L+ g, ?& `data: * ]; Z$ U: H& T  u% U. e, J- u1 b6 Y
    g=1500 0 16 15;
    , C% {* B$ z- P3 Uc=200 300 2 -1 4 0 0 5; $ l5 p: z6 k' z0 ?' O% g
    enddata . q9 O$ m. N* k% T0 c. s
    min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; # h7 f, g# p7 {' |+ i
    2*x(1)+2*x(2)<12;
    ) M  R; \8 z3 K' @# S6 E7 ]# [ @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); & n0 f7 B& \& w  H
    dminus(1)=0;!一级目标约束; * Z  ?$ I4 w) F) \
    dplus(2)+dminus(2)=0;!二级目标约束; 3 O7 w* o# |$ ?3 w- Z! s4 O
    end4 y" i7 ?8 [( }9 q

    & @7 }0 X' K. P+ x/ J目标函数的最优值为29,即第三级偏差为29。
    & v% O9 k, D' |$ v/ q% i7 R
    ( I: M* w* c: g3 X4 o% Q- ~$ f分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。4 c; a: c6 r! d% S

    0 D* a3 ]( h9 R  ^+ E8 a上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。' y& `, g6 }, d2 s

    ; K" W; R/ _% e8 u1 J例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。* {* H; T8 W$ L3 S$ {$ L% M6 M/ }- i7 j
    ) e- D; O. Z7 S( @
    model: / V0 U/ q0 r# G/ Y. T8 X
    sets: 1 o0 p5 [% {. a: x" a: g6 f; }# [
    level/1..3/:p,z,goal;
      p1 f8 w1 s; T( Mvariable/1..2/:x;   A5 z3 i  i6 e7 _' J
    h_con_num/1..1/:b; ! A! w$ O, ^+ i3 t6 Y3 i0 S
    s_con_num/1..4/:g,dplus,dminus; : y+ Z' H8 |  P
    h_con(h_con_num,variable):a;
    / K2 n" f& R2 N& T  W  Rs_con(s_con_num,variable):c; , w5 d) ~  i+ ?& n% V+ T
    obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
    # K, ]; [* f& a: _9 kendsets
    4 R/ n4 o( S0 ?data:
    + }% c; A0 }9 O. G$ y9 c# b+ ?/ pctr=?;
    , }  b  O% u, Q) V8 d" P8 xgoal=? ? 0; ; t1 l4 P. I& s$ J5 X
    b=12;
    # `1 w7 p8 d2 v9 H  Ag=1500 0 16 15; & h3 L% C" [3 P* t8 z2 s' O& ?! ]
    a=2 2;
    + F5 k0 l" |& qc=200 300 2 -1 4 0 0 5;
    7 |3 e5 D, a1 R* g+ \/ Awplus=0 1 3 1; $ Z# q6 u. R3 s1 z, O' P/ D
    wminus=1 1 3 0;
    6 G# Q% Z( G" W2 M. u  w- n! Wenddata . Z( G5 {* N9 T
    min=@sum(level:p*z);
    ' H" [' N6 k9 V& G: [- a2 r4 Vp(ctr)=1; - Z/ J) ?6 }  C
    @for(level(i)|i#ne#ctr:p(i)=0);
    0 `" r, B3 q: j9 i- B@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 E6 e8 a! z$ a' e4 ~end 6 j6 z5 W2 s+ v

    & X0 t/ K0 f# o  J3 a- m0 u3 S: G! e- X+ @  @8 |  D

    , S* y3 B! [( v! V1 G" i; \! u8 O" q( A: E) f/ \* U

    1 p6 @) B* i, \" N, _/ @, J1 w4  多标规划的 Matlab 解法

    多目标规划可以归结为

    . n1 r% J% _( Y

    0 f2 H% u# _! g5 L2 g
    7 T3 p, _$ D0 v8 P) s& p& o[x,fval]= fgoalattain('fun',x0,goal,weight)           . T2 K, V1 M, W9 k# H; W
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           ( a% s: L# N' T" p( l- X. ?4 `# A
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           7 v# i0 o, t- D" y+ H
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) " P& w, q( {5 a2 f1 n! ?' k

    $ b9 Z9 x- M- g  F% }  y/ E1 w9 V+ H
    要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。% X# \0 V2 w* ^! n
    例 5  求解多目标线性规划问题 $ O" z& V3 A1 T) N
    1 B2 n0 D: |- a; Y' W$ S' h

    ; e" p3 ^0 u9 s* o. A+ {' Z$ Z7 |) I( x  K% }8 ~
    解  (i)编写 M 函数 Fun.m: * T4 O% _$ H. _4 q$ K
    2 J& @% E5 o  Q* Z; G6 Q% m
    function F=Fun(x); # U' \: I/ Z: e- ], z  u+ i- c
    7 C; b" E5 R" e8 g9 d) q
    F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
    # b5 @; C. |! f8 u$ _% j2 g$ O7 _( i6 Z- ?6 c1 q% j
    F(2)=3*x(2)+2*x(4); 5 I: S( V; {; c- Q
    / }! z" \: u7 c% b' T! |( |! J
    (ii)编写 M 文件
    + P9 c3 _5 a4 d" F6 l& x
    * w8 t8 t- d' P# k/ `' _a=[-1 -1  0  0   
    & l9 R- T- C, ^- j. c3 n- T" D   0  0  -1 -1   
    / A1 W8 Y2 E$ ]   3  0   2  0    . ]: X' U2 s6 }1 n4 Y- g: @" s
       0  3   0  2]; 7 r9 _* ^0 S, k$ Z# j$ X
    b=[-30 -30 120 48]'; 8 M+ g( W7 f. Y3 B$ y
    c1=[-100 -90 -80 -70];
      b( \: G9 j7 T: |1 Q7 D  ]c2=[0 3 0 2]; - V$ Z* h: ^+ w7 q6 t2 }# J( ^- [; E
    [x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值 + g' q9 a2 {9 |; O" ~/ S1 e( V
    [x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值
    - P1 V0 Y( z' |% qg3=[g1;g2]  %目标goal的值 " }. e/ L# R' J8 t
    [x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) & q( V1 p1 D1 ?
    %这里权重weight=目标goal的绝对值 - K6 v: O1 r6 J, j% E

    : a1 n- I; z# T9 j& _3 B# p% u2 {

    就可求得问题的解。

    习题
    4 R% L$ p# U, N+ h7 D7 s+ }& n$ v, X

    ( Z- {% ]$ c( E, u, l; b+ l————————————————
    7 i, o4 v& D% f% C+ Q9 o3 U版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    8 o) n, K& g1 H2 h/ D0 C: [原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932
    3 }* ^$ W7 ~1 d; v. E3 t8 p2 _% n& S( U6 ^  U2 G

    ) g# {! A1 H( m, R2 c4 A; E
    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-14 18:57 , Processed in 0.438984 second(s), 51 queries .

    回顶部