QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2391|回复: 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.线性规划的局限性+ H4 u* {- |# x$ x( `
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。" e4 Y. J/ x: q9 ]  L; k
    1 e: h' D" ]  e1 @( F; B9 W
    2.实际决策中,衡量方案优劣考虑多个目标
      x' I9 W4 `+ ^5 a) b这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。% Z" h' J( s- ]. P6 x0 Z$ i1 E

      E  o3 P% j* I) P$ d3 B  e3.目标规划(Goal Programming)3 ~8 A: v; G+ _4 d0 O% M
    美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。6 P) z" g6 p' a' q  Y

    & P3 E; @! f; `0 H6 ^9 `2 C" B% g4.求解思路
    " Z( r* C9 |! r- A(1)加权系数法/ U  @4 _* o( x5 K
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。& J' b& o4 w. L

      I0 d1 ~) P2 A4 l' X(2)优先等级法) P4 t1 {% b; q% P
    将各目标按其重要程度不同的优先等级,转化为单目标模型。
    ; C& {# Y' h6 w! p, o$ x4 Y, n% Z+ y2 I$ J! x6 R9 n3 |9 j3 b1 u
    (3)有效解法
    * \1 f. ?- C! R2 _' V6 ~2 Y2 Q9 ^寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。 , L' M+ x. i/ q
    8 G. c7 z- E4 g+ P0 J& i7 e
    2  目标规划的数学模型" G  @4 d. |) x# `- E
    为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。3 `& D( s& M/ q0 v

    ) T6 T* `0 X7 d& t( j例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
    6 h' }' d4 U( }4 ~$ F. k7 M' w1 K& O
    " n3 l6 ?. p$ J  y# X" M4 r
    6 [& k! v8 ^' C3 w/ w4 L' _$ Z' n
    ; A2 V" l6 r* ?0 b解  这是一个单目标的规划问题,用线性规划模型表述为:
    * @# b! S! n; |1 P* \4 _3 T+ ~/ s, p

    ! U$ o) {& ^. L( y: P2 @( P9 d+ l, B+ h3 ?" c
    但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如4 @4 k% z2 M/ D' }3 A' v. C

    8 a! C7 ?" o" m, o9 H  N  ](i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
    7 S% E- z  L) T- ^0 r  I2 q, L! X7 ?  O! _! O* s1 T8 L
    (ii)超过计划供应的原材料,需要高价采购,这就使成本增加。* Y. n& P* W) X$ V0 {7 T# t# z
    - Y+ ^8 X* u7 {4 s, K/ ~
    (iii)应尽可能充分利用设备,但不希望加班。 # d) ?( o: H  O, x6 A" Y/ w
    ! O3 q5 H+ W: x* [% P) w8 W
    (iv)应尽可能达到并超过计划利润指标 56 元。# I/ F3 z5 K6 _/ F* }# I2 Y
    " _* y& |0 X8 \! {1 H
    这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。 * H5 P4 }( Z0 Y3 j: {

    # `* w! W: B% C4 m; H1. 正、负偏差变量 - B; H6 p$ [# F

    7 K( B* w+ Y# t4 F' j! M, `5 a3 S1 Q/ @3 D4 U8 y2 X
    " e2 ~, K! t- B# |# B$ p
    2. 绝对(刚性)约束和目标约束 : \4 b; v1 V: H9 y
    8 \: r, V+ z0 H  p9 U3 @
      V6 C- K3 m* i  {

    - ?. @% [: l, \( ?' u3. 优先因子(优先等级)与权系数
    3 ^, d$ E8 c; Z
    " s: q, {; s! W* s5 y5 q! e. l: A: D$ ^

    ' N4 N1 g& T' w, b- n: }+ t6 u6 x3 {& g# c+ v" a& n
    4. 目标规划的目标函数
    1 d5 V) [" G+ _. q, T& n7 U, z+ T- n0 a& c9 t; E, [; f

    & \+ d, c8 K9 b7 c. j7 q  L
    - b( S) W: {- z/ k$ C% K对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。
    4 E# k% P; E+ U" k3 X3 e$ S) x; o8 M" c- G! X# [
    例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  1 ]6 G+ e% |0 H  @; M; k
    + A6 h3 T# V+ ?" z  Z) r6 v0 F+ r

    : ~/ U9 c  B' G) o6 ?. \
    0 Q2 I6 }+ `. H% L, v2 a5.目标规划的一般数学模型2 @4 `' N0 T/ ^! x. t9 g& Q
    " F8 N4 d- X" ~* A  w
    . p- |" T* n! O6 e9 u

    , Y. N; X' D" K$ {
    6 y% a1 {$ a% K9 o8 j) U5 G+ q% e建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
    5 x' M& G6 j5 \' j2 m. p  h% P; E8 h9 x4 V: |# J. t% D5 Y7 m
    3  求解目标规划的序贯式算法0 y+ T, d' Y; b/ n& H$ C; g: V  e
    序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
    - y- @0 R2 C7 |3 Y& I" `$ g7 E2 D8 Z4 ]* g( Q8 P- J" h" r

    / r- X1 d( J3 x5 B" b; |0 p$ V. X* y9 h3 L0 J7 l; k5 Z3 s

    # w/ b% ]/ V( g$ D  H1 ]+ \3 [. {6 w
    注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。 6 i# ]9 U% O! G  F/ V6 c
    9 c9 h9 v4 a0 |1 o" g  G/ n8 o: K
    例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:
    + K: t: q5 r) s# h8 l6 q  n! W
    # s6 H' U* `/ w; r) y* u9 s6 @$ m1 n. L5 a; w- y
    . b0 v2 @( L- O/ H/ G
    (1)力求使利润指标不低于 1500 元;0 d% n# z) p2 t; y: [' E
    2 J/ m4 x1 }5 K% l
    (2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;
    5 {3 y: Z. U! R5 f% n
    % J9 o6 c' s8 C8 S1 ~(3)设备 A为贵重设备,严格禁止超时使用;
    1 s- O" L6 d- Z3 P7 c7 w
    9 m' Q8 ^: K' ~4 e0 E(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。% B- K$ |6 V' I2 X- a, ~

    8 F  h- |2 o( }! X7 Q+ f6 l! F建立相应的目标规划模型并求解。
    * A4 ^1 g7 _  V" _2 r
    , T. f7 X- W9 ]8 W/ ]" O解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。
    / }( P) r( L6 F9 _( X5 ~
    6 ]) M2 w- T( f- P* e7 ^' ~, Y* ?) X6 t9 }3 V/ q: H

    / p7 \6 K4 ?" y3 K+ a序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下:
    5 p# h7 g; N- |8 |  A; w
    # P5 \4 E  h- u, @2 R$ kmodel:
    : Y. ]$ _3 g+ d8 e) Ssets: / c0 D) ^' U. P& x
    variable/1..2/:x;
    1 B" k" {1 M* p, KS_Con_Num/1..4/:g,dplus,dminus;
    9 ^1 \  _. A" cS_con(S_Con_Num,Variable):c;
    1 E2 _6 g4 v5 U4 c0 n9 B7 Q' q5 R* b4 Rendsets # v, ~: x/ G5 l1 l: Z1 y
    data:
    # \$ w4 H/ T6 f. q. f( Z; hg=1500 0 16 15;
    ' I! C% I3 h+ v2 d+ z- v9 B9 zc=200 300 2 -1 4 0 0 5; ( L; z4 D/ h9 X
    enddata 4 F8 q7 H* _1 H$ V- @( h* Q5 |
    min=dminus(1);
    6 Y3 B7 ?. s2 z2*x(1)+2*x(2)<12;
    5 w" R1 s5 W: _2 A( {' P5 D@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    ' D+ a" l, O5 [. Uend
    % H4 j  \( x& B7 v$ a9 D$ J7 _+ f' h
    5 R* J- @$ f/ h

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

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

    model:
    + z8 x. c+ L$ g3 H! `sets:
    + ^" \, f1 E9 \+ K3 q0 Mvariable/1..2/:x; 7 O) L- D  A7 ]
    S_Con_Num/1..4/:g,dplus,dminus;
    - X6 w) s3 I3 v" j/ r! x& n& IS_con(S_Con_Num,Variable):c;
      e# F- C0 \( `5 iendsets 6 ^* \7 }6 ?5 }, p3 O0 U' L  I
    data:
    / I, M; z- y4 w( `g=1500 0 16 15; * L  @- q# @; {! m) F# S" C2 y
    c=200 300 2 -1 4 0 0 5; : Q0 l8 r" n( t. r  z2 u4 y
    enddata : H+ ?  h, |: ]
    min=dplus(2)+dminus(2);    !二级目标函数; 9 [# }/ s+ _4 `+ I! S. v
    2*x(1)+2*x(2)<12;
    5 I8 q, Y8 X3 S4 O( d@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    5 O) C6 g0 z# ^. r" a7 ^dminus(1)=0;!一级目标约束; " p4 \0 D% ]/ n; F
    @for(variablegin(x));
    3 a3 W# @) x0 iend 9 W; Q: l" j) C; d% U% k9 Z
    / S* u* S( P; R' B( l
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
    . I) B2 N0 d1 ?; T0 i* d3 l) Z( k) r; f0 `4 _4 J- E) B9 p2 ^, s5 V, S
    model:
    + j, H8 h, H; y$ }sets:
    / L- P) U0 {/ J) Zvariable/1..2/:x;
    7 q& r6 e, B; _( g0 OS_Con_Num/1..4/:g,dplus,dminus;
    4 y9 ?: a1 D# u. M. }/ m" ]S_con(S_Con_Num,Variable):c; 5 `! C/ ^4 b! U- M
    endsets
    5 a( }+ k5 }0 Z! |1 I5 p, Rdata:
    ) M8 b0 E( O0 W+ Eg=1500 0 16 15;
      k$ `! R3 T& b4 I( H# cc=200 300 2 -1 4 0 0 5;
    ' C; c7 G+ F# v$ senddata ' d. w! s0 B! Y' E& A
    min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数;
    ( O+ A- s' h! ]2*x(1)+2*x(2)<12;. E% f1 R% ?, }6 t/ G  h  S
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); + M8 F) Y- J) W, A0 F7 b
    dminus(1)=0;!一级目标约束;
    ( x0 P/ U" L8 a8 U2 pdplus(2)+dminus(2)=0;!二级目标约束;
    4 _  P# A2 G8 i; a* `end
    ' n$ @, ]0 ]" [
    : @+ N" E. w. M& W/ w0 @/ }  e' U目标函数的最优值为29,即第三级偏差为29。 $ K9 @5 l* O# Q! b- ^6 V1 T' K  L

    : c- S, M7 v' f- F: ~6 P& S分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。4 x$ f# O# S$ X: ^/ Q" A" ?
    6 h( f5 i7 \0 f
    上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
    6 G4 y; R, {8 y% @) r" I* v2 V$ P4 o6 E: S* E/ J
    例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。' k; G2 g, a6 b  j! Q  l; @+ [; _6 j

    . A% i# \0 e5 u3 P) y% P* E9 p6 Ymodel: % ~  `: |; I* \* B
    sets:
    4 E, m$ v1 y5 q) {5 [+ |' Llevel/1..3/:p,z,goal; * q3 q  L4 H; k2 _1 [! b0 r8 {" x
    variable/1..2/:x;
    % x# f. |8 e9 [9 Z% \! g' Y& |* dh_con_num/1..1/:b; * p( f* P; m, S% @5 u) h
    s_con_num/1..4/:g,dplus,dminus;
    % D$ F; u  k  R7 a3 Ph_con(h_con_num,variable):a; 4 q3 }3 w/ ]+ x& f5 \( y3 v
    s_con(s_con_num,variable):c; 8 ]! k& ?0 d. t0 P3 `" {* W
    obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
    ; J1 ~" g  y" R: n8 w1 n# _endsets : ]9 ?1 r" T' p: ~
    data: " E8 k# r6 {5 D; ^) H& \
    ctr=?;
    5 b: M* E5 E8 h& g. K2 agoal=? ? 0;
    ) I9 ~3 T2 i, u8 `2 nb=12;
    " b# f! L$ z2 y( mg=1500 0 16 15;
    8 \6 L2 A- [" Q8 E3 wa=2 2;
    0 V) `1 f; W7 @; f& C* x4 ic=200 300 2 -1 4 0 0 5;
    & c9 b: B8 G' pwplus=0 1 3 1; 4 H7 V7 V# l, O4 c
    wminus=1 1 3 0; 9 y$ G4 z# a1 U' J5 m
    enddata
    ( k4 }; V0 b0 {$ p2 l( P, N8 Lmin=@sum(level:p*z); . e# q5 R: g6 G0 u6 A5 o) e  J
    p(ctr)=1;
    - W  O0 _) n" ?' [6 n! y9 e+ x@for(level(i)|i#ne#ctr:p(i)=0); , [9 P! W, E( ]8 D
    @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))); - I7 _/ s6 D! t0 t% M
    end - \! i. k6 P0 T* E

    # X- H, o/ k! y: O; g' E- h3 g
    $ ]3 {; R8 N' x3 J( \$ I
    " @( |. f) K# s. p0 \) b

    % j4 J) ?) ?4 X4  多标规划的 Matlab 解法

    多目标规划可以归结为


    1 ]& e9 J1 D/ J+ `
    . C# U6 R" A; A0 F, {- r
    % y6 r' \+ W6 _  E. D. A  p[x,fval]= fgoalattain('fun',x0,goal,weight)           8 r$ N3 h* l% q+ d9 A5 w& {: I& q
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           
    / U( Z- U$ ?* W3 F" J- [2 X2 c[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    , f$ A* F4 r% T5 C. u4 {- @1 {[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) . n( p  x" {7 q

    6 o" B5 u+ k$ `+ f3 K
    / m& J) A0 n7 K8 M1 g/ t% c' o9 }要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
    0 B6 M8 J" s& ]4 K 例 5  求解多目标线性规划问题 , l6 n- s& U  H  a
    . n$ T: o) g/ A' ~
    : e4 x7 ~) s+ N) z2 S% o* y; Q- F
    - s9 o  W& z7 N
    解  (i)编写 M 函数 Fun.m: 2 p1 D5 T* L; B; p

    & S4 a9 R% r% b6 N- rfunction F=Fun(x);
    : w% t5 w# ]! [# [% K& L) W
    4 J) X+ L2 [: A3 Q% CF(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
    ) t, `( B0 j# y8 w5 P
    ; `4 g5 V/ V; {F(2)=3*x(2)+2*x(4); 7 i, O# i. O  m3 t0 \% s* E! C

    ' y9 r( n8 ?, h% D* N% i* K/ h(ii)编写 M 文件
    % d2 A4 l! _8 X  \2 O1 a
    . @9 J4 z0 R1 U7 W* Ea=[-1 -1  0  0   
    ! p  [4 C$ [! ~) r- c# O   0  0  -1 -1   
    $ \- k" U# O/ M+ y   3  0   2  0    ' k$ F1 x' p# _& Y: ~2 L% ?5 a) I
       0  3   0  2]; ' r$ B  W1 D- u# ~' N" d$ v) O
    b=[-30 -30 120 48]'; . s# b8 I0 s9 C7 l8 v$ U/ o" `
    c1=[-100 -90 -80 -70]; ' F$ O3 l" t7 V( \6 ?$ h) f/ l
    c2=[0 3 0 2]; ! I* R& D) B4 y
    [x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
    4 N3 t3 a$ w2 R" ^2 p# x[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 3 [2 \, [- M6 |! \3 _- ^& k/ K
    g3=[g1;g2]  %目标goal的值 $ I; S- r# {) R: A( b
    [x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) ) q2 N/ z" W8 Y
    %这里权重weight=目标goal的绝对值 / |4 \6 H# E; M9 _9 H

    ! m7 M$ s3 S8 u/ y; [

    就可求得问题的解。

    习题0 d: v4 s- z8 {0 P

    " V  y) n$ z3 U% H, Y2 M
    + {! u- q4 c( Z& N5 Z% |————————————————
    0 W' o" v0 E( A' c( F版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。+ n9 B  `) B) b1 e
    原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932& r4 P: V' l5 P
    & l. |4 w4 y( Q+ \
    ! J8 G; j3 t( w
    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-6-14 14:32 , Processed in 0.390317 second(s), 51 queries .

    回顶部