QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2348|回复: 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.线性规划的局限性& U! c7 [. |/ l/ x- M7 L/ ?" f( g. R
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。$ M. a0 l( H$ U, |# g2 T! d3 _& z  F# O% c

    . ~% o& u( e( U5 G- }3 {" |' Z5 t 2.实际决策中,衡量方案优劣考虑多个目标" S! _, d: v0 j
    这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
    9 A& p& P! Q! V& b0 _8 R/ Q- |7 I4 r" {3 t5 @9 A7 z9 |
    3.目标规划(Goal Programming)
    ! \5 k: n4 F- F3 b6 W" J美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。) D* L7 {9 o' V3 K( J% [5 n3 K' J

    4 }& \4 C  Y  W  p4.求解思路
    + u/ n, Q" e6 M9 @5 N: \(1)加权系数法9 G+ }6 R" b2 B
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。
    " O2 a2 p9 u. i$ A( }0 i
      C- D' L% V+ g7 C+ f) i(2)优先等级法
    9 _9 V) t1 P8 l# w% [将各目标按其重要程度不同的优先等级,转化为单目标模型。
    . q$ K, o1 b# ]& I6 N
    3 O8 u* L* ^6 ^5 V& }( B, g, \(3)有效解法
    % M( |6 G, M* K( Z! ]# R8 Q  a寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。
    - N! v2 o+ E9 U! M
    9 v0 o9 Q5 e0 ]9 u8 Y7 I9 v2  目标规划的数学模型; N5 m7 l" p5 K, c
    为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。
      G$ q% O8 I2 Q6 M0 f4 e+ z) `3 t
    ' V: @* `( N" [例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
    * Y# D/ m0 t3 w) a3 u
    ; E6 D( i1 {/ n$ v. z* f/ s: `1 j5 }3 h; r, x6 j% j+ i5 R

    : F' M% {" @9 W; L/ B: f解  这是一个单目标的规划问题,用线性规划模型表述为: ; X+ A0 |3 q/ K2 k4 Z% o

    4 F' q4 m. [5 @% K0 ^, b; K" S& R+ C% W, Q+ c3 Q0 c" l, Z, b

    0 p- w6 m3 d" K4 z  E但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
    0 k0 a8 X9 }( ]% O6 z8 m, V$ j$ @" ~" G; Z# |' ^1 K) L: T
    (i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。. r1 k1 Q5 `: o( K% J  X  H9 p
    0 e5 i& T, p; e7 w
    (ii)超过计划供应的原材料,需要高价采购,这就使成本增加。
    1 ~  n( c" p) K$ z" [. K) i  c/ P/ [/ [3 O! {# B
    (iii)应尽可能充分利用设备,但不希望加班。 ; |) K8 c; [4 l1 ^! I3 O

    0 J- L4 t; \/ ~% H(iv)应尽可能达到并超过计划利润指标 56 元。
    5 |7 k( G% W& G" M9 m( C! g: `+ |# b
    这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
    4 z, B* ^- W( E, R1 Q; I; G4 R+ e8 j3 S' n1 n, O
    1. 正、负偏差变量
    , Z! h/ H% V! b+ i, ?- d0 N; \" C- I' B
    9 f3 H* z( P: e! S8 P; e
    0 V7 s; M" E1 }6 G$ G, H% Y' _( b, z) H5 N7 ?
    2. 绝对(刚性)约束和目标约束
    8 k0 C& ]8 p3 U8 n4 K+ D; r$ \3 z: D1 g  M" t: }' @' e

    . p+ ?5 \' N- f
    6 U% ~' n6 h8 g# a3. 优先因子(优先等级)与权系数 / y6 l* @/ ~6 z( ~

    1 H0 z. [1 e$ Q  T6 r- j- M( J
    9 N6 _% b; i- _# N; p
    $ t" x0 J& H( c% }$ f. K0 |( ]4 L# ?, H! @* l4 p  m. E/ n3 E3 Q0 M
    4. 目标规划的目标函数 0 ~5 [' }) @* b9 V) t7 c" H
    2 v8 G/ j* x: W: s, ~
    ; x" C* T/ \# J+ I. R1 d  A/ r" }

    * @( O; D8 B) `- J对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 . w! a% x" E1 C6 |4 R& W
    ' b. x9 A( i1 {( Z. d6 w! D
    例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  * c6 v, {# H0 q$ w4 D# i
    ; R2 M, N) e$ P* X# g9 k6 W9 d

    $ G# b. ^% }: w/ A, F* y
    8 V$ e1 k5 v. _+ B4 x, y3 b5.目标规划的一般数学模型
    " M; T' N* z; a, b! r. r; b7 ~" _; f4 }( }6 q

    1 y9 B+ p+ Y# ?. I$ ]) |
    7 v+ E) T/ V- y: h
    - ^; N/ M. `+ C& o/ M# ^, Y建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
    0 o2 L' U' Q9 u6 x6 Y( m
    6 G/ Q: J% u. Y/ I2 T3  求解目标规划的序贯式算法- }9 t. z8 ^, `; `4 C$ h+ s' X
    序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
    5 [4 V5 k* l) W( f$ A) `' K! R, \5 a

    + T: W! P1 n* H. G( G5 V* ~+ o. b
    & B  A, G+ h, f# G
    9 A; P, X" T/ K0 `
    $ s1 U9 {! i1 l: z# ]注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
    5 H+ ?0 _/ O& o0 b/ A
    6 H! B" p0 o1 F; H例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:
    6 i! o$ m$ U8 g/ e; i' d9 A
    ( K7 J2 E4 e  u; f" R, s% m. e/ \1 R  B( d

    ; R  t: }8 t, C9 r  [" ~! n3 @(1)力求使利润指标不低于 1500 元;
    8 T" `1 I- ?6 H, R4 t/ _2 X. E9 j6 m
    & A+ k" A4 h  `(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;
    ' J" ~' O& P* I! e' F* b& N2 C4 S) c9 A' n
    (3)设备 A为贵重设备,严格禁止超时使用;, D1 F# `7 u* P, O6 ?$ r  A

    ( \' v4 w# p9 N9 z3 L$ ?! ?. H(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。2 D5 ~; }# n' M, `1 z& @6 k; a

    1 F) K6 t1 K+ R& L( {4 ]建立相应的目标规划模型并求解。) R! @6 h+ i3 E
    ! D6 ?( ^# y* L/ `
    解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。
    / ]* l6 N/ ^& C" p( ^3 d# ]/ D9 V- e5 _4 A8 M9 i% M
    ) G6 M7 }8 `: X) d

    * R1 w. J+ o; V+ q序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: 9 s" h2 G: N; x. j" t

    % Y$ \' Y/ ]. m  _$ {; gmodel: 8 \' V/ A2 h/ Y) E& q4 ?; j! t8 M$ c
    sets: ) m+ ^# w' f7 n9 A
    variable/1..2/:x;
    8 c# L4 _2 W4 n8 b: {S_Con_Num/1..4/:g,dplus,dminus;
    7 Q& k  r; g9 @2 x& @4 NS_con(S_Con_Num,Variable):c; 0 @/ M. V! l3 a. c, H3 S4 B8 l- ^4 f- f
    endsets 9 Y4 j# }  |2 @9 u
    data:
    ! L- N+ S6 E1 h# jg=1500 0 16 15; + ?, [9 O& ^$ f7 Q1 b& d' b$ {
    c=200 300 2 -1 4 0 0 5; # u/ V( O6 S. ~6 \. e8 U/ N
    enddata
    7 V7 a  i6 }4 G5 f6 F0 w6 O% J# N3 Lmin=dminus(1); 0 _2 A( B/ j% d
    2*x(1)+2*x(2)<12; + h% u* b  H4 o7 j: o
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); , R" Z+ g- T, W0 d
    end" r* a# Q  P# Q& }* _3 V
    ' z0 Q6 J/ i7 O  ^1 m

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

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

    model:
    ( J9 r% C8 x% Z  a2 usets: . N; b4 J( X) H/ \$ R: T. V' z& W
    variable/1..2/:x;
    ( s3 S" O3 H+ ]S_Con_Num/1..4/:g,dplus,dminus; 0 b9 M0 `; l0 w  y1 J  T9 k
    S_con(S_Con_Num,Variable):c; * E/ i9 O4 D* W, D6 M9 p, |
    endsets
    3 t  E* J" R5 i$ |! `# e) odata: # q! y" `4 g$ V6 x, V
    g=1500 0 16 15; " L% x8 c- ]4 W6 [# \  W' b% x
    c=200 300 2 -1 4 0 0 5; & C& B7 t: v2 H- ?
    enddata 8 ?1 w5 w& e0 c; A. A
    min=dplus(2)+dminus(2);    !二级目标函数;
    5 t3 I; m9 F" |, B5 Q2*x(1)+2*x(2)<12; " ^" ]* u7 k7 i3 {
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    & D$ h- G$ q4 I7 Z, O& ~4 H1 fdminus(1)=0;!一级目标约束;
    2 f# Z, J) L* \$ `+ c@for(variablegin(x)); # x+ W8 c- \5 W, h0 e
    end
    2 L$ X: Y  H6 x4 d0 x
    8 k& Z8 ?9 i6 `  u' `( S3 u3 ^求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
    2 C. G% C8 `( b4 e! Y- d7 m# w& }4 `% t$ Y1 P; U& `/ n( M: b
    model: - l0 ~! Y6 t; @# h1 m
    sets: 5 s6 p. u7 b3 V2 S3 S- P+ p
    variable/1..2/:x; + m1 \5 ~5 I4 y2 ]- Y# a
    S_Con_Num/1..4/:g,dplus,dminus;
    2 h7 z7 H! t1 R# c  D0 P5 |S_con(S_Con_Num,Variable):c;
    ( i; D* u& a8 T5 p9 a7 ~endsets
    6 m( q: @& `) C7 O) W) c% i1 @& Xdata: ( U, n. L% k# ?
    g=1500 0 16 15;
    3 t: K, M3 [" W' P5 Ec=200 300 2 -1 4 0 0 5;
    * U# q$ o( q) l( l! |. P5 Yenddata / b0 Y6 T$ g/ a) {9 m
    min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; 3 L$ g( E' C0 s
    2*x(1)+2*x(2)<12;! f" k. Q1 s# l- @+ B
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); : A+ E1 j9 K* F/ M" v
    dminus(1)=0;!一级目标约束;
    + q* b, T6 B% a: `3 Fdplus(2)+dminus(2)=0;!二级目标约束; $ J/ }! j+ v3 X. s
    end. ^# o% m! F( A* N0 ~) E% x

    , l+ _0 S, b) g' ~7 T, C目标函数的最优值为29,即第三级偏差为29。 . f# V- x. h5 D

    5 h- G4 E0 o* ~9 o分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。
    & L) O) ?4 I' W+ h/ x
    ) a3 P$ S7 [1 H& _3 b$ W上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
    8 y* ~, o8 v  L. n' P9 ]9 G' s/ m* a& c% L4 @  p6 o
    例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。5 S  N1 a3 @& w

    1 W9 P1 J; n7 o% dmodel:
    $ ]0 p' @4 p: y1 vsets:
      T4 Q2 n& Z3 m% P  mlevel/1..3/:p,z,goal;
      J0 o# \. U3 k, svariable/1..2/:x; 9 v2 _4 o4 I' W  N% M/ a
    h_con_num/1..1/:b;
      e+ a5 T& q7 X# M1 X# i' l" F5 r! cs_con_num/1..4/:g,dplus,dminus; 0 D/ S1 f# o! g1 J& W( P0 G
    h_con(h_con_num,variable):a; 5 {2 L2 T1 Z- ~/ X. |8 U
    s_con(s_con_num,variable):c;
    & \: Q4 a5 d6 x: x7 M, R& a! bobj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
    . }% f4 _" F* T2 s1 J# H# _& Hendsets 7 f1 d+ L! E3 R( b% y* y- \/ r" y
    data: 6 |( [; k6 T3 }8 O
    ctr=?;
    * k5 c3 u, |: {% @2 T: F0 Egoal=? ? 0;
    * N3 Z/ v- B0 W- L/ w6 A1 A" Eb=12; % j9 q8 o0 W6 k" m; E" k5 v
    g=1500 0 16 15;
      u) t) N' y1 \, f1 i: M  oa=2 2;
    1 v& D( H! e% m8 Y% Q; s8 Ec=200 300 2 -1 4 0 0 5; ) C( b1 l: U* R$ P
    wplus=0 1 3 1; 4 J$ D9 h9 z' Z( E
    wminus=1 1 3 0;
    9 p& n7 e* `6 m+ c3 y0 T# v% R/ Lenddata
    6 Q, q$ G1 E8 ^" y" fmin=@sum(level:p*z); 3 X* u& M3 l  S& \# b% ^% ~8 a
    p(ctr)=1;
    ; J7 }; q5 [  x& q7 U) ]@for(level(i)|i#ne#ctr:p(i)=0);
    9 o: u* `4 ?$ k% a0 M1 H@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))); + N9 q8 V; J/ \" R" l) W  O1 Y$ D
    end
    ) R. `( h1 r4 Z6 M- D! S( {' W
    + U- R" h7 O# W6 ]6 \9 U) {  C. S4 N5 K& t3 F- C8 L5 I2 T

    % k+ d& z. s5 H7 N/ K9 [) c8 G5 H
    0 s! x4 D! e* i% s/ g5 j3 c' ]1 k( e8 t$ N7 b: n2 @
    4  多标规划的 Matlab 解法

    多目标规划可以归结为


    + [- }1 \$ ?" V0 D8 B0 Z! @& e& ?) a( X% G8 Y

      b. C9 A  Z; ], Y; C[x,fval]= fgoalattain('fun',x0,goal,weight)           5 H5 X: ?6 I% U
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           
    1 Q1 V! u: t6 E& |* F[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    9 g8 {9 m1 q7 b+ S1 i, P" g- A$ g[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
    * X; F8 Y& u, D$ V6 E  q5 ?! Z1 E4 p5 g$ @( f
    : @0 q% m: w" [) l3 T
    要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
    - J9 a! V; e. h: D 例 5  求解多目标线性规划问题
    # T; j+ g/ M/ m5 W! J
    # P- Q1 W& x4 Q# ^
    ; D' G( _% [& S5 c9 \+ I: t; ~9 L6 f0 H3 W9 Q
    解  (i)编写 M 函数 Fun.m:
    5 C& ]7 V( O+ O  u3 a+ [' G3 E- Q; G' u1 r2 _8 C+ O
    function F=Fun(x); 7 O& W3 {5 q3 f4 v& f3 Y: L

    - f) {6 V) D) e, K' oF(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4); 9 S, d- F6 W$ p3 i" E; ]
    1 ]7 n5 z5 X# C- @
    F(2)=3*x(2)+2*x(4);
      R0 h8 g; S2 `! {% V2 q
    ; V% u' f, Y0 R(ii)编写 M 文件 & G2 [  U7 g. o# Q! A6 Y% x7 b- ^% ?

    " Z3 x$ k" s1 C; _# ha=[-1 -1  0  0   
    4 ?4 W; a, j, O" I! k  T% P$ I   0  0  -1 -1    : e7 ~* n) W% C+ Q' b
       3  0   2  0    # X% f* b% g7 Y* t/ E% W3 v
       0  3   0  2]; 6 V$ R: W/ P) h
    b=[-30 -30 120 48]'; ; A* o. K7 ^4 K. ~/ f1 k4 D. Z/ v
    c1=[-100 -90 -80 -70];
    ( w6 F7 {. B; S8 y, ~5 b0 l0 nc2=[0 3 0 2]; " J. o# c5 a5 x$ f
    [x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
    9 e9 T$ L( \4 i; d8 {0 {[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 9 Z1 w( E; s8 H8 }" M" ^3 ]1 K0 _
    g3=[g1;g2]  %目标goal的值 2 i' L2 v2 e3 N9 @
    [x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) $ c7 Y! G- m7 [) c. w& T
    %这里权重weight=目标goal的绝对值 $ g4 ~7 d( }/ {# j2 ?8 Z# E5 K: e

    ; N- k0 s& v- ^  \" m5 n+ M" ^

    就可求得问题的解。

    习题
    # J" I7 L' }4 ?' o/ \1 O! ]6 _, v8 Q! J+ w0 G8 A, M

    + k% k5 O+ E# A$ o! R1 u3 H, H; ~7 j————————————————
    : K9 h: N$ X2 E9 e9 D7 C3 \( }版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    * C+ o+ M% b! K, J( h. ~: p) z原文链接:https://blog.csdn.net/qq_29831163/article/details/894889326 E5 {+ f8 q- A! d* C
    9 K1 g# Q/ O3 y& L  Y+ n
    5 ]9 h, g5 {5 i
    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-18 01:26 , Processed in 0.613162 second(s), 51 queries .

    回顶部