QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1935|回复: 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.线性规划的局限性
    , i7 V0 O8 R! E- {, x. I% E5 p只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。5 W' k5 L9 E' T2 l7 |/ o7 W

    ( j* _. c1 s: {( P4 S 2.实际决策中,衡量方案优劣考虑多个目标% p2 U2 Y( B+ y1 Z3 }. p1 ?
    这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
    4 ]+ B& Y9 K  A0 t6 z* I" g
    ( M& S# {, h: Y) \3 m' S9 B3.目标规划(Goal Programming)
    9 i$ r/ \- H$ P# p4 u- v美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。0 X2 n) e, W: a+ L$ a* q
    6 H  {% r. Z( ^( G4 E" M
    4.求解思路3 V" ?: E" H( U  g
    (1)加权系数法, c3 s$ e* [# v, S
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。* u3 R) j% O9 y9 }( t7 C& p

    % d6 e7 o$ Z4 L7 G4 a/ X(2)优先等级法
    2 ~6 m# d4 N! Y将各目标按其重要程度不同的优先等级,转化为单目标模型。
    $ V0 D7 t) v9 H8 ?% i: a" x  G: g" C0 l1 v7 {- H
    (3)有效解法
    - A- r! ]! O0 Y% q- I/ p2 e寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。 7 `/ b8 m4 h8 e1 s8 t. W/ Q

      }8 S: }2 c$ ~4 E& k5 P2  目标规划的数学模型+ E* ]# P+ A! V3 {. c% d& h
    为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。
    ) x2 u7 B) t/ z- e5 Y
    $ C. G5 e% J& ^8 U) _& I例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。1 K$ m4 n+ X8 |! Z
    9 J( `8 w- p& J0 m: M/ }
    + \5 D* w0 ^6 Q& K
    " u2 h! W' w; ?8 r: }" C: S
    解  这是一个单目标的规划问题,用线性规划模型表述为: $ k2 W1 \9 R/ `, L( a

    : O4 R. O+ v( T+ i; l' j  q. `
    ' \% u! R$ Q( l+ o
      ^6 \) `- s  c4 s' j- m但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如3 ^4 B" b* J1 e! C1 R# E1 Z
    $ X/ k+ _/ d" [+ Y
    (i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
    , U; ^; n' D: x8 v, o. D& T, @* I" b# h
    (ii)超过计划供应的原材料,需要高价采购,这就使成本增加。
    0 m$ V6 `$ T, e9 v
    / l% d: J' _2 T. ~6 ](iii)应尽可能充分利用设备,但不希望加班。 2 B  o( K* ]- N% e& Y

    8 V! o% W% W! T" _(iv)应尽可能达到并超过计划利润指标 56 元。0 c& o. O7 T2 o1 Q4 R0 n. S

    , l+ @; ^# l5 n' M# s+ \- [这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
    5 W) M9 X0 V" r% h( v# }; g8 q' K
    7 w; l7 m9 m; w6 N; |1. 正、负偏差变量
    / ~8 F8 @- T* j
      T1 n1 M$ U' O4 Z. c: x) ]
    - j5 p" v7 N' {! x: u* ?" F/ T& q& ?8 i9 p1 e$ t
    2. 绝对(刚性)约束和目标约束 9 B" d* V. y( X" c
    - q6 t0 W5 t$ a% V) ]8 X  d

    * M6 [" `  Y6 b% [+ |, \
    , D1 P# u  {. y0 l- P) s3. 优先因子(优先等级)与权系数
    . R; X" Z/ x! G# d, Q- ^  [- W5 S/ z. b& _) b9 L5 D, |' r! T

    , I7 L1 B5 D3 S# ]
    # `' |" G! h. W: J* O' R5 S- W
    7 k* H6 [7 E+ @. _  R0 Q8 l4. 目标规划的目标函数 # k* S' k( a" c; @

    / S- }# a) _: [' c/ E, Y
    0 a" b. }8 F9 [$ L, X3 Z3 f6 u! b0 S7 ]+ ?& M% b
    对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。
    5 [4 r1 t' P1 h0 i  O2 g/ b: T4 g2 ]4 Q1 F8 u
    例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  : K* y( x" Q" _4 d
    5 v% D1 U9 `. p2 n: Z

    $ U0 {- b1 P( |! o- H9 U! h  ]+ u; D4 `0 e# M
    5.目标规划的一般数学模型
    2 C5 b: p' g- o$ _/ l6 I' z0 L6 Q) ]$ h
    6 r" ^: S  Q4 e& C

    7 w' r. u# V, P& p. k+ t5 \4 a, |( b& Y4 u4 I" @
    建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
    $ {  l# l: t4 F) `
    6 f2 C4 q+ y& Y$ J3  求解目标规划的序贯式算法
    ; s; l3 M8 n% i7 x8 h% E6 R, n序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。 7 a( A( y7 M) _1 R/ A! m

    : c: w( h0 w9 a4 i! g
    # Z1 ]3 w5 a& }3 b5 R
    - U) i" H: x8 T% M2 W) j: _- _" X0 ^- |) N
    1 ]- s8 b5 ^$ c" s, n3 O" R
    注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
    + ]$ O) E! ?# O+ i% `* \1 n# T8 K  d
    例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:7 R5 V% T; U1 s$ h; ^! \) R! v; j

    2 N1 F& @% g% t
    ; f7 n/ @1 x# j% I
    ( N5 W  K7 n7 V(1)力求使利润指标不低于 1500 元;
    1 k! D7 m3 d5 L: C7 K5 l. u3 r* V" d
    4 B! F3 r% J- F(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;2 `  }/ }; w4 n  h

    ' \% S6 C/ L2 e: O(3)设备 A为贵重设备,严格禁止超时使用;4 [0 ?$ ?' b, j
    ; |8 f: O' w! s3 q
    (4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。5 a# }# [: `/ }# O' M( X+ R
    * V& V; g" N* ^8 b- _. \5 O& |
    建立相应的目标规划模型并求解。+ M! e8 u9 e$ s4 d3 r

    ! }- i: ]/ N1 h( u解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。
    & w: z+ P3 I" u7 S( p2 Q" C
    2 S% N# x4 J& T& F5 ?5 }( t/ H; b  H& B" N# A' m4 Q. C
    ! Z0 A8 |# Z6 w
    序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: * w- i  R3 ]8 D% d; B! O" Z
    7 @/ A' T  w4 _  d# t
    model:
    6 G7 k) x7 O' {' B: h: [sets:
    1 ?8 U0 C: p  Z7 y& k+ pvariable/1..2/:x; & f5 f5 n9 t! L8 l* z% Z, [0 v
    S_Con_Num/1..4/:g,dplus,dminus; 6 S# W# @& H& U- h9 L
    S_con(S_Con_Num,Variable):c;
    ' s7 G' M" d% g0 D4 m2 Rendsets % P; s+ k: l# A3 \( @1 }% F0 h
    data:
    ( L9 t5 L) }3 mg=1500 0 16 15; + X/ k$ N# a  x, p8 c  U
    c=200 300 2 -1 4 0 0 5; ' _1 o+ P+ o, [; j
    enddata ' o& t& f' S: w. ~/ y
    min=dminus(1);
    4 `* v; J( a9 ^/ h2*x(1)+2*x(2)<12;
    4 \3 ~# p3 u& p4 M- F@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); " s/ l) K# o$ f% `# g
    end" Y1 Y+ G. @" I8 p6 L/ C: e' S

    2 P, g8 E. i) S9 }2 a2 t

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

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

    model: ! M' ~9 i. C3 ~) X* ~' c
    sets:
    4 C9 ^) g; y4 `' \: t" J5 mvariable/1..2/:x;
    . U" r9 X$ w0 SS_Con_Num/1..4/:g,dplus,dminus; 5 X' {4 w$ l+ W- C' \% d. Z
    S_con(S_Con_Num,Variable):c;
    4 X, J  M/ @- W2 Z* ?/ kendsets / {8 D# J* z* \' m' v7 \
    data:
    " R; s# i1 Z5 K7 Vg=1500 0 16 15;
    ! k' k0 i% W! S, O2 ?  pc=200 300 2 -1 4 0 0 5; ' m, k+ O# @5 e% {! G7 a3 o; Z
    enddata 7 I4 r1 ~, W% _* a% ^: }
    min=dplus(2)+dminus(2);    !二级目标函数;
    " C: i; ~$ a$ C9 X$ g3 E% q$ [) C2*x(1)+2*x(2)<12; - K' L( O, u8 g" W. l7 _
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    ( }; i* B! _4 o1 Hdminus(1)=0;!一级目标约束;
    9 k( ]( \" w3 l2 g4 {2 a  @; f@for(variablegin(x));
      Z& T1 y' m  Pend 7 D0 l4 o) ^' x1 r  m5 k
    + J3 R2 G4 w  f+ z
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下: 7 d% V  S5 u. z# I5 q2 K$ o7 P7 `

    7 ]. E3 I+ F  Smodel: / S, i  h  G2 [
    sets: & E3 z' ?8 ?$ |
    variable/1..2/:x;
    ' p, j9 u+ j" {4 f  e% w0 H" HS_Con_Num/1..4/:g,dplus,dminus; ; [/ R/ w% c' J3 A* k
    S_con(S_Con_Num,Variable):c;   e& }' I6 q! b! g9 Z- |, W( j; S
    endsets
    $ E7 G2 p2 P  R0 E' x. zdata: 6 \( F0 i. g: \. C3 |
    g=1500 0 16 15;
    2 z$ \6 a8 a5 a) Z) @5 l+ vc=200 300 2 -1 4 0 0 5; : Z& y4 d5 d! ]
    enddata
    . h: z3 A9 H- M8 B9 Rmin=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; 2 ?. W# g- H  B. n7 E& I1 q0 L
    2*x(1)+2*x(2)<12;+ C7 r9 t7 N& W% x  v+ b( _# l
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); : N! t2 x1 q+ ~6 f5 b7 \; ?; G
    dminus(1)=0;!一级目标约束;
    ) K9 l( g' c* _, \: O" {" n/ Xdplus(2)+dminus(2)=0;!二级目标约束;
    4 s/ x0 Q+ m, O, Q+ |& Hend
    * K- |, q, N; e  m/ r  b! S9 E9 N: T! k  a) s& [, G- H  U& P
    目标函数的最优值为29,即第三级偏差为29。 & Z$ n, U+ x- E; _8 q

    + Q: l1 m) v3 V# j分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。' @$ s8 f5 h& \2 O: L" q
    " o& r& j$ {6 r! z! ?# k3 c0 l; _) V
    上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
    4 k& K  L. [: U" i/ M9 F7 b" h9 u. n; i# ?8 U
    例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。
    ) J8 g4 B+ G' [3 X- ~- C
    * @0 z, z$ N( S0 O6 s# q4 w: Jmodel:
    7 Q0 m  S4 S. p6 Qsets:
    ; {1 O* {6 A, y8 Nlevel/1..3/:p,z,goal; / t) e0 n# Q& `0 k  D  y  ~- H: J
    variable/1..2/:x; / T% J1 k/ s. R( u3 M' w, p) w1 L
    h_con_num/1..1/:b; # m0 G5 c  y6 a7 U" P$ N
    s_con_num/1..4/:g,dplus,dminus; - Y6 _( R$ }, S  f
    h_con(h_con_num,variable):a; 2 F! ?9 Z. L, k* b
    s_con(s_con_num,variable):c;
    - b7 M9 t2 z( d: [# v+ ]- ]obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
    3 {; q7 n3 e( V7 @- b3 oendsets
    + J: [0 q; o0 T( N5 `$ r" v: @data: : J/ H% [  ?" P  D
    ctr=?; % D( c8 B/ m+ P
    goal=? ? 0;   K# ~# l1 @8 h) F
    b=12;
    8 _& i( Z0 E; L) _) [$ b- a; @* ug=1500 0 16 15;
    : Q( t& a& u$ W% K+ v- a- ~a=2 2; / q0 r$ i/ Y( h* d
    c=200 300 2 -1 4 0 0 5; * W3 H1 b0 w0 ?+ l: `* c
    wplus=0 1 3 1; - h9 }7 F) [% r
    wminus=1 1 3 0; 5 J; w2 `4 M- S# Q: `
    enddata ( M4 P4 I6 D# _1 m* u
    min=@sum(level:p*z);
    " A; I- o3 w3 S, Z. V' q2 m' _p(ctr)=1;
    2 b6 `6 S& ?; H$ w- z; n; a, o@for(level(i)|i#ne#ctr:p(i)=0);
    2 `, z5 D3 {; ~" p0 g5 i8 H@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)));
    7 n# w8 x  n  {# Eend 2 f  R; x4 b* |* n& W* Y

    . ~7 c' t& O7 P' i9 G" d2 o% G8 _$ W/ e9 s& ~$ g% G( Q; B

    & o! }4 \( {- n1 z0 x% u! J- r, P* ^% W- w/ B3 l( n! r
    & J, g$ U3 Y9 _8 `6 V% w
    4  多标规划的 Matlab 解法

    多目标规划可以归结为


    8 U; x( `; l, W2 P1 p3 m9 y+ B. }, g8 j2 N: z  E: f
    ' I* f7 A0 J* a: |, J( Y1 h! R
    [x,fval]= fgoalattain('fun',x0,goal,weight)           ! m5 z( e, m. K( R. S
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           - `  i1 T4 s  q  M
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    # G5 P- x. n- |! J7 B6 {$ T: D[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
    - l4 ^0 T6 U8 p+ M% C$ j  [- b9 S% Z. o6 }# ?  `

    $ F3 U& V$ `* e, z要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。" Q( f5 g8 U9 h; {3 w& v
    例 5  求解多目标线性规划问题 & I0 w7 ?' D4 {- w( U" i* h

    / U% _- Z  C$ ?# \7 m9 M2 G, Y) x0 `! L9 M) r8 v6 O* B

    $ Y9 m2 u$ }5 b3 ~解  (i)编写 M 函数 Fun.m:
    6 A6 U2 H* {; R, |* ~# ]4 j
    7 A) A7 i$ p( {4 ?0 dfunction F=Fun(x);
    1 m7 |: N; E' S% r$ y) a0 i5 Y1 g* D) F8 P' P' G  U" W: q
    F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
    8 Z) r. ]# s" m/ ?, o4 \* J
    , ]3 I3 H+ Z# C" w6 ^7 c. [' f3 uF(2)=3*x(2)+2*x(4); . d0 J8 W3 @& S7 m1 O  O" C

    0 \/ X2 N5 V3 @, j2 f2 j7 i(ii)编写 M 文件
    + Q. l7 ]& U# q* C$ P
    # ]9 q3 {0 G* k) |4 ha=[-1 -1  0  0    * [- E7 B& E% n8 s1 a6 h2 D$ A* w
       0  0  -1 -1   
    ! W# |4 D' w( w0 J! k   3  0   2  0    6 U9 _$ J6 E8 J: I  b4 i+ g9 y  p
       0  3   0  2];
    0 \1 A/ t/ [1 p. nb=[-30 -30 120 48]'; / _0 b- K% \$ Z# {
    c1=[-100 -90 -80 -70];
    9 A! M7 k# J4 Cc2=[0 3 0 2];
    * O) N+ g7 R0 }/ @[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
    3 _5 a' U# }. y3 }; X: {[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 - e3 M8 @5 p" b* R5 F3 A
    g3=[g1;g2]  %目标goal的值
    : H0 @9 |' t/ m' b. e6 m[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1))
    / J) D, l1 s+ a$ A5 N%这里权重weight=目标goal的绝对值
    " o$ q" ~) D* r* Y* f0 s* x2 Q8 q" t! u8 t- ?! X

    就可求得问题的解。

    习题8 o; O) F  b4 F" c/ E- w: E

    7 y/ H+ |- H- {- U" s. `, N! j9 i1 y3 u+ L7 y4 l8 n
    ————————————————
    4 X0 V3 u- \- Q6 G/ F版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    + y5 K4 ?% P) S/ B原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932; x  t$ W0 W) J% S. q; j9 Y

    # P! m5 U/ v$ L  v# p
    # T  K) N" _! V
    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, 2025-5-30 21:02 , Processed in 0.794266 second(s), 50 queries .

    回顶部