QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 1938|回复: 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.线性规划的局限性1 @- s1 h7 E( V8 R2 m; E
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。  V. F$ M; _7 X1 X2 z- Q
    + v5 g2 m1 }* G& q( q/ l- i
    2.实际决策中,衡量方案优劣考虑多个目标8 T& V7 ^3 k( E# y7 R: i) P, o
    这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。; t( Q. V7 ^- N
    1 H: t4 I% c/ x$ O2 k6 @2 r$ N
    3.目标规划(Goal Programming)
    3 Y( N3 o# u6 b8 i1 A美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
    ! W! Q, ^$ [% s. t1 T3 @$ Q/ ?; `" F( {9 `
    4.求解思路: U* P6 F+ o/ d. k
    (1)加权系数法" \; H; ]; W+ y% W
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。5 U+ o* N. Y6 i2 i4 t

    - n% _& u7 X# s( h$ D! A; o(2)优先等级法# I5 @" m/ K& n( ]) F* \/ I
    将各目标按其重要程度不同的优先等级,转化为单目标模型。
    0 m2 R& O$ `0 J) D1 t) K
    0 u* B! S6 u. J& n2 R- L% ](3)有效解法
    & ^8 q; |. ?5 X寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。
    0 x+ {6 ]9 a: q5 |7 ^  j: `6 @' `) F) i5 f* O
    2  目标规划的数学模型3 h: N6 n+ }. s* [* h6 Y+ b- O
    为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。" |' o% m  ^( B
      e4 M3 z* t, k- q
    例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。  ?9 E1 n) M; O6 J

    + p2 m& \( B5 G& \, \$ }) ?1 n5 b0 z( B, D) s; F1 D: D. l6 L

    ( J# c' u' g4 u7 R解  这是一个单目标的规划问题,用线性规划模型表述为: / l8 ]5 J0 ^9 ]: @' m

    7 l; R( C. i) v' O) a+ X
    : k( f, {- E) F" f# h( l& a0 ?& C: i  a$ n
    但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
    " D$ R  f! l. A0 A6 M0 x2 t1 y8 X1 {. B, r
    (i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
    3 A% G5 a0 X/ ^& S- @. F, o1 F% U! }/ [. o5 B5 o
    (ii)超过计划供应的原材料,需要高价采购,这就使成本增加。
    4 Y1 }  D* U8 p2 S% t' B
    ( A3 S% u& n0 y: M(iii)应尽可能充分利用设备,但不希望加班。 9 r; _6 Y( S  u9 a( l& a
    1 O( a0 n) }; O7 s3 m* k! u# @
    (iv)应尽可能达到并超过计划利润指标 56 元。& c* y4 C5 ], T0 K( Y/ _0 O
    ( m. ], P7 a8 u5 ^; T  I
    这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。 " z( r  h+ X" j( \8 |- D; H1 ~

    ' o4 j; D  f( L+ }$ B% H# J1. 正、负偏差变量
    ' r# s& }, d( ~( X! M" [6 c* o% G. P& U. b

    5 s, B7 T; c5 I! Y( [
    3 J4 C/ f& c. S; a2. 绝对(刚性)约束和目标约束
    3 Z. {+ ^' ~7 M- a6 ^6 i2 E0 X  P- h$ m! ~$ w
    3 G+ \6 O9 W- y5 B, i" v
    * G1 f8 [9 H! e5 h- j( s9 w6 ]
    3. 优先因子(优先等级)与权系数 ) A+ [3 C* W- O# M7 N$ U5 K
    0 g8 F# e! o9 A$ P. D/ y
    + b( n& p/ V4 T' W
    6 a$ Y: `: Y1 e; c" v) k

    4 U3 |0 ~/ o% x, ?% q4. 目标规划的目标函数
    2 ^& z7 ?2 ?6 q4 X. F7 G& \6 g1 g2 v& v& y" a6 D

    7 L# T/ h1 R( p6 K6 \* Y2 Q  w  H$ t, v) X; n- L
    对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。
    * e9 c- u  B) p: M4 F) {, \8 \5 R  c/ r" M' `8 ]
    例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  
    4 T$ `& V( y. I4 ~8 n
    0 }. g6 w2 j) s' a$ ^+ Q
    9 I6 ]( a  I, E4 c% R$ }( t$ v/ I, p1 \0 o' @
    5.目标规划的一般数学模型
    ( Y/ Y( ~/ F# M& V$ x) W3 W) V1 Q9 W  G3 s' Q) @) R) {

    6 ]0 ~2 t: k  W6 }' M- r# r: [4 r! r7 a

    7 F7 x7 k1 R1 a) [3 x5 n% W/ ?8 X建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
    7 P2 W( W) Q  w% C8 ~0 G3 q. Q6 }
    / k' W5 {" u6 J- {! o: D) @3  求解目标规划的序贯式算法
    ) x! E3 L, O- K( Z序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。 ) y& {( @  `) I2 X
    $ M% l0 S$ t" E0 @7 X  m7 }
    & |8 Y! Z- B$ _: L
      L* Q5 D3 `. x
    & i7 m+ P% X/ @% u7 [

    ) g; K: r9 \8 }! e. z9 L* ~/ |/ A注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
    " C/ v2 B8 v5 m% q+ N
    5 G! u9 n% }  X6 p例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:
    ( r, t  C/ s$ O# z( O" E0 F4 E2 P! i

    2 z. g0 h7 O9 A- {2 }4 a
    3 n1 K8 o2 q8 I' H2 _8 U(1)力求使利润指标不低于 1500 元;
    5 t) [: E3 s, e8 r1 `3 _$ K) W
    4 D* g2 F6 X& b6 {  V, J(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;" B7 z* H0 i/ m! g, H& h

    + b1 K( P4 d8 v7 p. x(3)设备 A为贵重设备,严格禁止超时使用;1 u6 A$ m# W" O3 D0 e

    % Q" Q5 @7 i6 p& D- N7 j(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
    8 e5 D5 W$ S5 V3 Z2 [% t) q- G$ l5 t7 ]/ r8 p
    建立相应的目标规划模型并求解。% `  S, o3 `+ ~! j! l
    # ?1 z8 u- [5 y1 a: y8 J
    解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。 / C- G8 X% N0 ]6 w
    / F+ x* c4 f# z0 n0 ^' [( c
    ( {3 f' k0 @4 p* L& q# y0 d
    * q. g- i* Y; {
    序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下:
    2 `+ `0 J4 E" C( s1 Y% O: t2 v: G! L! _" n' K, P/ A8 Q% `2 V
    model:
    : s+ Y5 P5 v; Y! A1 esets:
    3 F  J. T7 ]$ jvariable/1..2/:x;
    % L9 S6 D6 M, h# ZS_Con_Num/1..4/:g,dplus,dminus; , {3 u- p% S/ {( U
    S_con(S_Con_Num,Variable):c;
    , h8 K( q' _* sendsets + k* m& v8 w$ `+ u$ }" a
    data: ; |) G$ E) F6 U9 P
    g=1500 0 16 15;
    + m9 ~6 z8 l) f8 Oc=200 300 2 -1 4 0 0 5; 0 n# w+ x0 h6 Q8 M8 X9 }
    enddata 8 m" [5 w4 h* Y0 i: Q; l
    min=dminus(1);
    . |+ f. @" l& e: j+ E2*x(1)+2*x(2)<12; ( D( l. F" u1 t' J- j
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); 4 L# O& {5 J6 K% L
    end
    " Z8 c* \9 ]0 s9 W1 |' ]" C" p* p: F5 x' I+ t; o( I$ Y4 S! w

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

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

    model: 4 W; Z; D" l. j  ^6 w
    sets: 8 q! ^* w0 m  p; r% Q" ~) K
    variable/1..2/:x; 1 [9 c' c2 k3 d' i3 w/ U* n+ T1 {
    S_Con_Num/1..4/:g,dplus,dminus; # L/ z! _; E# m& g% A0 O3 e
    S_con(S_Con_Num,Variable):c; ; [) ?2 b& N0 ]9 A5 i* L
    endsets 9 h+ I# N5 R( @  Q
    data:
    # H& X, O/ o% ?- c7 G. [g=1500 0 16 15;
    - I6 Z& m& }3 l: }c=200 300 2 -1 4 0 0 5; ) D' w6 {" R# ~. Q  d+ l
    enddata
    % d7 f1 N7 T2 X- U. }min=dplus(2)+dminus(2);    !二级目标函数;
    1 N, m  x7 b& V0 T/ d2*x(1)+2*x(2)<12; 1 L0 Y/ ~% ?0 d
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); ' p+ F' k( B8 A9 X5 W9 W' W
    dminus(1)=0;!一级目标约束;
    + r* R# D$ R/ Q* O" m  ?@for(variablegin(x));
    # ?( p' ^/ X' _$ O+ hend 6 y7 w$ q, S2 u2 _
      s5 @6 Q# ]0 X  m
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
    3 K/ y  \% b0 w8 o4 g9 h
    0 w# d: C1 p6 J1 k' n/ M2 gmodel:
    & c& {" ?8 A3 k9 |$ p  P. t% Usets:
    ! l) t( C! z2 @& qvariable/1..2/:x;
    ( j% _7 S* n; A. [1 N% \S_Con_Num/1..4/:g,dplus,dminus;
    % T+ f( M4 Q% p- g2 b. U5 @( `/ GS_con(S_Con_Num,Variable):c; # h+ y4 J+ F/ A  G/ Y! q  r) |
    endsets : V7 g! ?; U2 J! e6 v5 ^( l
    data:
    7 X9 Q% v6 v& d0 x5 zg=1500 0 16 15;
    + m0 c5 u; G  rc=200 300 2 -1 4 0 0 5;
    0 x/ u3 t9 }5 g  Q0 _enddata 3 r8 z# g6 p- k2 {: ~
    min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; + y7 z1 A- W0 P; C1 m5 Z) J- K# \& D9 j
    2*x(1)+2*x(2)<12;
    7 l( n% v9 M" R3 r# c @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    : H3 Z$ X; P& wdminus(1)=0;!一级目标约束;
    / v/ p0 B# D# h% Pdplus(2)+dminus(2)=0;!二级目标约束;
    9 }9 l- K$ t1 \( ?0 m! I5 n2 oend
    + R. I* C% Q% ?0 i4 d0 Z( f5 v  D1 f$ t/ k
    目标函数的最优值为29,即第三级偏差为29。
      k. N: H, `1 a! S/ ^  A4 p. t1 m' Q( z  P* D8 D0 M$ J% h  G
    分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。
    2 W7 X. T6 j4 A
    * U: [, J% w& A! {上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
    ' i5 d7 ?( Z; l7 l: s2 E
      N# _8 P. U$ H- C6 T4 l" r( m例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。, `: h) u$ k$ X% e+ }2 C' I) V
    4 ?2 A' t; A0 f& z) V' U
    model: : F& Y/ B* M2 H- s) y0 c- N
    sets: / R7 v  p: T* W8 O2 r2 M
    level/1..3/:p,z,goal;
    8 O) e4 ?9 I+ Q  Z/ [variable/1..2/:x; - }  A' p1 B0 [, D+ g
    h_con_num/1..1/:b;
    7 q. n. Y. L/ D4 P0 y/ P- J4 N( js_con_num/1..4/:g,dplus,dminus; 2 I; b0 v( q, q
    h_con(h_con_num,variable):a; & U% P/ F8 }! B
    s_con(s_con_num,variable):c; 9 @, K5 }1 B" t; y7 `7 t& l4 Q
    obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
    $ y& g1 ~4 M* i6 c3 |/ Vendsets 3 ]- l* U% T6 s! }3 y% X7 R- f0 C
    data:
    0 ?: M, V" n+ t: u7 I; Q: a4 j; octr=?;
    6 k  S" J, q+ `2 n9 G$ fgoal=? ? 0; / O! n" p& H( d& F" @9 @- A
    b=12;
    / i  I0 {/ g. e2 t9 og=1500 0 16 15;
    * f6 D$ x! v4 }6 y3 g" P5 Ba=2 2;
      p2 `& j4 g+ T: X5 c$ j/ |4 J5 r0 Zc=200 300 2 -1 4 0 0 5;
      Z7 I! `/ ?! U/ l" S: j' Lwplus=0 1 3 1;
    " O" T" w) v6 g1 z5 awminus=1 1 3 0; # V) d- M& d/ X
    enddata & G# e8 l% c6 Z& s. G% m5 G
    min=@sum(level:p*z);
    3 \, T/ O& R- r9 N7 |+ ?* I, i) Op(ctr)=1;
    1 g5 {, m% ~7 i8 G/ Y@for(level(i)|i#ne#ctr:p(i)=0); + X6 D9 ]) o: |4 v( F9 W
    @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))); & Y- \- D+ C. B7 Y& Y7 k+ F- D( D
    end ( u( \9 K5 F5 L( P

    8 w  |: a3 G; ^+ ^3 E" j8 r" y$ C( p0 g

    6 p! J( s1 a$ f. B  F" c6 m7 J$ k4 l! s$ d* h+ n' Q

    / j3 t/ ~1 M5 l' d6 l) R; H5 c  O4  多标规划的 Matlab 解法

    多目标规划可以归结为


    1 P& c( M4 h  ]) x4 h, S0 e6 Q& f5 _1 v

    ! a7 z0 R& f. k0 W' i$ F# l( w[x,fval]= fgoalattain('fun',x0,goal,weight)           - i( s2 T0 ]2 t# G! e
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           1 z& Q, J: \, v) B( Q) F) S  a7 u9 a. G/ ^4 A
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    1 C$ \6 F% A8 M  \9 M! X[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) 8 d. w- o  e, E
    ' v3 T  F5 Z2 g  t8 t4 v- I

    5 h0 o: a7 |& l' t要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。: ]$ N: ~; Z) B5 d( J+ c9 |
    例 5  求解多目标线性规划问题 * M( J) v  @7 c  H9 s* @

    ( [7 s: ?  Y4 _6 ]0 L- o5 w' [, }4 O" ^& V- }; a# p9 d

    5 c5 R4 V9 r. \* ?) n: l/ e解  (i)编写 M 函数 Fun.m: # X/ q2 U8 b; a+ U! M

    + _$ x( R$ G- n' D- m; nfunction F=Fun(x);
    3 C& r9 X. w  o+ O' r1 L/ P- K3 Y6 `& |/ g4 }, R# j
    F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
    4 [$ I& Q' v0 G8 g+ F4 b3 A" X
    ! E* v5 R$ ?! I' rF(2)=3*x(2)+2*x(4); 5 {$ F" w; x, J% x: Z+ ^  h

    " M: a8 l# I$ s7 `# ](ii)编写 M 文件 # {) n( b& y- c0 ^2 y
    7 q0 F# W0 N( }" I& o
    a=[-1 -1  0  0    3 O4 w4 m+ n. a6 l8 I- [
       0  0  -1 -1   
    ' S- c9 h  f8 p4 l   3  0   2  0   
    & T8 c7 T7 b7 _3 H! L5 K0 R   0  3   0  2]; $ Z( f8 j: E+ w3 A/ l5 t3 z$ O
    b=[-30 -30 120 48]';
    0 |  h! n% t9 hc1=[-100 -90 -80 -70];
    * ?0 S' @$ Z* R, G" f  `c2=[0 3 0 2]; " l% D$ @* C" a2 t( K; m$ t+ ~
    [x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
    4 Y; e+ N: j# ^4 C: _[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值
    ' z! t; [1 }6 x$ Pg3=[g1;g2]  %目标goal的值
    ( ]2 ^' c: T' c( u[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) $ [: @/ y) Q/ S: Z) ~; t/ W
    %这里权重weight=目标goal的绝对值 $ B& W" r  q2 W+ ~  S

    ' M9 |7 n- i5 Z! p) @2 a2 o6 z

    就可求得问题的解。

    习题
    : k0 b" c! {, T5 I* I% M. K9 i7 Z. S
    % Y1 Q# j) @" I% X! B
    ————————————————2 @9 r  @% f) h
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。# C+ G$ k9 J! P4 |; t# N
    原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932% y. w' L6 C/ \; Y) d- E1 g
    ! e+ o- j3 u! H! X$ f  a

    2 _- `7 W" T) @0 ^
    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-31 03:40 , Processed in 0.822209 second(s), 56 queries .

    回顶部