QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2342|回复: 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.线性规划的局限性, ]* H6 T5 |; g* k9 B/ u3 t
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。4 r  J; Y) \5 a5 v
    % X# n* U6 \& I' g
    2.实际决策中,衡量方案优劣考虑多个目标
    1 t- z6 k; e1 E1 M$ c这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
    . a) W" F5 Y* ?# ^& r$ \9 w. b6 _2 h8 r+ o8 F
    3.目标规划(Goal Programming)% L- \$ c: X  ]6 I' v! M
    美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。2 w! q2 N1 S3 O# n% @) q( s

    4 y! y8 U! t3 L2 K$ s" m4.求解思路
    9 Q# f) b: y+ Y: r(1)加权系数法
    1 j* R) `: G1 V6 ]# Y为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。
    0 t3 |- a+ l1 F0 n  R, ~2 P
    ) Z. [+ J5 {# x- m9 H, t8 y1 X(2)优先等级法
    % [- E: q  `  q8 F1 @) X8 d  d将各目标按其重要程度不同的优先等级,转化为单目标模型。
    0 v) Q% ?1 V8 d
    $ b4 A9 ]* G" ^* Z" P8 T(3)有效解法
    ; c) c8 I# y  m6 u* L0 o, S寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。 # F- c5 g' t0 y  z! w
    1 p8 H) V( G& B1 n+ F4 _+ r9 G' t) p
    2  目标规划的数学模型
    5 Q* K9 {7 b. N. s" |0 i为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。) Y. g/ C, G/ H& x, e( U
    . Q3 Q# [' K' S
    例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
    1 s- j+ ?# y$ D) ?1 b' k( }% Y# w' R: R! R
    , j& j( [3 s. w* N2 Q; v# T& L
    6 W" x- O% g" h5 y& F+ ?8 q
    解  这是一个单目标的规划问题,用线性规划模型表述为: 3 |* F4 v' A. o

    2 l8 g6 P' S; D8 ~" }1 O& M
    2 m1 `4 m. h% r+ |# q7 b& f
    * _* J$ F0 F) E) ^! k6 ]但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如' m+ q+ w) L( E: b) I

    ) ?: \9 \! d0 t* K% f5 L3 Z8 Q(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。% z% {/ d8 E6 W& g$ z" K
    6 z1 |1 n+ R9 c1 U/ D5 j( n8 r
    (ii)超过计划供应的原材料,需要高价采购,这就使成本增加。
    2 l2 f+ X3 G- i. B
    / h( x4 i. _+ }( h! P! o(iii)应尽可能充分利用设备,但不希望加班。 7 p5 U# f* i5 s4 ?, c  [% F( m& I& t

    # v+ u0 X! H- I/ [- @& ~: E5 h(iv)应尽可能达到并超过计划利润指标 56 元。3 r; _2 e: c5 u9 X/ P
    3 k( i4 \1 |; A6 e' H1 Z
    这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。 ; U& @. W7 B+ {+ z
    9 v! ?4 o  ^% n, P) t
    1. 正、负偏差变量   g1 i5 E& \- d$ H2 Z: C7 y
    : A/ p7 k+ f$ }4 R* J, V7 Y) P
    5 f! L& _# ]4 Z7 F
    . p- w$ V! G8 d1 J* n+ \* k
    2. 绝对(刚性)约束和目标约束 ! g9 r+ o3 s2 z! k+ b/ X

    + N0 m: K* y, h$ E
    % `+ `! P1 f8 \6 R& L* ?) M8 t  l/ v5 }7 @+ z' k0 t7 ], e6 r
    3. 优先因子(优先等级)与权系数 3 `3 p! S5 [+ v. v. O- }, L
    1 v5 Y$ d, f/ _0 n& v0 N

      W0 m3 L  H6 _  k/ Z+ ]9 U& B
    . W1 ^9 I  Y$ j& d
    0 j2 B% U5 U  O& E5 z4. 目标规划的目标函数 & E" o9 ~1 x# l) J8 p; i% ?3 Y& o4 O
    2 A* n2 p+ q& C3 H' S$ H

    6 Z6 i" @1 x3 u) V1 h' x+ r  P8 O) i" ]- U
    对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 $ Q/ P9 T4 Z  \% \
    ' L, I) J' o, x
    例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  
    ( b9 }$ ]4 l" [1 D) k0 ]
    & Y1 Y2 W9 n* k/ _1 L( F* ?" A" d: o# k: N2 s

    . e' P! I# u5 F9 p5.目标规划的一般数学模型: G5 b; a- ]* k% B0 i& T

    3 M. c" x% b) o& p
    & U) a+ M. ^# J# P1 n, R! d$ M7 ?3 O5 u& ]# Q' n' }2 ]( J

    + s, s- p. `7 J6 t8 P7 S3 x2 u! L/ v建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
    " M" w; f7 Z5 Q/ y' P" l" y$ ^) n7 k" |  w4 R
    3  求解目标规划的序贯式算法& \( A. I* U* G* @% j
    序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
    ( {8 a. Q  {7 g4 h: x7 Z5 k
    * b! c* V/ ]5 \: [( |
    ; [7 }! k# s4 S- J9 d. N8 x; D4 o* ~1 `2 `$ `+ Q+ p$ M
    1 u0 q7 G! L. \+ h4 A
    ' d5 o$ p; j2 H7 b! m' j( T- W  k
    注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。 ' b  A8 |9 H8 T" P+ M! P

    ; ?- j" R9 j) Q  Q% s1 R例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:+ Y9 Z" s. ?0 g6 X4 V) Z

    & ~# y$ W( f0 v4 i) [6 H- g, M  N
    $ N  e/ H4 v/ b. `7 M0 P! X! ]0 P0 v7 v
    (1)力求使利润指标不低于 1500 元;
    - r9 F# N* _( y4 x8 ^& _9 e5 u
    4 d4 D! T& r2 }6 o" x. E8 D+ [* E(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;$ _0 k7 K, K2 v) m% b" o
      F& z# w' b8 J4 z
    (3)设备 A为贵重设备,严格禁止超时使用;
    : N  P( O( l5 i. N( O- _: m, D0 Q8 y( i" R3 I: U) I# _
    (4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。- c  J! Z7 j# ?! v# ?- L6 G
    8 @1 V! }2 Q& d
    建立相应的目标规划模型并求解。* X' E+ H0 f/ I  ~& V

    4 R5 g  N- q7 O3 \; Y# L解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。
    2 `; ^- P- d% I! ?' z: F" K/ u9 P- d) `( @4 Z% ^1 Y0 z

    3 B5 }  q. y) w( W' y9 f7 v) [" M! F0 P# ^# \9 }! \
    序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下:
    , X3 C4 |0 E' E$ x% K! y
    6 ^) F  |8 f6 [model: 8 `, x( Y+ w, S: S
    sets: / y6 o; J  `$ M9 N2 }7 G' ^
    variable/1..2/:x; 8 \+ K. d6 b* }4 U( l- v
    S_Con_Num/1..4/:g,dplus,dminus;
    0 y# [  @; g5 z3 D- B9 VS_con(S_Con_Num,Variable):c; 7 ^4 ^6 F1 b3 n2 [* y
    endsets 6 {" c1 _  O9 w( G# a
    data:
    * ?7 Y2 {! c0 \  C$ O# bg=1500 0 16 15; % k/ h( o) I; |- O
    c=200 300 2 -1 4 0 0 5;
    7 b: y4 a9 j" u+ V0 N9 |enddata , F9 k7 J+ e# g* j2 C
    min=dminus(1); ! f, J# ?3 X/ A# t+ F! [( R4 W
    2*x(1)+2*x(2)<12;
    $ X& o; I* u: H9 y1 N: f8 k, Y# g@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    2 ?+ i/ S! R1 b) l2 Gend
    / P( |3 f& \! q7 }
    ; \+ o9 s) D! c& g) ], c

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

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

    model: % }+ `9 J/ g! x; C  G9 q
    sets: 5 k' ^! K; |! ?
    variable/1..2/:x;
    & k7 ~1 T. v" `- l) LS_Con_Num/1..4/:g,dplus,dminus; 8 x: g6 K) g% q# J
    S_con(S_Con_Num,Variable):c;
    ) s6 h. x, b6 d) o1 hendsets * Z" T" K$ m6 s
    data:
    : ]$ l3 D! B2 y9 S$ R  cg=1500 0 16 15;
    + W1 {# C8 E6 u( C2 ^1 |c=200 300 2 -1 4 0 0 5;
    $ L, p- c' D& s/ K( _( z, fenddata
    & W4 r; C: L, a, ymin=dplus(2)+dminus(2);    !二级目标函数;
    " b" l9 X, }# f$ M2*x(1)+2*x(2)<12;
    0 f  k: Z. T! Z@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    - R& W$ x% ]+ H6 `3 ]7 idminus(1)=0;!一级目标约束;
    - R" g/ F, [  H+ @7 D@for(variablegin(x));
    . b$ j% C7 N5 W2 Cend
    / }) y' @5 N* k% b( R2 j! _4 c' R9 w; z; S. P5 X
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
    ( e1 @2 F: e/ s. y1 h
    3 j+ ~' u! v. j8 C" W3 `3 dmodel: 3 z( W8 _# E# \9 ]! b
    sets:
    0 ~1 b* @4 t# @- l2 @variable/1..2/:x;
    ; z* k! S3 \/ j# uS_Con_Num/1..4/:g,dplus,dminus;
    * G( K% p$ q& N0 `S_con(S_Con_Num,Variable):c;
    % m  M: w. X: [endsets 7 Q7 w9 e4 o. E
    data: 5 F4 Q9 x8 E" H/ Q; x
    g=1500 0 16 15;
    6 S) C, [7 \; |  e  j! Ic=200 300 2 -1 4 0 0 5;
    5 u7 \+ e6 j+ j2 @& \1 |enddata " s8 ^: }( [# u" k
    min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数;   |+ C5 m2 X4 j5 }
    2*x(1)+2*x(2)<12;
    4 d1 S9 S1 D" _) m @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); 9 U$ }$ |; K' i
    dminus(1)=0;!一级目标约束; * Q( d" ~6 Y5 T. S* L2 G8 `
    dplus(2)+dminus(2)=0;!二级目标约束;
    : i6 [, ^, m5 Eend
    . Y2 I& @1 y' _. |1 \2 O$ |5 u8 i8 _! S5 Q+ G$ Q
    目标函数的最优值为29,即第三级偏差为29。
    : k0 j  f0 x7 u: I2 g# i
    % }6 N9 {4 ^$ Y" @& ~8 m( |9 k& Y分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。$ i/ s9 a. p- _1 I
    4 w2 a6 y1 e1 }0 x' s  T
    上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
    7 Z& `$ x1 p9 ]& f
    1 q& C5 v7 l6 b% @! F, G3 f* h例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。
    ' F& Q1 [( v$ l# Z, L' h. X! M5 N
    % L9 @% a. U6 o& e, H6 xmodel: : @% T% Q* k+ Z6 T& V* p
    sets: 0 t$ S0 ~3 c9 S" A  q+ x: D
    level/1..3/:p,z,goal;
    ( [+ E+ m0 K- r: m8 @variable/1..2/:x;
    9 O) c9 U5 H# D6 x/ V7 Y" o  i1 Hh_con_num/1..1/:b; . v' M7 T+ R4 x
    s_con_num/1..4/:g,dplus,dminus;
    5 V1 h0 ^8 u/ z0 w% C, yh_con(h_con_num,variable):a; + d$ X0 k8 k- ^2 l% a
    s_con(s_con_num,variable):c; & C7 |/ {4 R% L. [, Q4 S# z
    obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus; + `3 {- F- m' @! a; S9 D
    endsets 2 Q  ~# \2 r1 l- v5 P' k
    data: ) c9 G5 S: \# {1 u) l
    ctr=?;
    0 Y# g# r8 L. ^0 x0 H) n# g. wgoal=? ? 0;
    " m; M+ a" L# L. A8 Pb=12; + w# b: ^; a: o, j; U7 C) ]4 V
    g=1500 0 16 15;
    , Q! y9 P) g3 S6 Wa=2 2;
    ! `) {" m3 d0 T  n$ e2 k; v, J6 Lc=200 300 2 -1 4 0 0 5;
    2 _0 U$ ]5 y7 P5 I5 r' T4 Y% t6 }wplus=0 1 3 1; ' w5 ]7 X' e4 F+ e
    wminus=1 1 3 0; * M) A- E) x* ?! K
    enddata 1 o: K* Q1 K1 R% D6 a$ ?
    min=@sum(level:p*z);   Y$ {8 v* I- m0 s* M
    p(ctr)=1; , j6 s! K( C7 g( v! ~5 v% a9 G' w
    @for(level(i)|i#ne#ctr:p(i)=0); ' X. e# @5 s/ X  ~5 f. F% 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))); ! w: r0 t$ v% i  N% E, y# O9 z" }! }
    end
    1 V3 V. t# H& D8 d. n/ _) m
    + @6 j+ N$ p  ]5 N1 ]8 `0 W
    . s; d: i2 n! k) c4 n9 Z1 T
    0 N  M7 B6 K3 J; D
    % l7 n* ^. V1 o6 b9 _/ n  p* E
    ( I3 L3 f9 O5 A* ~* {4  多标规划的 Matlab 解法

    多目标规划可以归结为

    : j/ J6 C6 U. v. G
    2 E" C( z# Z1 T' k
    / F& f: R' D0 X0 J4 v, u8 G
    [x,fval]= fgoalattain('fun',x0,goal,weight)           
    7 `' b- y1 v5 u, E; X2 }9 U5 {9 Y[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           
    5 X+ a" F/ Q' u3 k. T[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           2 a0 a( S, |* V( q
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
    ; }  W; w* D9 C' u
    : r, @; t7 b6 w) A6 f! M1 O, l+ w4 s% }5 A+ h
    要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。  M& U3 p9 N; n, d
    例 5  求解多目标线性规划问题
    . i- F- P4 M; {- ?% S. F, v7 Z9 L8 ^" B' o/ C8 g% o
    / ^9 s# w" ^9 V4 X$ u

    0 e  R0 g8 u- o* \8 C$ y解  (i)编写 M 函数 Fun.m: $ U" Y, [8 E: M

    * y4 D2 G) M4 s' F9 v1 W0 bfunction F=Fun(x); , ?0 Y; w0 p7 {& L, H. Z. s, o
    * R- U+ x% e5 a2 X! Q$ n! T! ?, d
    F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4); 9 N- p% }& N0 _9 n) a- v# [
    ) _6 ~$ M3 D7 |
    F(2)=3*x(2)+2*x(4); ! r# F- o6 E, S" _8 Q) @# u

    . w# {) [( Y/ y5 L(ii)编写 M 文件
    1 B& O$ Z) m% B: v+ W0 H: `0 D" |. o4 I, e% A9 w# n
    a=[-1 -1  0  0   
    ) q* T0 K) Z/ l) W& e8 N' }6 L/ `1 r   0  0  -1 -1   
    # f7 [$ S, V: f   3  0   2  0   
    - Q* H  C# R1 t8 v% T   0  3   0  2];
    # a( b# W% w  |/ M! Cb=[-30 -30 120 48]';
    . z% S6 E( y4 U$ Ac1=[-100 -90 -80 -70]; % ]% F4 _. X' V* ~; a7 F
    c2=[0 3 0 2];
    . j" d; {& G% b6 ]0 ?" Y[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
    + |2 ]. U: |( X$ i) Q8 @[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 1 {9 B  k& S% N, P4 E& n9 \+ O1 S2 \- i
    g3=[g1;g2]  %目标goal的值
    7 {, \# h3 }% @9 e/ a[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1))
      n, i7 O2 L: E/ y%这里权重weight=目标goal的绝对值
    ( Q! B2 k% ?! W$ S( ^, `& r5 J' o5 ]3 ]8 U9 S6 _7 G0 |! ~

    就可求得问题的解。

    习题
    : W, {8 I" _' h, g% x0 P, Q: M7 l: ?% t. @- n- a! ^
    - e: H& c/ W/ P+ b) |& \
    ————————————————  A# f9 `# Z: V0 }
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ( U; @8 A- P: P, |5 f9 V: x原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932) m2 U; A' f8 `& J; l3 P8 j

    : w& O/ N: k+ c0 |1 r3 R- ?, l1 N6 z
    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-4-13 06:48 , Processed in 1.038573 second(s), 51 queries .

    回顶部