QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2459|回复: 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.线性规划的局限性( n5 [6 [& v1 g6 o- K9 `) u
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
    ! @7 C( ?9 h# w) q2 P  S, D8 u! H( ]0 k. X, k5 y
    2.实际决策中,衡量方案优劣考虑多个目标* e, @; s; m3 v- @* n
    这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
    & ~0 ]( l) Z% i! A% Y) b2 k& @
    0 Q7 }6 n" s4 \9 N4 @" J- E9 K- s3.目标规划(Goal Programming)  _' L& n& p! M0 y
    美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
    0 l5 r* k1 k& W  N# O
    * I% J' V! {$ n! J. S' z4.求解思路- |: q1 f: F$ _' ^/ _4 C
    (1)加权系数法5 \0 N: |6 b( l. r3 _. u7 b
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。( s; h% s& T3 [7 R8 J

    " B. i! I: {7 P! a, P5 m(2)优先等级法
    : k! w. J  @( P2 W* K将各目标按其重要程度不同的优先等级,转化为单目标模型。) z9 I  P5 H* \8 o
    + C; q, ^* r) g7 m
    (3)有效解法
    , l! T" @( C2 l6 o  E; j寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。
    0 d' R2 A+ M3 q+ e9 C- ^; w9 [4 F( ?; f: [5 J
    2  目标规划的数学模型/ r+ }  l, f: B
    为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。
      F7 [" ]% C- C: \; e3 k; w& M& l8 d% {1 i/ C( \8 W+ Z
    例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
    ! Q+ i. ^' D: b0 j7 v5 a
    / c! B: O: y; Y# l% U# t6 s8 q
    1 T" c9 ~6 o# I$ F% u  K# e, f
    8 h0 _, }% c8 u; S& S. ^解  这是一个单目标的规划问题,用线性规划模型表述为: . P4 i# A4 M5 |4 ^

    ' c# i( J7 q" Y; l# _2 `5 K4 b3 {0 L2 o1 Q) H* S# T3 A
    5 F; @. `' j+ w& u: o2 b
    但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
    * ?9 {+ K- w4 w' C1 T' E/ T2 D9 k% W9 J& S7 V/ q( \
    (i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。" W& b" D$ `$ \" L& q3 M
    # v; |/ f; U5 y
    (ii)超过计划供应的原材料,需要高价采购,这就使成本增加。! {( y' N9 J# z& [* v

    - X) g) P9 @% w* e(iii)应尽可能充分利用设备,但不希望加班。
    ; m# r/ ^0 ^9 J2 ]& q% Z' ^& v- M/ \9 o' Z: G; }2 {
    (iv)应尽可能达到并超过计划利润指标 56 元。: }+ N' T! y' R# M

    0 J; A$ I* s2 u1 u3 c这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。 9 V. E4 p0 F) {6 n/ f

    9 a" \: x; V6 D* _7 J1. 正、负偏差变量 ) h$ u7 p1 ?2 y0 B& g
    " x7 ^- i# {' `  a5 @

    " C8 s* U4 D. D" a# T5 Y% i! G6 f: S0 N9 T- V7 ?
    2. 绝对(刚性)约束和目标约束
    2 p4 |) k' |( v' k7 K$ l% O( C* i# v1 U1 c+ ?
    : Z0 \/ Y5 U2 J5 _/ g# X

      n; ~6 u* [# g4 j7 U' M3. 优先因子(优先等级)与权系数 , q& t! z+ w' L: `6 C9 z

    + ?+ K( U7 ?+ [2 u2 v: P. }9 v. U' Q" l0 B

    - u) M: A! q5 }5 Y8 X+ u9 }8 F# D. p2 Z8 F+ a: U; a
    4. 目标规划的目标函数
      W% u, y2 ~/ r$ b& I" o
    8 i6 ]$ ~# Y  V! N/ l# H- L; q# s) S9 A" g  q% ~$ ^0 g6 r

    & i! B9 P$ t6 U% u& k对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 3 f- u, s* h9 p' L0 b
    . U+ h! t% g( f' t
    例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  
    & g% |" b. Z, W! A% v, D9 J" e0 a, p6 e
    / T$ ^* i0 u; ]) K; h

    7 \) m, b0 }) B: w0 x6 g4 w7 Q5.目标规划的一般数学模型
    4 p. E. @  N0 p$ T8 O
    & |# f. C9 |( Y0 @* s! K
    ' V) P" h3 s. P& r9 @* _* j3 S$ L
    + S/ p' W- W3 r
    建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。 $ I$ C4 z- g0 N4 V" G

    9 Q2 [# h& j0 y3  求解目标规划的序贯式算法
    " M$ b# X& X- t' S- _3 |& a序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。 . K5 r( k' b& _% I5 U+ q" L
    $ G1 ^3 X1 @3 ~" u/ H& W5 R. f$ o
    ' n$ x7 ^' |  A  S$ G5 L

    2 a- n( s- N* v* R3 T0 e7 D+ `! f; Z( B. G- `

    ! t- _' q2 a9 W; _, p注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
    . Y% A$ A  B) ~6 ^6 P6 ]( |& [+ M; i& ?( ]( B; k. \4 s* C
    例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:
    8 `9 ~% c& C# }! |; i/ A, q) a- D3 ]: o$ f
    5 R4 g; _- o. g3 I2 M

    : x2 V9 ^9 P/ t# }6 n(1)力求使利润指标不低于 1500 元;
    + E7 x+ u: E# q, V& g5 j$ V0 i/ I6 [5 @6 M$ U- \% e
    (2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;
    9 r. l' U, O# C0 O& V7 W
    8 s+ I0 t4 ?4 j0 m1 Y! q7 A, \- O(3)设备 A为贵重设备,严格禁止超时使用;' n2 o2 b! |: o0 u. D5 {' K( Y
    * R1 o0 r% ~8 B* U6 d6 s7 O
    (4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
    # Q; m* l6 n+ m3 m3 C' H- s4 L- a  N
    建立相应的目标规划模型并求解。, F# [2 I2 h8 ~- J  e% ^: P

    1 {8 X( L4 j' W% ~解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。   [" w5 q" L- X$ O" B

    # N6 X' d4 t5 ?8 p, k
    5 z$ E& O1 W8 ~: F( y+ k
    " w( P$ I5 d* |+ E  ^9 |9 B序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: 4 X+ r" a# r* p0 G" ]2 w

    ( B/ V2 P6 K" Y. y) e" q! K( A9 e# d8 zmodel:
    ( i5 q' i# y. usets: / ~( @7 {+ f" y+ o) W+ q
    variable/1..2/:x;
    4 ?* c3 c$ y8 ~1 `' ^; ]/ gS_Con_Num/1..4/:g,dplus,dminus;
    2 B, X" z- I" h% r, k  H- JS_con(S_Con_Num,Variable):c; , J% @$ y; |. `5 p) e
    endsets * |6 N9 n" Z; b; c$ n
    data:
    ) @- q- q8 e- P( P8 o& {g=1500 0 16 15; ! v; p! \1 r$ p
    c=200 300 2 -1 4 0 0 5; 9 N# f4 h6 |7 b7 Z
    enddata
    5 n4 W* k0 \* I8 |& n0 o) pmin=dminus(1); 4 U+ F' h# _: z
    2*x(1)+2*x(2)<12; & ]' C1 J) H/ l. l3 ~2 ]$ |
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    0 P7 O4 r$ D4 h% n$ Bend( h( s( m3 `! B% I: j/ F/ X
    9 n* J' E1 w3 }/ t. L

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

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

    model:
    8 N+ V3 ^+ c, |sets: / Z6 x. W" @" L: `
    variable/1..2/:x;
    5 ~, G1 G1 Z$ v( h5 h4 s  ?S_Con_Num/1..4/:g,dplus,dminus;
    6 ^2 }4 ]4 A$ m1 Y5 c4 nS_con(S_Con_Num,Variable):c; - v2 X' D- V# S; E$ o0 C2 @
    endsets & ?' w, [* t2 h" J; l* @0 x) x6 T
    data: $ L9 h+ q" f- c6 T1 j; i0 z
    g=1500 0 16 15;
    8 r( p# ^" {! r5 C4 P0 G' wc=200 300 2 -1 4 0 0 5; ' n5 F6 Z+ q7 }1 Z
    enddata 6 |& {( {& u  _- E( Z# A4 r
    min=dplus(2)+dminus(2);    !二级目标函数; 0 ~. D& A  M% p+ E
    2*x(1)+2*x(2)<12; 6 w8 F* g  n; G8 L# z' E9 E  ?
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    ' O& B6 y9 Q, v; x& z! I* Cdminus(1)=0;!一级目标约束;
    * G! f7 A/ N+ B, d4 T@for(variablegin(x));
    3 y# o7 M! H6 [2 uend + \; T" H1 f; j
    # E' E8 U8 x1 B& x9 T$ m' b
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
    / r4 g, z6 j/ H& Q5 d6 E6 p0 h& {8 @9 s4 I/ N$ Z4 ?
    model: ; `8 G# o7 H1 j1 Z+ D# N: `/ p
    sets: # J, u( }9 ?% \) D- e# o
    variable/1..2/:x;
    6 ^6 D7 t) ~' a  h5 `- A. LS_Con_Num/1..4/:g,dplus,dminus; - R& y. _/ G9 c4 \
    S_con(S_Con_Num,Variable):c; / x  ~( k/ n! ~# }' ^. `
    endsets ' W: z  g  ]2 ~. E
    data:
    & K  ^. }+ V& E* Y; E: ^g=1500 0 16 15;   K3 d- p) e! d2 c2 j& F
    c=200 300 2 -1 4 0 0 5;
    ' P2 E2 h3 g6 N  {, J2 r/ }enddata - F8 J' F5 {' Z( q' w' C
    min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数;
    0 x3 t( d3 ]0 o6 J6 M- T5 Z; e  t6 ^. A2*x(1)+2*x(2)<12;
    , h- A7 v: M  K( J. b6 \* J @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    5 ^1 {6 h/ d0 S) a0 v2 P- Udminus(1)=0;!一级目标约束;   k6 G2 G' L1 a2 }- {
    dplus(2)+dminus(2)=0;!二级目标约束;
    / F* [3 Y- o8 ^; j# E; b' gend: K- A8 q# h1 [9 g/ X
    5 z+ N, \5 P+ ]- |1 x3 j
    目标函数的最优值为29,即第三级偏差为29。
      D; ~( P- b0 q4 @- u: N! t) j# t! s+ `0 l
    分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。6 s( {/ k! Q4 r$ p( d; B
    / g* H. j$ R7 s. H9 E. n5 p
    上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
    7 s- r& @9 X0 {4 A
    5 t7 i2 L: I) M: Y* i. O5 T例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。
    , o) f+ s, Q) M4 V" N- \: D5 u1 }. U3 q5 f
    model:
    * A, O' L, O, `$ l# Y2 V- nsets: ( F, u- R8 A# x
    level/1..3/:p,z,goal;
    * ^) [: ?( z; nvariable/1..2/:x; # {/ H6 ]; E: W4 }# B  Y
    h_con_num/1..1/:b;
    ! o4 g% s; q* ^% ^! Q  |7 Ms_con_num/1..4/:g,dplus,dminus; 3 Q5 ?* N( F2 {( `* C
    h_con(h_con_num,variable):a; 3 v; u- t- Z+ F& m! `$ e7 _
    s_con(s_con_num,variable):c;
    8 s8 C1 Y- j/ W! t6 z: }obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus; ; C7 C% ]3 t, _# g7 s, @
    endsets   e8 s3 I9 o' H
    data: 4 Z) N; o0 }. E8 i4 g& @0 A
    ctr=?; 8 k# g" K6 ~/ [, Y
    goal=? ? 0; ) h. A: i) J  ~7 e1 x
    b=12; ) [/ T! u8 W3 q  M; T7 K# }
    g=1500 0 16 15;
    + ]" |4 U- R: f/ B; J5 |a=2 2;
    - Q" R5 d6 u$ d  Q' `' sc=200 300 2 -1 4 0 0 5;
    7 O( n! B" t- m- L/ @* s; o$ Mwplus=0 1 3 1;
    / V( ?! G7 k$ s- swminus=1 1 3 0;
    " C3 n# S* t& \& G+ nenddata 3 L( w% \$ ]9 \/ Y6 \
    min=@sum(level:p*z);
    - {" ?/ j  N% c! h5 T9 Wp(ctr)=1; 4 H* S* ~+ @0 n! X
    @for(level(i)|i#ne#ctr:p(i)=0); ! S+ I2 d& m. ]
    @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)));
      F: C+ N; ^: h; X) v+ lend
    9 I+ h) k+ o% |# ^9 _5 C  W7 c7 ?$ p1 e6 g1 N6 d

    , J% Q4 I5 s; ]( Z5 T" {9 G: r) h8 r) r4 c& V4 h& m

    / b' S# c1 R7 N6 ~2 x# ^/ ?  Y+ E" u- e# W+ ]5 j; b
    4  多标规划的 Matlab 解法

    多目标规划可以归结为


    . T1 D2 T* H0 v: t9 L8 o: {
    * K, `1 W, S9 d2 w2 \$ U! {0 a: U: I& {0 r. M, m+ A& j. E
    [x,fval]= fgoalattain('fun',x0,goal,weight)           . p8 [, \$ i& n2 ]9 g4 a  s
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           1 H* `0 j. p' L- p
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    * b+ [% l0 \, @[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) 4 |0 J0 P7 A& o' m9 R7 T

    7 }  g/ }1 U( i0 s6 ]# A
    1 O' ~  A; g. F. Y- h要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
    3 k4 Y0 c2 E' B. i5 f 例 5  求解多目标线性规划问题 4 V$ V3 g/ N  p7 ~. e

    0 K; ?2 ~8 |- B
    ; ?* |6 _9 m. e# O. N! v+ h( Q/ s. n6 K+ @5 Z( ^  n9 h" o/ v0 T
    解  (i)编写 M 函数 Fun.m: - ?# C) p3 L9 E! O

    & u  p# g, g* z% Yfunction F=Fun(x); ( l4 k( r- O/ Q0 E
    $ o, D5 I2 r. ~6 U
    F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
    / x- D" V8 @9 l; v: [: `0 l8 R! M* u9 Q6 N) B  _* O( ~& U
    F(2)=3*x(2)+2*x(4);
    # S4 o; Y  S# u7 Z8 z0 h0 |
    * L3 u+ z% R/ I4 s(ii)编写 M 文件 6 G: X: Y) k" Q9 s# h; O; x+ j: {& D

    : r" l- U. x6 i( Wa=[-1 -1  0  0    / N' L+ A3 H( w7 T' r, |$ S
       0  0  -1 -1    6 x, T/ C2 Q' h4 l: h. ^0 _. T- Z
       3  0   2  0   
    : }/ K3 N8 S7 F2 I7 e   0  3   0  2]; 8 v4 f0 A& `1 ^. o2 M
    b=[-30 -30 120 48]';
    + t+ o' c4 }$ f' \+ t7 g$ I/ Cc1=[-100 -90 -80 -70];
    : I, f$ J8 u- Sc2=[0 3 0 2]; : |( O( r* ^7 w- U) K6 U
    [x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值 8 r2 J& @6 P" ^2 k  K, _2 p
    [x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 . O% l4 b2 D) z1 O  |( N
    g3=[g1;g2]  %目标goal的值
    & X+ i$ [' \, B3 X. K' \3 k, M[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) ! Q  N6 A% W9 Y; s* ?! Y
    %这里权重weight=目标goal的绝对值 ! m& _$ w/ v8 S9 I

    + ]5 S& R9 M6 C+ E

    就可求得问题的解。

    习题
    % w, b2 K4 v1 \# J$ X! E; k( X# N& J" L5 m) m% a, g, u6 c3 r

    6 X9 n9 m  L* e————————————————: n% |9 v1 |6 }
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ! S& A( U3 \1 ^7 Y# S& J原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932
    $ |7 o# ~, O& |  H( r7 {; o3 z' U" T
    2 b! O3 e* c, y
    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-9-13 04:24 , Processed in 0.289936 second(s), 51 queries .

    回顶部