QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2429|回复: 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.线性规划的局限性
    7 I2 \; k7 P; h, T. ~只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
    8 ]9 t7 F5 O; p; J' s, [+ h/ P! I- b2 t$ L5 A
    2.实际决策中,衡量方案优劣考虑多个目标8 T$ a. C7 F9 v0 `/ v; m
    这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
    & j3 R' y( d4 n7 S3 @) R
    2 \, K# z- D+ F: @3.目标规划(Goal Programming)
    . S. r% P- [4 I! `美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。5 \* ]* K* l2 C" b; v: P9 `: a  o

    7 m: N; d5 o/ f# e9 R: l7 L" `4.求解思路7 X& ^8 Q( w& a% d/ S( {
    (1)加权系数法
    2 |; s+ }+ D' }为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。# n# K" g  w) z$ L- J7 D

      G, R6 B. A: t/ f& Z(2)优先等级法# p1 m4 d' S0 O* y2 D
    将各目标按其重要程度不同的优先等级,转化为单目标模型。
    4 C# a1 h& j7 W1 p' P6 h. S. k9 }# V7 d8 Z- Z) u
    (3)有效解法
    9 t* P) l4 r% e3 u3 u+ I, @寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。
    3 a9 v; V$ H! T! B9 W% K4 a6 b. ]2 \+ c8 y
    2  目标规划的数学模型9 K9 q+ S/ |: y. Z4 U
    为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。
    5 e  X: F' H( a5 X5 q
    ( L& W* _3 J4 n5 i# X: M例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
    $ q8 w/ L" r1 i  a& u/ C/ ~
    + R+ x& A0 w5 W3 L  ?
    5 r9 x; ^( o' U/ {  t7 R6 {- L: }: M. h- |' m3 M! z
    解  这是一个单目标的规划问题,用线性规划模型表述为:
    ' {* C8 _) N3 Y" P, V
    " Q8 [% B. v- d" u
    # B0 r8 X6 K# U
    2 M/ O) G; j* g" F4 c但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如2 o4 E3 M2 L# a4 P5 b8 [$ s# C+ n

    ) D5 I. c* R' `8 R- N(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
    6 I3 b$ S% {& C
    6 v8 \1 S" a% S% o(ii)超过计划供应的原材料,需要高价采购,这就使成本增加。4 L9 E6 C6 l, l( Z& x# J- b- J
    " g  j: P2 \9 F/ |
    (iii)应尽可能充分利用设备,但不希望加班。 ! Q8 n3 L  W. a% ], i7 Y+ p8 r
    : t4 P2 A8 e" d$ `
    (iv)应尽可能达到并超过计划利润指标 56 元。
    3 Y0 p+ f0 F( B: w
    ( ^" a( f9 ]; Z1 ?3 u2 L% k这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
    - J5 J3 E2 y2 \+ ?
    ' @" a/ k* k1 [6 m1. 正、负偏差变量
    ) N# h' q3 i6 v3 R5 i6 S( U8 f1 v/ _' A9 a& ?$ b' O
    9 _% M! l- Y* B% G9 B

    $ G9 f& t) r0 c" t' C4 G; Q2. 绝对(刚性)约束和目标约束 ) z0 B* I0 C$ q/ {: j  o- ^) {5 ]9 \

    " X: L$ T3 ?6 l. Q) b5 ?& X7 m0 ?1 Q9 g! \3 [8 F8 a( X4 Q
    ( @8 b) I  s7 {( x7 Z8 D
    3. 优先因子(优先等级)与权系数
    1 w7 L4 B. v; M* b2 F% g6 {' Q$ Q7 u- i) R7 v" K! w3 p
    8 _( S/ W0 L  c8 |* U
    ) T( i$ S6 ^' h- O! ?1 ]) y
    % u. f2 U  K1 |) C' Y
    4. 目标规划的目标函数
    ) n% T, O* I# b7 D- ?* ?4 a2 H- A) S; k; |, \! _5 N% V

    , }$ P! U0 ~3 W9 A" Q3 Q, x, F
    0 w( R' |5 n# k6 d% \9 `0 m, O对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。
      l4 Z7 ]+ \6 N# S' s( q
    1 d" T/ I% ~$ [  _6 x$ ]$ G例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  
    " t& `% T( F0 _5 A$ g2 e* _1 q' `# J- c% s# F
    * K3 y5 k  Q% C& O/ `
    / q  b% h4 T+ r- ?$ O8 ]6 [
    5.目标规划的一般数学模型, U1 H9 ~/ S2 ]9 ]! H0 j- l# \" n4 |
    5 ]; Q* ~2 y& ^! c) X6 v+ ?

    6 f7 R5 c$ g% u; A3 G, w
    : T+ ?+ Y) N+ D0 z' W5 [  F" ?8 w- ]& j: Q: l& s, {+ p: d4 \
    建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
    6 O3 Z% U7 n3 c7 ^- [$ B) h% z9 Z+ z8 I) G
    3  求解目标规划的序贯式算法. v7 P: V7 L; {8 H  S6 r4 Q! a
    序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。 7 @4 R; L$ e% V

    . ?2 M, `$ S- g$ l) x" ~& }8 X/ W
    5 I* r$ C' [5 B  _( |  a
    " W& R# I! S: r8 H# y; u5 J( o. I1 q/ O7 z3 b- @0 F
    4 n6 D0 C: G* p/ j, q" [: u
    注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
    3 I" \: u( I5 c+ e/ i0 d/ y2 d2 l
    4 l$ g1 U" a6 V+ a% ~. w% N例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:0 }! w9 s# W' N0 l) a4 |# A2 z
    & s( ~! k& \* H( |
    ( B) J: U' o$ `8 U; B; ~& c

    . s) O: M0 M0 Q(1)力求使利润指标不低于 1500 元;
    % w# l0 h9 m9 C" Y3 y6 E6 w" R0 {1 @$ j2 N7 M& U9 Y9 w
    (2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;
    . V/ T* p2 M# }4 K
    6 i( k+ @, r* Y2 E0 i2 G& s% Q' V(3)设备 A为贵重设备,严格禁止超时使用;0 ], b  Q4 l0 [  Z: i( A$ @! d

    + j/ {/ A0 X9 F0 s, v(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。! \" p* x3 e/ R! b

    5 F; ?* `( B* w6 \( }建立相应的目标规划模型并求解。
    ( A( @* \3 L# y  K: l8 c8 i4 X" x3 c& h# E
    解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。 1 T) r8 y2 i& l* \& s. X% ^

    * P& m8 D6 J0 c7 E3 ~5 y+ Y! V: O) \4 n6 j* f1 R6 L5 t9 J0 U3 a- D

    # |! E6 B4 z. J8 v8 e序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: 8 |+ O8 x: _  v+ V2 k$ X4 _3 ]

    7 [) v+ n; P. t' K0 h0 F8 E/ O' K+ ^  jmodel:
    8 t3 X6 S3 e  V5 a8 wsets:
    4 p/ m) q, l) E1 Dvariable/1..2/:x; $ m7 U- L, P! F0 j
    S_Con_Num/1..4/:g,dplus,dminus;
    , v; x# Q# R6 |4 c% O1 Z; MS_con(S_Con_Num,Variable):c;
    / v8 ^' c$ H( w! x+ G. @1 gendsets
    8 d' u- c: l! ^8 g( C/ L6 P$ Pdata:
    / l/ ~8 j7 H; ^, Vg=1500 0 16 15;
    ' t& A# D  D2 ?( wc=200 300 2 -1 4 0 0 5; ; J( X3 D$ l) }1 w5 Q# G
    enddata ) M; q0 z4 t! {
    min=dminus(1); 3 k( c6 y5 a# ?1 ?( F0 }
    2*x(1)+2*x(2)<12;
    ' H$ S4 J1 y& n) S! A4 Z@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    7 `3 p1 A2 E5 W% Qend
    0 _: W! e' x( O2 U2 F
    - V* r+ o5 b2 c; t% n! y' S6 ]  }

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

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

    model:
    + K6 k4 L/ u5 B+ g: r5 F8 Esets: ( ^2 E  _* o" w. e7 i
    variable/1..2/:x;
    2 G3 i8 [- @4 z$ u# jS_Con_Num/1..4/:g,dplus,dminus; 4 Z8 N3 V3 s8 I7 }1 e/ {
    S_con(S_Con_Num,Variable):c;
    ) \; w7 ^  h2 L6 v. y1 W. {5 }% tendsets # M" t. e( ?+ B8 W( e; i+ h! [( \1 {2 b/ N
    data: ' ~! d! [! t+ i' ^+ F
    g=1500 0 16 15; + Z. T6 j" _, t# U& H- p; B1 a" i5 f
    c=200 300 2 -1 4 0 0 5;
    " G: X& b% R0 f" M! D. Benddata
    4 E8 A2 F: K' Gmin=dplus(2)+dminus(2);    !二级目标函数;
    , o1 U0 T4 f! M! B; N2*x(1)+2*x(2)<12;
    % @/ K+ \  q; ?( ^& Z6 M, P3 J3 H7 E@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); ) ?: C9 ~! k; j+ \( [
    dminus(1)=0;!一级目标约束;
    6 @' a: |8 Y( Z@for(variablegin(x));
    * p5 N* O  l6 F' g5 F  Qend ! V* R2 P+ n, p
      p  J: T4 m( t4 D
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
    * J7 _' o6 W& [% A/ ?9 ~. V& Z6 G6 I$ @9 l( K9 D
    model: " X( G! q; e5 H3 p
    sets: / q/ h/ I- j7 d4 j7 i  }* s' E
    variable/1..2/:x;
    0 T8 p& ]* N2 \2 a% \, S6 @S_Con_Num/1..4/:g,dplus,dminus; % t6 s/ r9 B; F5 {
    S_con(S_Con_Num,Variable):c; 3 e: ~# j, t- r" f8 j
    endsets
    $ v# Z/ \/ r" u$ p1 v% Pdata: % k9 F8 K2 C# @& c1 O1 g6 Z
    g=1500 0 16 15; 7 {7 B+ k' _0 n1 z8 z' X
    c=200 300 2 -1 4 0 0 5;
    * `7 d9 P1 ]+ ~! uenddata - m7 m5 e0 G& |( R6 z
    min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数;
    0 T! a  P! N% H2*x(1)+2*x(2)<12;  a3 Q7 _1 J+ ?$ n, d7 R
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    . R0 o6 f* L; P# N1 fdminus(1)=0;!一级目标约束; . L5 T- P2 P) r/ n
    dplus(2)+dminus(2)=0;!二级目标约束; 4 I& Y' B0 }  f* \
    end
    ; d# F' J. E$ B/ E' ?' |4 k* R
    目标函数的最优值为29,即第三级偏差为29。
    6 J) E! d- z) u/ }6 O
    5 s4 x& q+ C* ~3 [  y8 m分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。
    6 E0 W* e9 M: |, V# E
    : v/ M( r% {, g上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。: Y) O8 ?9 U4 {+ s* g( S* _, K

    : l9 r! _0 I6 O0 y9 X9 f1 W例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。" |6 [; p# |/ i) X3 ?" _6 ?8 g

    2 c( ?7 v- }" {3 B+ M* K& ?4 |8 umodel:
    / ^* @! }  t/ y$ y& e# ^; \sets:
      u" j/ l7 R7 u  s5 f2 z0 J5 olevel/1..3/:p,z,goal; 8 [$ v* |4 b4 f; ~; w. _5 e5 R
    variable/1..2/:x;
    2 k  b- Q1 [0 ^- `2 Fh_con_num/1..1/:b;
    ' c* T7 l4 X. o% ~. @& C$ Z4 v) vs_con_num/1..4/:g,dplus,dminus;
    # D+ G8 e0 W! |! U- f5 t7 }4 lh_con(h_con_num,variable):a; 2 U2 W8 c' `5 n/ M$ K8 m1 \% t* u" H, b
    s_con(s_con_num,variable):c;
    8 t3 o  ~" ]. S8 c! sobj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
    $ z& y# y: k  T5 |! l+ B; ?endsets
    5 G. _* T) B3 Fdata: / D; S2 b8 R" A  B( I
    ctr=?; ' |# O  L1 X: E9 c( R5 g) l
    goal=? ? 0;
    , S# ~; d* M$ C  c% E' Hb=12;
    % K/ r1 s- I% Q9 W6 h2 V, q4 Cg=1500 0 16 15;
    ; W7 A7 t  y. e1 b  \a=2 2; 7 q! v% b  y. E/ Q- ^! ~! `
    c=200 300 2 -1 4 0 0 5;
    0 W+ O/ ?1 n- Xwplus=0 1 3 1; ( u  f/ g8 w6 n
    wminus=1 1 3 0;
    " i8 @8 d  Z" i: o& a( l1 V" i& Renddata
    , |) z5 l" I" U* _% cmin=@sum(level:p*z); - l% o# A4 z" T( p1 W( o) T
    p(ctr)=1; 8 d7 v3 h4 c* j. z. V
    @for(level(i)|i#ne#ctr:p(i)=0);
    5 u4 r, ?# w7 r+ x& R5 y@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 q" ~+ A) _. i
    end : O, N2 {( x! r% E

    ; Q  ?! ^! X- m' Q; }+ N% C) Q& n% \2 Q# O0 ~! s' D2 X

    6 W. }' S7 b! _! N3 i* k  Z
      I. A6 B& k- r% @7 P/ d, F( G- a* ~2 P* t3 _
    4  多标规划的 Matlab 解法

    多目标规划可以归结为

    " E/ W4 o8 _9 G2 `8 V- B+ m; ^
    ( G8 w. k' i6 S/ {

    4 ^8 K( ^/ {+ z) q3 a[x,fval]= fgoalattain('fun',x0,goal,weight)           
    8 O" B5 ^2 j0 R' m5 Y) o- t[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           
    ; ]4 L5 W6 b" i7 [; G6 C[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    7 W) `$ T- I9 K7 u* k+ ]% L[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
    / L5 A3 D. N" z3 E) V/ R0 e8 n

    . B; a* u# u9 r* k) v' W! o# K要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
    / D5 o+ G. C5 c" ]9 | 例 5  求解多目标线性规划问题 # J. W/ z' v8 _- Q& p

    1 ~: I9 W7 T+ x7 n
    . @( z. O$ g( z: l% H- O1 `
    # u, h" Q& s5 y0 }' x. ?解  (i)编写 M 函数 Fun.m:
    0 S( }! Q8 K$ G9 @3 e! t% {6 F( J; ^* y
    function F=Fun(x); & c) [4 S$ v$ f2 c! ?6 ^2 O0 f2 S; k' U
    3 k( r( A' l7 j! V
    F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
    5 {& E, z0 `& S
    - j8 A& j8 B4 i/ \F(2)=3*x(2)+2*x(4);
    " m, f4 s4 Y: z. `( E, P. ^/ g! s# D( ^
    (ii)编写 M 文件
    $ J4 ]9 u# Q6 S' c! C5 T  I/ `, i5 O* W# x4 F7 I
    a=[-1 -1  0  0   
    + K7 J9 M. c3 [' u. u4 i   0  0  -1 -1   
    7 E5 o  _5 q% n) U: s   3  0   2  0    " d0 Y/ R* l: v9 Y+ C; z
       0  3   0  2]; + Q$ u. I9 K* G
    b=[-30 -30 120 48]'; 9 f/ a6 A& A3 t
    c1=[-100 -90 -80 -70]; ) V8 v' z* K* S+ T
    c2=[0 3 0 2]; ( j7 X  V% o% I6 Y5 E# v
    [x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
    & |4 E0 |* B7 j" t& W1 N% ][x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值
    ! B5 J2 [7 n2 B# f- zg3=[g1;g2]  %目标goal的值
    3 v) h( s! ^" y; [" c7 g% C[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1))
    , ]% z- h/ u- A% B! g- j%这里权重weight=目标goal的绝对值 ( X0 z4 f8 a6 \& N0 U3 k

    ) {8 b3 a4 i) E7 |8 e* K& y7 j

    就可求得问题的解。

    习题
    6 J) w3 ]( b8 ~8 T9 N& q1 K: s( R9 b* u
    & Q1 L3 k) w! k! B% i3 O
    ————————————————7 b; d7 v* c3 h
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。% Q, ?/ ]) g" B3 M% ^& Z  T
    原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932
    ( r! A  @& w8 ^- u: Q# K4 l5 L9 t

    : ~4 `# A' k$ _8 Y  |# C0 l  x
    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-7-30 06:54 , Processed in 0.367655 second(s), 50 queries .

    回顶部