QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1237|回复: 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.线性规划的局限性
    / h" J/ p$ r. t( c6 ]只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。. Y* I# w# y6 Z

    / U' z4 L" y# Y 2.实际决策中,衡量方案优劣考虑多个目标
    * p3 ?" x1 n# S$ q2 c1 C这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
    5 e- ]) V4 g. Y* v* a# B/ t/ }% l) ]# [  u) g% M0 h& d
    3.目标规划(Goal Programming)
    + T- ^. l1 N5 K8 h3 C0 z( F! c美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
    : p! N1 ^* \: c8 M7 W6 n5 l6 ~% K4 ~' f* }- ]4 H, l, q
    4.求解思路) ?0 U- c: Y# f1 b( G: R1 Q* Z: U( w
    (1)加权系数法
    * @. o2 B! G9 \8 S6 q为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。
    ) L8 C' A; a) \* b
    ( L& A# z5 x! @. |* l0 B, s! C(2)优先等级法, m9 Q/ e1 |8 M/ i& [' |! `: `/ o
    将各目标按其重要程度不同的优先等级,转化为单目标模型。
    : h! S2 e: B$ I' h% P8 @$ t( b; D. j% B# H) A# a
    (3)有效解法& o# d) T. \8 q8 {) q+ X
    寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。 / e1 G! n+ K0 p) D& w

    - Q% G" `: T  h5 v2  目标规划的数学模型
    " o/ o7 W9 n8 K' Q2 R9 k" R! ?为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。8 }1 p$ c  w6 D6 S+ n/ ~9 J4 v

    ; O9 p( ^6 Z8 C& s2 w4 F例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。% g7 I8 L6 o. c. m  Z/ F, V

    ) J6 O' b% `1 P( E$ j+ o/ K( o
    0 k$ ]" d% i$ s0 u$ F( G& q2 v
    解  这是一个单目标的规划问题,用线性规划模型表述为: 1 [5 e+ n5 m- `) l$ s  }, L

    ; i( }2 f  b. ^2 @6 A' r3 o1 @- v) v$ |3 o: ]8 z+ Z# u

    6 p- i+ }5 ?& c/ o2 V6 P但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
    6 ]. @$ ?$ B# j3 j, o% u# }; D" {& J3 ^
    (i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
    7 f- \1 C2 Y# j- f! d; g( u# ^+ C$ n' w9 y. D9 v
    (ii)超过计划供应的原材料,需要高价采购,这就使成本增加。
    ( F6 U0 T* d3 `0 G- Q" Y
    8 _) C, B& }* j(iii)应尽可能充分利用设备,但不希望加班。
    2 |4 |- V! E$ c+ X4 [# c( C. C. w, }; J1 X' P9 u
    (iv)应尽可能达到并超过计划利润指标 56 元。
    & P7 s; u0 X& J4 N/ N: e
    $ c% H% ~1 }+ f/ r这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。 7 N& m9 C! \- W) \: d

    7 R" S8 }8 M. z" }1. 正、负偏差变量 . e. ?5 C8 u3 q% F* W3 V4 o9 x2 O
    ) w2 o4 v1 q( y1 [- P; R
      O1 ?7 @0 L4 H/ j# x
    + ?* O  Y1 L6 I! q* U7 E
    2. 绝对(刚性)约束和目标约束
    " s- w1 C/ |9 A+ C2 Z1 ?3 ?9 v0 y; F  {, Y3 q; y) t

    , u5 S4 E0 `( a7 E& ?4 a0 s4 @$ U9 g( {4 q% E7 h) T
    3. 优先因子(优先等级)与权系数
    1 `4 ]! E% X4 N1 {4 o* j' ]9 m
    9 x. i. x% t8 R( O" v0 x& N( [
    8 g4 ?' D2 Q' ]9 K2 _$ ?
    4 i) A. D. b1 U# }  K; q6 Z8 v. ?9 S% R- D; p
    4. 目标规划的目标函数
    * p; {. _" y7 L4 I  M+ Y  D8 v4 ]" E
    4 Y: X1 p0 Z4 ~1 R. c

    $ q$ `$ n! o$ P3 O# @$ q' {9 c; j对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 ' g# ?, D5 d& a( H

    0 K* Z6 f- z9 W, l/ Q+ F例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  
    7 y0 M2 L9 {1 q9 h
    2 Z/ H) V0 a( v1 S/ S* H0 @0 Y$ J) H7 W& S  t; l7 j) a
    9 X/ @7 G+ D& w4 ?
    5.目标规划的一般数学模型
    7 l$ C/ s8 k+ ?# K1 b, x3 B
    # d. h. x3 D7 e- C+ E, b
    ( L# e  T5 E# b' H/ w4 o. d, q2 S4 N- R
    , S3 v& m, `  m* G! F* [
    建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。 / G* u; k; p. O+ G0 ]$ c4 |& k

    9 ~/ H6 }: J- U+ Y3  求解目标规划的序贯式算法
    8 x+ t, ?" G% `: s$ ]/ B+ p+ i序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
    - `7 `; {4 \/ i& H2 N$ Y
    + w5 A# G' g# Y7 z- c. o2 _
    8 ~0 u. v1 |+ @0 e" r$ R# [& ]- E- `: b# Q6 P% c- S2 }6 Y1 i
    / `6 }4 C: {' w! H- _% Y* A

    ) [, I( L5 g- S3 W注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
    3 F* r- G: U' V" J7 c
    7 p" O: S# l7 K5 H+ a% Q例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:
    # H( a, y. y3 D0 V, @; l1 T+ a8 k1 q2 ~9 b0 l! ]3 U$ b. {
    ! t' Z9 j  o# _& O* T: H: P( U- P0 j

    ; u# G. r) [( [, R  I(1)力求使利润指标不低于 1500 元;0 T; \5 N8 {6 y

    8 V+ u0 }; |& H# \( ^% R, l(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;
    $ i, I! V1 R3 I) n% J' Y0 G
    " u: o) Q4 S1 u' ~. B(3)设备 A为贵重设备,严格禁止超时使用;) F* `; s1 `) F/ r7 U( y$ i' f2 K

    ! W7 B# r. m8 o. }8 x, J) W(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。5 H4 ]% e  H1 v0 ~# n. {6 L/ w6 J% N

    - P/ O  }! d% d- d5 B3 P4 r1 W2 G建立相应的目标规划模型并求解。
    1 X  D4 z# b8 |: _' h7 L# d$ c- Z2 ~3 w# s* E$ ]
    解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。
    % j2 N, W+ T* y" l4 \
    . r$ I2 t5 i0 i! J& r4 N/ Y
    ) Z6 @6 i) a- P0 M5 ]+ d- G7 _+ B% @4 ]& O+ c, ~7 m- w" a  R
    序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下:
    : F! C2 @9 i6 a$ F- o: B- e5 E% l  x& k; ?% k# A8 R! F7 _
    model: + R: L  o; J3 N" r
    sets: $ L+ I" w2 G/ ^7 K
    variable/1..2/:x; ) f3 W1 e. z7 e( {+ B5 Q; G) F3 Q8 `
    S_Con_Num/1..4/:g,dplus,dminus; ' o, d2 H' T+ g& s+ M3 c$ ^' c& d
    S_con(S_Con_Num,Variable):c;
    3 m+ R' M1 ?, i+ Tendsets 1 A8 [* P, S, P$ C; N: M0 |1 Q: ~' w
    data: 2 q$ k! E8 s+ [) c
    g=1500 0 16 15; 5 |/ Z. _5 g( y; f5 ]
    c=200 300 2 -1 4 0 0 5; 8 U6 _( P% p6 Z
    enddata
    5 t5 N- w6 `# X* ?- ^1 @min=dminus(1); 8 j& ~# k; K* D1 B* l; D% u
    2*x(1)+2*x(2)<12; 5 {! o1 x1 h' X. ?* i/ P3 I9 M
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    / T+ w0 e+ ]2 q/ M$ t' o$ \5 [end
    2 G3 Y1 s1 C8 X( g+ y
    $ l% F/ `, f1 l6 T

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

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

    model: ( u$ v( t, ?$ j
    sets: ( C6 A8 ?% n; y* i+ e- p
    variable/1..2/:x; ( C0 \& D5 N! x/ K, e. U+ e  z6 d8 L
    S_Con_Num/1..4/:g,dplus,dminus;
    + }' D% `8 K# M5 C2 T7 v6 bS_con(S_Con_Num,Variable):c; 9 f# o9 Q5 c; Z
    endsets
    + J. t, \$ V8 b1 B( w# p, Mdata: # l* r! D" o0 s
    g=1500 0 16 15; ; P# \& g6 C5 g1 j
    c=200 300 2 -1 4 0 0 5; * u9 g6 I2 M2 z7 S' l/ d  K8 c
    enddata
    1 R; Y7 B1 E* T0 D1 p2 ^min=dplus(2)+dminus(2);    !二级目标函数; # m$ `, L% L+ O$ d) i
    2*x(1)+2*x(2)<12; ! G2 ?, C5 \' W
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); - F! o6 U- L9 i' }% D
    dminus(1)=0;!一级目标约束;
    / E4 Y3 F: v% }4 T. f8 B. [. n@for(variablegin(x)); ) K2 a7 V: {$ K: m' k1 @
    end
    1 P+ T) e0 g, T4 K
    - N  @7 u0 `+ F9 a6 |求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
    ' W, A1 a% H3 q1 E: U/ `3 N
    ' g4 Y5 f: m* M# S: {  _  `  S6 u4 emodel: 4 U" V/ k' v# P0 u1 M
    sets: 0 u8 X: O) O: f
    variable/1..2/:x;
    , P; y8 V' P; p2 s; S) IS_Con_Num/1..4/:g,dplus,dminus; & w+ c. d0 o* K' j" N* A! d1 Z
    S_con(S_Con_Num,Variable):c;
    ) K4 ?# w# N( _% O( Vendsets
    . ]' p' K$ G# S/ o) Jdata:
    ; n+ c/ S& {* {( W6 _; d; x& lg=1500 0 16 15; & f7 f. F- e" w# e1 `
    c=200 300 2 -1 4 0 0 5; ) g4 [/ M% B- F! e" N4 [
    enddata
    " o3 d# U+ n& A: N7 P4 emin=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; ) A8 d9 H8 [  C+ q9 _
    2*x(1)+2*x(2)<12;9 ]% a2 {8 \$ }* I9 A0 m
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    ' h: \9 c! |' C1 C' x# t7 |dminus(1)=0;!一级目标约束; 0 K9 N, h  |3 t2 }3 s8 u% ]+ w
    dplus(2)+dminus(2)=0;!二级目标约束;
    6 z1 `8 j. q2 a7 d$ f2 Q  Y4 T8 ]end, B- \% Y( A* @# Y4 W+ c& x! K% h# a. z
    8 J/ h7 ^8 W3 ~: l- A/ u: ]: Z/ v' u
    目标函数的最优值为29,即第三级偏差为29。 , y. m  p/ H( P& X4 ]

    0 P$ _/ t' I( I3 s分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。& q- `2 v# ?2 d" t: @
    / [* }  p/ W6 b! H
    上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。& [, N' v4 K! a) e) m

    : X7 Z+ O. |! d' K& C% U# c7 ]1 g8 J例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。
    / O! v  G+ s1 v2 N7 {* b" A9 C+ O+ E2 [2 X) H
    model:
    ( l# D" U0 ]# d% l; n* e: }* }0 ksets:
    ( P( N+ r; u+ r: B/ G; Vlevel/1..3/:p,z,goal;
    + p# b' h" A4 H9 P& D& C+ yvariable/1..2/:x; - s/ ?8 M5 w& n
    h_con_num/1..1/:b; % C) u1 O* J( d% J- N! t: o! c
    s_con_num/1..4/:g,dplus,dminus;
    + `/ D- t" b# C1 T. U& G% U$ nh_con(h_con_num,variable):a; . y& b5 q) S0 v' k/ e
    s_con(s_con_num,variable):c;
    ! }+ ?  c( O6 K7 X8 @+ Dobj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus; 8 O% E: p# ^* y# V/ T4 X* }3 Z
    endsets
    1 N5 A0 K+ h5 T4 ?6 hdata:
    ! R- S2 g; Y. Wctr=?; / H2 R) f) D0 b, \) N% M* Z0 V
    goal=? ? 0;
    # e& x' G& z( [3 x* B! \b=12;
    + r( j7 U3 J4 Tg=1500 0 16 15;
    7 e; C% J+ V/ a* B( D4 S+ T8 J7 ga=2 2; & ^) P9 o% @( O; h
    c=200 300 2 -1 4 0 0 5; 4 G6 X4 f. u" A1 F9 u
    wplus=0 1 3 1;   d. Y9 L9 t  v; ?
    wminus=1 1 3 0; 3 z! j- J+ L1 d6 l( o/ G
    enddata 1 l& R; Y6 z% O& ^
    min=@sum(level:p*z); 6 o: w5 w3 q( V; w! ]' ~3 h( l
    p(ctr)=1;
    5 v) |9 z3 `) _3 R@for(level(i)|i#ne#ctr:p(i)=0); : W8 u3 \, e6 t0 W. u% V* p
    @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 p* [0 |8 C( g; c/ Y
    end
    % k9 h: Z- N/ r6 Z) p- u
    " m  I/ p3 l, R/ a
    1 ?0 W6 y: u: n* [
    2 J( g+ i+ Q+ }6 B& W
    : S# C; Y- ^, f7 X: E* m: q9 B& q9 _9 X; V4 C5 n- G4 s3 F
    4  多标规划的 Matlab 解法

    多目标规划可以归结为


    7 d7 \6 Y9 _; N* l7 g# V! Q6 M& e+ U
    1 i/ r2 a+ r3 m6 e4 @: ]
    [x,fval]= fgoalattain('fun',x0,goal,weight)           , t+ m8 o) e$ {/ [
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           
    * E3 ^* x( L1 O0 ]$ _- |[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    5 k1 P' I9 @) |6 T[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)   D! V! e0 E; \$ F! J1 j1 H8 d
    ( t/ }0 r1 ~; s; u9 x

    8 g& |* l/ K3 J& H要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
    : a2 j6 C0 @" {9 g' e' O 例 5  求解多目标线性规划问题 + z7 u: a3 l: Z$ r2 Q9 h

    5 D# l5 _- R4 M0 c/ Y6 b2 T! _( M$ d( I8 V4 U$ P

    6 L. q) h4 K1 v" I9 o8 d8 [解  (i)编写 M 函数 Fun.m:
    ( y( \$ k" Z+ t" U  p
    4 j5 t3 {( }( H/ o6 x+ Qfunction F=Fun(x);
    ) e1 d* ?3 p( Z& Q: G+ w) q" r1 b$ m& K0 n. T
    F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
    6 J/ d6 a$ e; G  P2 g" `) ~0 G
    2 ~; \" q+ ^6 H% \( ^0 ^5 T8 TF(2)=3*x(2)+2*x(4); / W8 q7 k+ B2 k5 A! E

    3 g7 n. ?* m6 H' M0 c(ii)编写 M 文件 5 O; i6 t& W# V' e! x

    8 J: ?2 q5 X9 Ga=[-1 -1  0  0    8 a# Z7 K) P' Z! p' v
       0  0  -1 -1    & j  L+ s% j4 f, E! ^" M
       3  0   2  0    ! M3 [2 M& h1 n- p. }7 k1 s
       0  3   0  2]; 7 D% J5 X  T5 S/ @$ R5 J+ ]
    b=[-30 -30 120 48]';
    & {$ i6 P+ H+ dc1=[-100 -90 -80 -70];
    9 J3 z% i; L* q9 z2 G2 L. Pc2=[0 3 0 2];
    4 t+ {$ z- r. p9 Z1 O4 I+ X[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值 / E! ]! e, C) s0 t" i( E/ z$ k3 \
    [x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值
    9 R8 H% `2 ?) W7 Y# }3 ~+ V) bg3=[g1;g2]  %目标goal的值
    - u5 _% L  q9 T8 e9 e! i9 W/ o. O1 m[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) " y7 C, z' t$ x
    %这里权重weight=目标goal的绝对值 ; v  E, S1 z1 o4 e9 n4 T7 s) a1 Q
    & b: @4 ^- X( S7 @2 R2 v

    就可求得问题的解。

    习题
    " m, d3 f6 c' ^9 k% m
    8 K6 V+ F$ Y: v  i! h
    - q# q+ \. l/ g& ?8 k————————————————: p/ d" Z" Y4 s' s" S4 |7 j9 Q# Z
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    - U+ {  f. h. A% A/ O; ~/ n; l原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932$ }0 s# q' l& i4 q! p

    & c# |7 Q7 x: p( [4 w
    8 T  T' [0 m# J. {# E: C4 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, 2024-6-19 03:51 , Processed in 0.445273 second(s), 50 queries .

    回顶部