QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2432|回复: 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.线性规划的局限性6 O8 Q) X) H' v) F9 h( N+ r
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
    & g; {( b4 k* _+ C) R; Y# J
    2 ]4 T- ~5 L: B3 P8 G% Y/ s# P# h 2.实际决策中,衡量方案优劣考虑多个目标
    ! |# U- ]9 h* B3 E6 E这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。. F! T9 k4 g: D7 s. o$ ?
    " t2 a9 c; X" I$ a! g- W0 ~  A) i) C
    3.目标规划(Goal Programming)8 D( Q9 |% z2 o9 r
    美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。+ j7 p  M+ @( t' S2 g7 @
    0 c2 O# V  X7 O, Q7 [$ s- j. @" E
    4.求解思路
    3 H& p- x0 A% T9 w3 U4 D(1)加权系数法' p4 d: b; p# T. D& o" W
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。
    ! z$ Q& x7 g) l5 C
    ( W, N3 V2 h$ g) K7 K(2)优先等级法
    8 _2 l3 w6 n& \8 R/ }将各目标按其重要程度不同的优先等级,转化为单目标模型。* W2 H, E: e9 P3 p/ B

    5 S" p6 R! l5 x+ h5 k5 Z(3)有效解法' Z6 z4 e+ ]/ d1 q1 Q# x
    寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。
    ; i+ r5 i& e* N; ^# f0 i6 C# [: r9 \, n, z) e. Q! E- I7 w
    2  目标规划的数学模型  n) {, R# ?6 M( n
    为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。! P. ?% v- p) {- n! Y# c: ]
    + w0 l- y( u. o  s3 {  I
    例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。0 }. W; N- l- q; u( \
    - [( q" y0 M( l- s9 F6 |- b

    # j5 D! J, y" j+ N% X5 R8 R- f8 a5 D! s) K) I: P) J* s
    解  这是一个单目标的规划问题,用线性规划模型表述为:
    0 v$ @$ Q. q% B
    - p" p, @7 \  t2 G6 U& T8 u* w$ J- |2 C/ s7 p0 n

    : Q2 f) E5 x+ y5 p  A6 X' ]但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如9 J- D$ N9 d7 Z2 ]

    + y" A- R- R$ @/ N(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。6 i6 a6 X$ c8 i% O8 C8 l

    7 T4 R9 z2 p) l2 d8 R  c9 `(ii)超过计划供应的原材料,需要高价采购,这就使成本增加。
    + A7 |% N5 S5 z# w. v( T- R
    - K3 x. u. W$ Q& ]# C+ ~+ d0 X(iii)应尽可能充分利用设备,但不希望加班。 % q3 X1 d( F: a! N. X
    . g7 g& C7 m4 G) d
    (iv)应尽可能达到并超过计划利润指标 56 元。
    ; A8 j4 z# e4 W# D9 D; {7 N# f( ]' D! Q+ j4 y
    这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
    + ~. Q* \2 \* Z) c6 P% g' {, j
    5 ^7 h" H( h5 k. k/ q+ w2 k! l1. 正、负偏差变量 5 o+ X) \% w$ K" N
    ! C) F7 o6 g& k5 ]2 v. A7 p/ u
    / D, K% l# }1 p& U

    & [5 ~( t8 ~9 ?) l2. 绝对(刚性)约束和目标约束
    ( L9 ^  C$ P7 @6 S+ a+ `2 d
    ; d1 r- s/ m; S( \4 @7 T5 N; s' y0 w" ]) E; l# N. e

    ) E2 N1 T" z9 D( P" H8 K6 g/ T3. 优先因子(优先等级)与权系数 $ z4 D7 H2 `! t3 z( b  P- v" I; V

    & X0 w: t& E2 S. n3 I7 [8 U: V% }$ l* Q2 c2 r0 o0 S. a

    ) o* ^; y# |7 F# _1 m- H0 m8 R) h& E8 Q: `& t9 X
    4. 目标规划的目标函数 0 d; v8 B( @' T5 h$ O9 V  e
    - |/ [! u5 l. I1 U7 s7 I
    % b6 Q, e( |& N% x

    0 v& J4 e& R( d- O对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。
    $ A) q+ e! v5 y' X  p  p8 Q
    + T- P) l9 o4 J9 K$ P3 R例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  ' z- p& d. P4 B/ g6 O

    + {7 g" D0 I8 h- H9 m: ?* T) J, ?: ]4 C# |

    % Q; C5 s) r3 m5.目标规划的一般数学模型
    6 C9 _) s, B& R6 ^5 o
    ( y  }3 A5 m! A5 P! {. ~9 n4 F+ X8 M8 c) x+ T( Q) Q
    0 ]; T: w* p: L. B5 [
    9 m/ D# K( y7 d; v9 l3 Z
    建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
    * r: B& u$ W* c4 J% J" n4 p
    9 I  b( [) w8 s' E: H" i6 [9 J2 J3  求解目标规划的序贯式算法
    # d; \# C5 }1 A1 ]5 p" k序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
    6 U* x% a! I3 `+ V5 b7 R) O# N" C) a( `% }

    ' f; X% T. R2 S7 k% K3 S
    / s1 `: c0 [: w
    7 ~, L, `5 w/ ~: B7 U4 o5 ]' ^  v3 O- a( o7 ^% n6 o% R6 E1 ?2 I
    注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。 ( R8 a1 P5 a$ z/ \# ?1 ]2 Z

    , Y; n1 t; }5 e& h& x# |例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:
    ! Z" {) a% W1 j& J1 @5 c0 Y7 T* ]
    7 N, A* w/ v! F. E% Q, w* I6 l* t
    & |* G% j5 M  T
    0 j& T6 q0 o/ I! x# k(1)力求使利润指标不低于 1500 元;
    5 b! u! W: w1 m6 r* ~3 T/ b/ `7 K
    (2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;
    & b2 ^4 ~0 J5 E0 X, _8 @* I1 s' s/ e+ v1 J* M$ ~
    (3)设备 A为贵重设备,严格禁止超时使用;6 ~& c4 C3 m  z* M

    : m+ J9 h2 `; ~5 b* o! I* I(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
    ! e7 k8 n1 G2 T/ i2 J# f
    $ X0 E9 j% ~7 b0 a" H建立相应的目标规划模型并求解。
    1 Q- r$ U% Q( i; ?2 Y% U
    8 T" x) X" P( o% y; S# J: M. f解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。 ; p* o' s& n" r4 p; `9 t
    4 ^8 p) I1 f+ }3 b9 c
      y' B) J, y, Z8 Z2 g, z
    0 A4 w: t: i( p& v
    序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下:
    9 ~3 X3 S2 b; c) d3 X
    " X6 u: }, ?) y$ ^; K7 o# zmodel:
    7 w( d: Q% Z' u; z" fsets:
    ; z  m# I0 Z' ?' g' F9 Avariable/1..2/:x;
    2 r9 p6 x$ w4 b/ K5 HS_Con_Num/1..4/:g,dplus,dminus; + a, {% H& W( a: ]& Q, ^1 \) X
    S_con(S_Con_Num,Variable):c;
    9 _& R1 w- ^3 N+ K3 M4 mendsets , b$ \- x5 T. h6 S; K( V/ v" H+ O" h
    data: 4 B4 f; Q5 H9 h4 K) g% p" [0 p6 L
    g=1500 0 16 15;
    & ^6 _- R7 M3 y, w7 w  `c=200 300 2 -1 4 0 0 5;
    , B& Q. Q! x2 S# C# ~) Fenddata
    + Z+ \; i2 L% _  N! {/ Y( X8 u) R# I8 |min=dminus(1);
    ( [0 @# f1 D3 }: `1 a. g/ z2 _2*x(1)+2*x(2)<12;
    9 ^/ i0 h0 h0 f# O" \2 r2 n@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    6 f+ w  V$ [  {! a8 k5 m& _9 T. Fend6 r) g, a; T- E2 c4 C* O6 _
    ) E/ B: L* U7 D3 O3 P

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

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

    model: 9 W6 s/ Z) d/ N" r5 z9 g# B
    sets:
    # Q4 y  o( e" s. \variable/1..2/:x; ' Y& ?4 C& J) E
    S_Con_Num/1..4/:g,dplus,dminus;
    $ \0 h1 F' p* t/ K7 wS_con(S_Con_Num,Variable):c;
    # L; P4 b: j4 V% s. Q3 v- S! hendsets , j1 U* {% b# Y6 U+ t
    data:
    * |- n, O% P0 M2 o1 A4 j3 Z* Y3 ag=1500 0 16 15;
    7 w5 @7 s. j& x' Wc=200 300 2 -1 4 0 0 5;
    3 N' A9 a" o, Menddata & ]& M8 z; R! }4 `% ^4 ^5 l
    min=dplus(2)+dminus(2);    !二级目标函数; : I1 G1 j+ Y7 W& M
    2*x(1)+2*x(2)<12; ' I6 o  u% b" c" }/ ~3 t& K
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
      C  x$ S' ~8 z; K& Gdminus(1)=0;!一级目标约束;
    + W5 D2 s' n8 x0 J9 w8 A8 o# s' y@for(variablegin(x));
    ! d( F3 C5 p: `5 B  Tend
    - {3 [' \% K2 L+ Y3 j* U4 K: g: e# k
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下: 3 R; {* w" K6 d5 d' ^, h

    ) w# J' S( D4 Y: \model: 8 x. o& o8 i# y: d- F
    sets:
    & ?3 L- z# a1 V* V1 [' x% `variable/1..2/:x;
    ) o  R7 b4 S" f3 r6 J+ ?. r8 H! oS_Con_Num/1..4/:g,dplus,dminus;
    * z9 E. D, w' D7 q& O$ i8 X8 c6 gS_con(S_Con_Num,Variable):c; ( V1 P& r2 ?' _! E
    endsets
      s' R% g  c) I7 {$ o  Mdata: 0 b8 \8 }+ n) S
    g=1500 0 16 15;
    9 |2 a. ^( L4 y  {. U8 {c=200 300 2 -1 4 0 0 5; % f7 A6 c, B4 k1 c
    enddata . l) b( D$ _( V$ g6 j, B: J& k5 D
    min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数;
    , s; M8 [7 V. Y8 n2*x(1)+2*x(2)<12;
    ; L$ I1 r+ P) e; K8 [* ^8 R: X @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    4 |, Y% Q! h9 X2 [; B" m# A" L  rdminus(1)=0;!一级目标约束; ' r+ ^0 F2 U5 r/ `6 p/ p4 i; ^
    dplus(2)+dminus(2)=0;!二级目标约束; # ]3 w9 L  p% d3 i# X" V
    end% ]" \# `) V" m5 r$ ]* }3 k
    * ^9 U, Z' t9 o! I
    目标函数的最优值为29,即第三级偏差为29。 " B/ M  D* w2 t; d" z
    # }2 T" e( }8 o/ ]/ D9 ~7 L
    分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。0 D) E% U( b# H6 G/ J, {8 ]5 B* m
    ; g) o; `3 g! E; D/ t
    上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
    / H6 C1 D9 j  o& T: S
    $ @& ]5 W& o& Y- L  m, ?例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。3 n& N5 Q% ~) k9 y# _# e: n

    6 l3 S( T2 f. J9 [model: + J" K! ~6 V9 L8 n
    sets:
    # {4 b( A* J' D' w5 p& U- elevel/1..3/:p,z,goal; / J- y- M; S( a4 ?
    variable/1..2/:x;
    + F) e  V6 K% M! hh_con_num/1..1/:b; 5 L5 m! X$ ]; i8 H
    s_con_num/1..4/:g,dplus,dminus;
      A- m5 ]# j/ n9 Z- {h_con(h_con_num,variable):a; . ], T& ?( l0 t6 h  i
    s_con(s_con_num,variable):c;
    ( \" K. q9 t/ ~8 [: X0 B1 M$ W. W! Zobj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
    0 R" ~" e. z/ t) @7 ]' u+ Tendsets
    ( N" Y* @+ c. K) J* X; L6 X& ]9 D& Cdata:
    5 R" y- ~/ V% j5 t3 fctr=?; . Y0 I- K- w6 T3 }) F
    goal=? ? 0;
    $ e6 T2 y) f) N- k) Lb=12; ( q( i* r1 V% ?  o2 x
    g=1500 0 16 15; 1 @( f6 r/ P( C3 I
    a=2 2;
    # ?4 S  H+ Q- P. g) o- Hc=200 300 2 -1 4 0 0 5;
    5 B# U$ y8 ]( ?& S% o3 f" O6 P9 `wplus=0 1 3 1; ' W6 @) X+ n& ~& e
    wminus=1 1 3 0;
    4 e0 \% x" Y8 y( ~enddata
    ; D  g8 ]' [+ z4 E- D/ [. E0 bmin=@sum(level:p*z);
      T  c% {2 {- X' dp(ctr)=1;
    ! r- s( x9 F4 y8 Z  L/ S0 q@for(level(i)|i#ne#ctr:p(i)=0); - v0 N1 N  Q3 ?- p4 G8 \
    @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 X, V! M, _: e" n' l( G# \3 |end 5 }/ r6 j, E, M" T

    , k% j. k6 g' x! p" l! U5 \$ [, c: d' M0 A- R' u' Y8 H# a; b
    ' e" Y, q! u3 r4 D( H

    / V) h" s; A6 j! n, p- E+ l; F2 q; \% |  ?( A! z7 ^$ Z) q
    4  多标规划的 Matlab 解法

    多目标规划可以归结为


    . m( ~$ Z# }1 r. I+ o5 z* P  t* \& P
    . ~; V, C- T) i4 R2 V; D
    [x,fval]= fgoalattain('fun',x0,goal,weight)           
    " M& Q! R* x/ i[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           
    4 f/ w) W4 C7 p8 j, ^) J' n: g: E[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    / P2 g1 H2 l5 ~( g( |) V[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
    , l, G# j" |" p# l# M. |! m- }/ c( Q

    8 a0 g0 [/ e2 u' G! Z1 L要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
    # c9 b% O  E. F1 a, D% b2 [ 例 5  求解多目标线性规划问题
    ; \% K+ ^  Z, u8 s! y! g
    ( _. M, J- R( t7 M7 x- H" f# R# K  [1 ^0 _- [

    8 L* S' [/ t: ^" p解  (i)编写 M 函数 Fun.m: ' t( @: {( J7 L" |, _. n

    ! F! M3 Z0 V: A9 x& e# H9 o7 P3 s6 K: Rfunction F=Fun(x); . F) e0 G6 ?( F; @

    # O# P: I) s( D+ iF(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);   z& i0 a4 `8 T: y

    7 K3 W# l3 Q+ T& \/ I3 ?3 C1 Q' SF(2)=3*x(2)+2*x(4);
    ! i& u- n$ D3 ?* P5 R% e
    9 L% k; Z7 s! L(ii)编写 M 文件
    1 t' C% O0 T* E
    4 h3 D3 B4 Y5 G; Za=[-1 -1  0  0   
    . A, |. F9 n  f   0  0  -1 -1   
    5 E, L  u2 O( W0 M- d7 E   3  0   2  0    1 r5 o1 \1 f  b$ Y3 M/ R, ^
       0  3   0  2]; * n( b* p4 F! z5 C
    b=[-30 -30 120 48]'; ' _4 s' [7 A" n. u
    c1=[-100 -90 -80 -70]; ! \$ \% p1 Y) G
    c2=[0 3 0 2];
    * T' d4 M# ]$ u2 `4 T6 a: t" ^[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值 * q7 A8 C  \0 Z5 H8 h9 P! q
    [x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 7 `/ L: T6 O9 r
    g3=[g1;g2]  %目标goal的值
    / |& n* r3 ]6 r) l4 p; T[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) & c! o5 m% `+ x3 J0 A' h. i
    %这里权重weight=目标goal的绝对值
    $ ^5 t4 I7 t; L) s1 u+ r3 K- _$ k5 m0 y# a

    就可求得问题的解。

    习题4 B, u6 K% U7 ?$ @  I+ {4 N
    : \0 f/ y& a& G' S
    ! I% V# u0 g5 `5 C3 y
    ————————————————6 a" j( g8 M/ n3 r
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。# T7 `1 |( V9 d- i3 T7 X8 F* b
    原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932
    ' _" M& `2 G- s
    - W4 W0 t# O4 A7 m* B. J2 t
    0 [( X' ^" |7 j
    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 20:12 , Processed in 0.441732 second(s), 51 queries .

    回顶部