QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2386|回复: 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.线性规划的局限性
    7 [$ F1 Z, D8 ~* J只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
    4 O3 M) ?/ ~" p2 x2 P7 m: _& Z& `% h4 {% x/ t5 c
    2.实际决策中,衡量方案优劣考虑多个目标
    3 _0 h5 M1 a, B' o这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。  j6 D- }5 U1 L; w$ |9 o

    7 {( H$ x- Q! r" }2 L4 t4 @' h3.目标规划(Goal Programming)
    : w2 K$ i! |4 i. t1 C, {美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
    1 C2 H  D8 @! G6 G$ O5 [8 V% L
    1 f+ ?- c7 A8 W7 @& G/ M# b4.求解思路
    1 F4 Z! F' \2 `+ Z(1)加权系数法) N& D/ l9 M7 X* V7 `+ g5 F& }- p
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。3 N! x! f7 J- d  {8 ?* s( M

    ! \3 A: `6 J8 {- L1 Z7 F# t(2)优先等级法
    + h; e# B; V( A将各目标按其重要程度不同的优先等级,转化为单目标模型。. M! S3 d' |4 A: |( u
    ' ^# c2 z+ Z( b: S! A/ {5 x
    (3)有效解法
    7 X5 ~4 O0 }  g0 r, @  u& B0 ~, x寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。 ! O+ O. y1 N. p, _& M7 l% X
    ! B+ U) m) V7 X$ ~5 ^1 ?
    2  目标规划的数学模型
      d& x- \0 f  x$ n" q为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。8 @0 z- j! t2 y

    # [- u1 C# d% h4 B  M例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
    - W: z. {0 n& w. U( E0 r/ \# y+ A3 y. `, i0 z) O
    2 V0 _* L8 [9 u! b5 w

    3 [. C% A7 V+ M8 D+ W0 q# l  _' k解  这是一个单目标的规划问题,用线性规划模型表述为: " G3 O- n- z3 H' P4 N: c- z, v

    / H- X4 ]+ U$ p' e& p
    5 w, b* }# z% q
      x* M$ N3 @# j( d3 L2 ^但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如$ g; x7 p9 C6 y5 t9 N2 |, U

    2 |/ |8 Q  X- ]8 R(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。# ?1 U2 W7 Y: v9 r3 @! @

    8 ^) U! A2 B% X$ M; L/ U7 e0 ~2 _" q(ii)超过计划供应的原材料,需要高价采购,这就使成本增加。9 m# m  ?- v" o$ j7 b& C( G

    ( B! D, ]4 L( C2 w(iii)应尽可能充分利用设备,但不希望加班。 9 ~  |- B  L/ a( X; @

    1 e4 ?2 k( e9 ~3 u4 f(iv)应尽可能达到并超过计划利润指标 56 元。
    9 }0 l1 Y# n9 x$ V9 @" n( ^6 C: s. o5 v4 [, u6 u7 q
    这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。 ; O( Y$ l6 D; N6 i: p

    ( \3 O; v8 U4 U- G& q1 k8 l1. 正、负偏差变量
    / F( D' n, i4 A1 Y9 E2 g4 J0 U3 r% b
    $ N, b$ v# s% D0 @8 o8 r6 w9 u* @
    5 Y9 s* W( |) d1 b/ A) S8 ~
    2. 绝对(刚性)约束和目标约束
    : U! n& A  G# l5 Z  q: B5 e# n3 E7 p4 C. M/ K( p. s
    % C' }3 v/ i& W+ ]

    + `9 [7 K9 d5 t0 O# Y3. 优先因子(优先等级)与权系数
    ' U* a9 M1 ^4 ]' H" V; v) O; |8 j# ?

    - h$ o* }1 `& K+ d* a3 f8 |) N" e
    $ i! u2 ^4 L+ w3 R2 u
    4. 目标规划的目标函数 / E' ^9 I" G! o/ L- q: k

    , g7 a* X4 X; f. S- c# }8 E# d; O0 }% A: }. w" Z5 B! V, q
    : N0 v, x% `1 [$ G' r
    对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 * R" c) m; H# N1 b
    : b& e- H8 l" G4 S
    例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  + I3 K  w- Y' W+ G2 K
    ' r) C( Z1 ]( I2 f# a: G
    + _" o/ p6 Z4 ~4 b, R
    4 V- {" R( ~& P) q3 y
    5.目标规划的一般数学模型& G/ v. @, b5 c5 }' L6 q

    , T3 K+ O3 L. J' Q. W* G5 F
    : Q6 r, O. x9 u* n9 Z# V% \9 a4 C# U1 b7 U( p" x

    + s9 |3 U# T7 m7 t. a6 \建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。   q) F5 T& d5 |. K! F

    ! Y" v& [  V6 b6 e2 p' M3  求解目标规划的序贯式算法
    % h6 f" M7 M) T1 Y序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。 6 D, d' M& Y0 \' i- }" c! A
    * \6 L" b1 c& V, ?) N" g9 j

    4 u8 o+ V& t7 K; b- ^6 S2 t/ B! S8 t4 ?" G% b

    0 {+ f$ s4 n% X: V1 ~+ c" w  e
    1 D) N# r# k) x! k! V' l2 Z+ ]注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。 & O0 P5 _, ^( A' K2 j: W+ j9 _3 }
    $ V- K5 T9 I, e+ {3 H5 J. |
    例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:; J: h5 d3 B7 ]- k  F5 Y

    ; q% @' r; V# X4 {( s
    / v2 R& C9 x) q4 R( f  u2 Z+ b& }1 ^  g# r) L& l% g
    (1)力求使利润指标不低于 1500 元;
    : W: u; ^* C2 {$ J$ Y" z- i0 U) G+ M3 c5 w0 q
    (2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;% {9 ?" j1 I! }& F% e6 n0 r2 W

    4 f' k: f4 x8 I% ?, {% _(3)设备 A为贵重设备,严格禁止超时使用;
    - u# l. ^5 C  B+ }. U$ I2 y/ a: L, Q/ Q$ ~$ q
    (4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。2 H6 @3 X/ O$ L( _! N9 F0 m( J

    9 [$ I7 X6 P! J6 u' D' c建立相应的目标规划模型并求解。  T) M" R' C3 P. q

    $ r# b3 z# s; U! b8 L2 M8 d解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。
    6 A6 d5 |9 p5 j* X6 B' T- `* w$ l# K7 P

    1 w5 i( L5 F3 b1 @( ^. w
    7 q% m4 O3 B+ v0 `' i序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下:
    5 M% c5 [% W3 D' D: }% A3 A1 y# h+ p0 z) Z2 @' S
    model: * c: P) J+ h, \. I+ K/ a$ A
    sets:
    : A& y2 }8 n5 [* uvariable/1..2/:x;
    % H& k$ z9 J7 {0 N9 u' ^( n5 oS_Con_Num/1..4/:g,dplus,dminus; % {7 {+ ^2 s: R
    S_con(S_Con_Num,Variable):c; 3 b( _% T( M& a4 |
    endsets 7 s8 t, W3 t4 W
    data:
      b) f8 p- ?2 p7 _g=1500 0 16 15; & j& W, I* J% K. H1 E/ }) H7 h
    c=200 300 2 -1 4 0 0 5; ) e/ I  V, T( F& A
    enddata
    5 ~1 E2 c2 K  A' a+ Z" [5 @4 hmin=dminus(1); * y; I$ @% Q! `, z. [4 @
    2*x(1)+2*x(2)<12;
    ; g9 F+ T0 P# A1 ?7 ?) J@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
      f8 Y( C& W8 _* r5 Q% t5 ?1 B. w+ lend% b0 c0 ~4 M  r
      V" y! c% ?( G  W4 J  e/ F  `

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

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

    model:
    ! |% ~3 P/ I; Csets: 4 Q5 R: x( M( j2 r
    variable/1..2/:x; 6 j5 W8 }8 Q. q+ A9 n
    S_Con_Num/1..4/:g,dplus,dminus;
    ; e6 Y/ _2 t$ P  NS_con(S_Con_Num,Variable):c;
    - r) a2 ^/ j. i' |( F+ H) i, H; w  mendsets : Z5 ?* q" g, f9 p
    data: 7 e7 {4 z+ F" d0 M" V0 b
    g=1500 0 16 15; ( h5 [2 v& O3 f) K7 y! q+ J
    c=200 300 2 -1 4 0 0 5;
    8 r+ `7 P- j% a) l! @! Aenddata
    ; g; `9 v- I* x$ \) @min=dplus(2)+dminus(2);    !二级目标函数;
    % O/ n$ h7 g' G  _, p2*x(1)+2*x(2)<12;
    " q0 X0 [8 l& Q; w@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    - l+ V. l' v0 l2 y, K' M. K0 vdminus(1)=0;!一级目标约束; ; y/ a' S. x. }, z8 J' r/ I& K
    @for(variablegin(x));
    ! K( i' O9 c, c! a  ^0 b8 H% j! vend " C$ y& g% y' l
    ; ?9 h) |0 ]0 F& B5 h, z
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
    9 |3 {: y' b! O. v9 D# y0 Z2 P$ ]" G: B3 p. O
    model:
    ) {5 }3 F# Y6 o6 f# T* i5 o. q: u5 esets: 1 W6 X. e4 y1 o: G5 K
    variable/1..2/:x; $ D$ Z9 g: }6 p" ]( E, i: V* _
    S_Con_Num/1..4/:g,dplus,dminus;
    2 ~9 O# s6 ?* T" g6 QS_con(S_Con_Num,Variable):c;
    ! V/ @) n9 U% {* J0 {# zendsets
    - n. f7 ]6 X$ Q, Tdata:
    # G( n9 b; Z8 x( v2 Z  E3 d2 yg=1500 0 16 15;
    , [' o# F( a2 @) Qc=200 300 2 -1 4 0 0 5;
    , D6 K3 I0 g$ q+ v$ @enddata + n! `2 d; ~* a
    min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; 8 @2 H. l% r% |) k
    2*x(1)+2*x(2)<12;
    5 ]* I% o% D) Q: n' ? @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); % }" j& K1 m% u2 O6 x0 Q% z* r
    dminus(1)=0;!一级目标约束;
    5 ~4 N  i, N; X/ N( I, qdplus(2)+dminus(2)=0;!二级目标约束;
    % \/ d+ |+ a4 Rend! F* ?# q7 r9 P4 B! I( Y8 Z

    2 J2 \5 O% q; u目标函数的最优值为29,即第三级偏差为29。
    9 f" M- d1 [* z9 Z; e6 {' b3 ?) f  Q# ]5 N6 K- Q% ]
    分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。
    0 U+ o- Y# Z: b* n4 ^9 p; `5 f5 b1 V9 h6 v# g
    上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
    7 K" P( k7 H3 r; Y: V; P: _
    6 B- }3 _8 S2 o/ ]2 u, X; ?) P5 N例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。3 }! O3 L: Q# t" i% ~
      M! n6 s# L# q/ k( E1 x7 @( W, I6 V% ~
    model:
    & A# A: {5 ?& @8 Q6 Zsets:
      T" v) q; L) Ylevel/1..3/:p,z,goal;
    5 o4 C: v( C8 w! l7 @variable/1..2/:x; 4 w0 @1 q7 Y5 `( t
    h_con_num/1..1/:b; ; q) _3 Q3 S( Z1 ?4 X, X2 f
    s_con_num/1..4/:g,dplus,dminus;
    * g2 `/ ~) B+ J% }0 d& F/ a  Mh_con(h_con_num,variable):a;
    , G8 v  ~" I% x' as_con(s_con_num,variable):c; 9 X9 t" p: X8 `# |" r: l
    obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
    , Q! S; p3 s9 s( [$ K6 Yendsets . N. z4 c6 T) ^# _5 K/ h9 x) ^
    data:
    # h5 {3 i$ s! c: d, ]ctr=?;
    ! K8 ~, d1 s7 l& ogoal=? ? 0;
    - w3 \% t% `" _b=12;   j. m0 D0 u0 t8 A
    g=1500 0 16 15; " b1 A7 j% W: @: f( z2 [: W$ U
    a=2 2;
    % Y8 S0 j. {' }1 Q( R  Sc=200 300 2 -1 4 0 0 5;
    " y! {( e: `) k) G7 t4 y3 hwplus=0 1 3 1;
    . N: f- L. @7 A. }7 k: jwminus=1 1 3 0; 1 p7 D8 W" _% B; x$ M
    enddata
    ' p& ~- Z7 C1 G9 I1 `min=@sum(level:p*z);
    & ~" A6 w# g0 ]9 f. L4 V( ]p(ctr)=1; 9 p. v) K; X. I. o  ?; J- k4 T
    @for(level(i)|i#ne#ctr:p(i)=0); & V5 ?7 _; W$ k4 T1 ~  R: G
    @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)));
    $ {/ L/ N) a; Iend $ G2 a* B* {$ l! [. m: U" X
    / K) I. p) H- G* k$ D3 r4 b! l

    3 y7 D! Y1 ^5 d) [" y1 q* L* N1 W: _

    3 e, Z4 ]/ \3 l
    ; j+ t9 u% H( |  N4  多标规划的 Matlab 解法

    多目标规划可以归结为

    ; W0 ^, Q% H2 Z9 C, h

    8 D( G: w5 f: t2 \) x5 x3 m5 V$ G. N6 |; M+ F2 L) y0 U
    [x,fval]= fgoalattain('fun',x0,goal,weight)           ) E/ G$ k! S- `$ j+ P
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           
    ; d6 T% S0 ^! |- M) R( v[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    8 ~  j, t5 e1 V[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) + M' p( z5 e4 g

    9 s! t: B. \  d. T3 k& L; f- t$ B$ \9 b, K3 e. @
    要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
      N( R% W! d2 b1 X. W 例 5  求解多目标线性规划问题 1 n  W) y% L0 v8 ?- [* Y7 p5 P4 i
    ) u" z) |0 _* A
    " ~/ A7 h/ W# P& t4 ?* X
    0 V( P- m$ D. K6 f3 `' s
    解  (i)编写 M 函数 Fun.m:
    6 s3 U" z4 {7 Q! r8 R# S& @! S
    1 N$ I; [  O" \3 U2 Nfunction F=Fun(x); 7 C( [- _" {* ?! A8 P8 R4 ]

      u) o  q1 n7 {4 y  N1 tF(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4); 8 l8 a+ O3 L! S' n7 Z% D! x& G
    : q) w* v9 J2 d* w- \2 g, c
    F(2)=3*x(2)+2*x(4); ' l  L% \8 {& n0 x: d. {& Y
    5 w# `9 F6 O7 Y4 G: ^8 H/ @
    (ii)编写 M 文件
    7 @% Q1 Y! f, s% y9 L
    8 b3 y! N' V. ]( L, \$ |a=[-1 -1  0  0    3 r7 f" ]9 F! u# m; V7 u  J
       0  0  -1 -1    ; q& b9 v- {5 d, ?; \
       3  0   2  0   
      z) J1 _9 X: l3 J+ N   0  3   0  2]; 4 O8 Q% X8 i% q  [7 p; b. D
    b=[-30 -30 120 48]'; 6 t* Q& O9 ~+ c6 T# n# n+ B
    c1=[-100 -90 -80 -70]; $ r  |$ P% e4 L7 k+ @/ T  M7 \
    c2=[0 3 0 2];
    - D- d& O& j. }0 i[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
    2 Y' z& ]3 x3 n; k/ r[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值
    1 A4 n  k4 Z" g5 N! {% B' |# L8 @( ?4 Eg3=[g1;g2]  %目标goal的值
    8 @# c0 g' o4 R1 i  x[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) * X4 }+ f2 V2 ?" i! M
    %这里权重weight=目标goal的绝对值
    $ M- L8 |) z: N+ |' {/ \$ H% t2 b% J" `3 y% R

    就可求得问题的解。

    习题
    , ]; X7 c: @% ], L; D5 Y/ P9 @$ M3 Q3 I& g: d
    3 w. p4 j" A7 W% ^
    ————————————————6 ^6 O+ u8 }2 V; F# R) K, Q
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。2 }/ T& |2 S& }
    原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932
    " K0 Z1 ?6 r: {4 P3 ]! P5 X  t" ^2 A7 T1 u' y" w: K

    0 Q5 H% f2 b$ M5 F0 Y0 P: m! N, 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-6-11 06:11 , Processed in 0.344852 second(s), 50 queries .

    回顶部