QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2080|回复: 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.线性规划的局限性1 f# `) X% K5 u& U: U
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
    " J' {) J  [0 O, n
    $ H, n/ R# E* q! r3 W& Q 2.实际决策中,衡量方案优劣考虑多个目标
    , E+ |: a' N4 ~/ O( l- Y) h这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。4 u3 M( p- C1 @2 A; ?
    " |3 l) w6 p. H% U9 t
    3.目标规划(Goal Programming)4 {9 s. s  [, m$ a+ Y+ V/ x
    美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
    / W, m8 w0 p$ D+ j- Y% L; a4 T  e! @1 f3 g+ D8 w. ]" _$ G
    4.求解思路
    * F: y: z" D4 U: h0 W1 y5 M8 ~(1)加权系数法9 z0 q" B% ~8 C. l2 M# Z# Z! T
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。6 h) a1 M' ~, t5 i1 v* ^
    5 G2 Q" L0 J; F1 i/ ^) `. g; M
    (2)优先等级法5 y, J8 j  u# {9 q3 n" J
    将各目标按其重要程度不同的优先等级,转化为单目标模型。. a) ~& d! b1 s% B" Z) C
    2 `6 E; l+ g" l3 l( V4 A4 G
    (3)有效解法
    ) v" [  e- E; {4 j寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。
    ; L5 C. c9 l: q" j" G" [, Y
    3 p3 y; y% o" w# ]0 S+ t2  目标规划的数学模型
    ; E; b& I& {. X  i) s9 `为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。6 Q" e6 b' ?* I5 r

    ( L. r& }, U& ?; z* K% j+ f, F例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
    * o5 B( N+ a  D
    ' h8 `8 e$ o4 `6 d( }
    2 U" M% ?0 R  `0 _; Y& p  p; Q2 R" @9 q8 N. ^+ V
    解  这是一个单目标的规划问题,用线性规划模型表述为: 1 `, e3 |8 N+ d. A- n
    ) a. R/ w) X1 p  i. R( M% z$ l

    ' |$ L" A: r- n) E' v* d8 u! K5 T
    ' w7 X5 V/ }8 _. B, e; m但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
    ' H' y9 A& N+ Y' S1 ]& M& r: c8 Y( H& V7 a, v
    (i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。  U' h3 c; x$ y( r, Y# R. X5 Q
    0 ]0 I% @9 J9 J* G# x
    (ii)超过计划供应的原材料,需要高价采购,这就使成本增加。8 T( d- L7 j5 h9 T! c

    3 x- ~; e+ ^( x9 G( O(iii)应尽可能充分利用设备,但不希望加班。 9 d3 H. _2 b! T
    7 m2 T4 a  h$ ?7 K1 R. g
    (iv)应尽可能达到并超过计划利润指标 56 元。
    1 x' z; K  p# J* P: X: X0 q2 M% d) f4 C8 \# _
    这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
    ! G" Y3 Y: I: Y- ?7 [* ?4 u) K
    1 D. i" o+ [0 u' x1. 正、负偏差变量
    ) I! l& W5 Q/ c( f
    $ i8 `; B. C& t% |2 l
    3 f2 J: ^; z1 R
    . P: G* F& ^+ d8 c4 T4 V2. 绝对(刚性)约束和目标约束
    ; O; [. X) ]& s0 @& E% e4 W4 ]" f) o) f  d& m. G' r

    ' q# ]2 M  r. [( ]$ R, \5 H
    , ]& `  A% V8 j) Q5 C  B2 a3. 优先因子(优先等级)与权系数
    4 f8 v# s. z  |' a/ N8 b& H7 O) u9 K2 R7 ^/ T6 H7 L
    1 T2 G" n4 E" m
    0 B: L+ V( s9 I$ K

    9 ^0 A( g9 i4 W4. 目标规划的目标函数
    . q# U, l7 j$ ~& ]& C2 D
    " [& k' K* l8 ~2 ?4 W' h) Q8 x5 \, _
    + g$ |( l# b/ u  H6 u6 y
    ) D# M5 Y7 A5 A5 N) |, l& Q& r8 e  g9 r对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 ) J5 R& M5 }1 K& L

    * d% o- M6 D' J; u$ h例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  
    6 U3 I* S& \3 t' m( j3 x
    4 G7 ]9 A& s: N+ }6 H1 a9 F! x3 X9 ~' T4 o0 B2 y
    * }& g1 o, H9 r$ g! {1 Q  {+ Y
    5.目标规划的一般数学模型
    * Y  x$ A) d5 P/ |  K  U5 i3 p" O1 h3 w1 I8 Y) ~8 y- M; q4 G

    : E/ q5 E% w6 w* G7 I5 n% q' t& X1 z! L9 ~1 ^+ l% F

    1 W5 l, }- R# x' O1 c& k3 L8 n  g建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
    ' q7 c2 T# R# w4 B
    9 n, b# X; d: ?* P, ~* s3 \3  求解目标规划的序贯式算法
    , ?5 @! S, X5 c, J序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。 8 c' W% I. f: D& n6 `

    8 g& H8 m1 Z3 @* f1 J
    0 @* w9 U5 Y4 H2 o8 h0 ^3 u
    5 X" K2 k4 r  y; X4 S( G% ]7 C% @3 `+ t$ H8 Y
    - d- y- }7 I, Y/ ^8 D
    注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。 & F9 F) F& p5 k/ h3 P; o4 U! H, L( s

    6 j; q* C5 ~" c( c# X( T例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:
    : p) x8 r! q$ J+ ]3 O2 j: Z' V6 e3 \/ |' H' v" Y2 g

    ( g6 n* N& k7 M4 m( C9 b" u( I. ?
    (1)力求使利润指标不低于 1500 元;, r1 L1 j* U, H5 G

    + }7 y0 d/ b7 r  G, \: B(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;: G. ], z: a) c( d4 i! {. u
    " q  w5 |6 a7 j# }& F8 g9 A; C' Z
    (3)设备 A为贵重设备,严格禁止超时使用;
    6 k4 L* f  A7 `8 o6 t8 t0 Z: k9 l1 P* J# t- w
    (4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
    ' L+ a* D. d* W( v. n9 J0 T3 A5 t7 j
    6 D% |; e1 R+ W( _  v7 l建立相应的目标规划模型并求解。5 p' U( e6 D1 @$ ?' `- _* w

    0 _& t1 l/ B) g% X1 L解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。 * [& Q; v) ]' p' f6 z

    8 ]# K, |7 g: e# ^9 R& ^7 X3 v
    ! e, k4 y$ Y0 \! I7 O. o
    ( g0 ~. M' p7 a3 r+ q序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: / k' E5 o. x2 F: @7 R8 d0 d
    8 f7 X% Y$ t5 J* J$ E# x3 K
    model: ! B+ t/ X3 l4 [2 ]% H
    sets:
    3 w% b) K- G( ~+ |7 T! c/ cvariable/1..2/:x; ( \" X, K2 N. w; c$ j- M# z+ A
    S_Con_Num/1..4/:g,dplus,dminus; 6 s2 l' o! F. v  G! I
    S_con(S_Con_Num,Variable):c;
    / G' U- F: K6 C7 Bendsets 1 t( v( ~' d! o" v4 W& @5 N! O
    data:
    # `7 ~  q/ L9 v% e' Z2 t7 _3 {& W+ xg=1500 0 16 15; , ~* m% ]( M9 C" |3 C
    c=200 300 2 -1 4 0 0 5;
    , A8 m3 s6 F( Y& V: nenddata
    ( |. D/ a. p) x4 q) Xmin=dminus(1); - l: j/ t* a: ?% Z, c$ p
    2*x(1)+2*x(2)<12;
    : K# L0 e. L" |& E( J7 F@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); 9 o. Y0 N6 W% E% V6 N3 p
    end0 |2 L4 y. y6 d& t

    4 n5 G8 L; X% b; L9 {: [) W* A

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

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

    model: # {, [* F4 }4 S$ o* c$ h/ C
    sets:
    $ W! T: k4 b/ ]" ^7 X  g* Gvariable/1..2/:x;
    . T5 H% i7 @$ \4 AS_Con_Num/1..4/:g,dplus,dminus; - P" q+ X1 i7 K0 k; Z) b; x% t
    S_con(S_Con_Num,Variable):c; + ~7 u2 h2 b7 _) ~* |4 ^1 R% s8 T
    endsets
      B( d' ?; q. f+ d% ddata:
    4 w+ k5 N& O! k, ?" [/ T/ n- dg=1500 0 16 15; 2 h! J& A& ]. f( o) o& M
    c=200 300 2 -1 4 0 0 5;
    0 Y0 t% i8 h5 t" C2 Benddata 1 \- w9 Y, }7 V( P7 I
    min=dplus(2)+dminus(2);    !二级目标函数;
    % {3 ~7 \3 X! I# q4 H+ B2*x(1)+2*x(2)<12;
    9 ]5 r1 U- J2 O2 e3 [@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    8 w7 W4 R% T. \0 m7 X/ Ldminus(1)=0;!一级目标约束; ( ]0 \3 g) G% ~" y, }* c
    @for(variablegin(x));
    5 H% D  D+ F' W) v; l* Iend   O. h+ k2 R6 x0 F, X9 [  f) U
    $ |9 N5 p7 z( L; M
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下: 3 N$ \% Y4 M/ M1 g, w: |8 ]
    / }+ z2 [! J# v, L
    model: ' S& D3 G' w$ N( |
    sets:
    * i9 ~0 @, @3 r' h: J8 |  V' x, p! Kvariable/1..2/:x;
    ; v9 F( d5 v6 k+ r' t5 yS_Con_Num/1..4/:g,dplus,dminus;
    0 w5 Y: l- g4 c" p8 m* MS_con(S_Con_Num,Variable):c; , J8 q- C  c% u8 [
    endsets 6 ^* a2 G  k' c+ b
    data: - [# _* N/ v4 K' ?3 c
    g=1500 0 16 15; " }. a5 {$ p* ~
    c=200 300 2 -1 4 0 0 5; ; r) X6 Y+ ~: Z# `  x4 t
    enddata
    ! B+ d4 [! s# J; u0 t  c" T$ dmin=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数;
    : `! w: E: Z" `( m* G2*x(1)+2*x(2)<12;
    6 c, I2 F( l; q2 `) g @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); * h2 l4 i( h6 J& M, z% i
    dminus(1)=0;!一级目标约束; + c% G; Y4 ]. [! |1 W
    dplus(2)+dminus(2)=0;!二级目标约束;
    9 l" i& r+ i3 O8 a$ j7 i4 ]% Q" E& Send5 @8 J7 P9 E, D+ a  j8 [/ O
    , K; I) K0 G$ R( l) {' s0 x
    目标函数的最优值为29,即第三级偏差为29。
    - L6 N# \; F- |' ]. A1 `+ k( {& E' }% U6 Y
    分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。
    . U. E+ O' ~, F
    6 n) g2 {" v4 h; L# B9 A上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
    1 N3 v% S/ I9 c! d$ e9 S$ p- N/ j1 c+ C
    例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。7 q9 ], n1 g0 y! l1 Q* |6 q

    ) I( E; |! d' v  S1 ]6 a; Umodel:
    . W: Y6 s6 |& a: Esets:
    $ a* u5 i! y7 x# d* K& vlevel/1..3/:p,z,goal; 2 {& U4 z" w( |
    variable/1..2/:x;
    7 ^3 a4 m1 K/ o: r( z. \h_con_num/1..1/:b; ) L( P( K! c9 X4 m
    s_con_num/1..4/:g,dplus,dminus;
    $ L" d- c# [  Q" D0 x' D4 yh_con(h_con_num,variable):a; ) v7 d% C; A* V% V5 v" L3 q
    s_con(s_con_num,variable):c; 5 u$ a& @( _# O" g1 |0 X) q: d. k
    obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus; ! ?+ B# K+ G+ R: ?
    endsets
    3 ~+ v% ^3 R2 T$ _* p0 ?5 A2 W3 zdata: " W2 S+ g5 R0 {- O6 N9 s! F! ]9 }
    ctr=?;   m) S$ a  P% u- I7 R. I+ L( f
    goal=? ? 0; . W3 e: M5 L5 i' D
    b=12; . k2 s3 o, I1 S! |
    g=1500 0 16 15;
    6 i  p' F' n. X4 R& J7 Ba=2 2;
    / p) D0 I& k* S+ ?4 @8 y% a8 Vc=200 300 2 -1 4 0 0 5; 6 C7 D' b# P8 q4 q. K7 [
    wplus=0 1 3 1;
    + ?2 [2 p: A4 e4 H# xwminus=1 1 3 0; % L+ }; M% E/ P
    enddata . [8 N9 A) N( i# Z
    min=@sum(level:p*z);
    & [: B' ^3 t$ `, b7 P, Bp(ctr)=1; . P5 I/ a" \0 g/ b/ U. I% M
    @for(level(i)|i#ne#ctr:p(i)=0); ) z+ {+ T$ r- b" ^1 \, e
    @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)));
    9 r+ Z' O' Y2 U0 G, N2 a; g7 B/ Dend & X/ G' y& s, B6 A
    ' s1 f: M# e( f# \6 B" b

    7 L4 `! G) m0 @; n+ `9 D6 o1 T! |$ j

    2 d' f+ t+ h9 h6 j+ K8 \" @/ _$ s% |: a7 _! S# c4 a6 ]: n/ p" g7 J& a
    4  多标规划的 Matlab 解法

    多目标规划可以归结为

    ! ^  _+ s9 i, e- U. X4 o! ?' b

    7 r( e/ M' J" ~* q5 b# q( s5 q$ B5 g7 V% P. e. g
    [x,fval]= fgoalattain('fun',x0,goal,weight)           ; c) ?, X; K9 j: y# C/ ^) l' Z
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           6 o: h: \- X' s7 Z1 C
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           # Y) \6 s! z' e1 C
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) ! x% C' S1 |2 Y9 P+ H7 A( q5 @

    , y  p( \# ]- [, `& b7 _1 N" P8 {5 v% k
    要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
    # W1 w8 @# H% s% w1 |& b: ?1 z 例 5  求解多目标线性规划问题
    + Z1 W! \: T2 J$ n$ t% _  B0 D* a" K) ^5 |% p2 O' ]$ U; s

    ; C1 \% G/ @( z' W; }. ~9 ~1 y! ?! }: u; J6 @
    解  (i)编写 M 函数 Fun.m: 1 F/ z7 k- V# V& Q

    ! C& \+ P% \+ @2 Z# Afunction F=Fun(x);
    - w  _) R7 a( U5 V. _
    ! a3 I: k7 U. f/ L5 OF(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
    2 H; j: L0 a) ~; F/ p5 Y7 |5 `% a6 M  @" Q$ F+ O) B
    F(2)=3*x(2)+2*x(4); 0 X. S! ^. y# n( m5 y  H( ]
    * X/ C- k, y( ~  Y  }0 K/ t
    (ii)编写 M 文件 7 q4 V7 t5 S1 D" j6 x* S
    3 G) c5 b. @1 j+ L5 ^
    a=[-1 -1  0  0    0 L) P" O4 v9 y2 p* E  k! N5 a
       0  0  -1 -1    $ ?6 q9 @+ a8 }3 D/ x6 t+ n
       3  0   2  0    . e! T5 \( }" I$ G# c: V: R
       0  3   0  2];
      }5 t  G; I' I- E; i2 B# }! Db=[-30 -30 120 48]'; # ?- `7 O: q9 Z' z# c
    c1=[-100 -90 -80 -70];
    ! }( Z7 b4 z7 t) i; F6 Y/ xc2=[0 3 0 2];
    " f6 L9 L5 [; i5 R2 a7 D' }[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值 + Y" s$ |1 ^! o
    [x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 ' y2 M# o1 u" u0 C1 u) k
    g3=[g1;g2]  %目标goal的值 % }2 \: ~9 y5 R  ?; C$ l
    [x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1))
    ; v& C2 ?3 E8 }%这里权重weight=目标goal的绝对值
    ( X5 p# i  G; d  \5 g
    ) v; T5 \/ q& g) \

    就可求得问题的解。

    习题
    8 u( W. N$ l/ U3 _5 p1 |9 \$ l9 n- g. [! T5 q8 x
    1 `; {/ S6 O- t* r1 a# W
    ————————————————& Z, N. ]) _5 A6 S" B
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    3 m" K: u8 i9 H/ _. f6 R7 X6 `原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932$ a# o9 w; D  ]7 b$ m) L
    ( V5 A5 v+ Q- e( T
      q6 U+ W7 F, q
    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, 2025-7-31 02:11 , Processed in 0.275215 second(s), 50 queries .

    回顶部