QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2346|回复: 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.线性规划的局限性; Y# w- T& L1 j; Z4 `9 l2 ]
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
    / \6 ^3 Z( r  V6 [4 y2 U! O3 m& U3 O% b
    2.实际决策中,衡量方案优劣考虑多个目标3 ?0 E$ k6 }4 B
    这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。. T# ~7 I+ Q8 [% C  v( k7 ?2 a
    8 {8 z$ I' f! f' m) d$ W# a
    3.目标规划(Goal Programming)) q( J4 R0 P3 }0 j# K: {6 x* }
    美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
    % f+ P8 F0 F! i/ Y/ u) k5 N! I0 z7 ?3 v2 U- N: m1 o
    4.求解思路
    : q; o* S4 v( X(1)加权系数法
    6 ~  g' @. A8 ~0 S为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。
    ; F  e/ [6 G) ?% `; ^8 \( D" o& ~$ u; r! o
    (2)优先等级法2 g2 Q  r' A) H" Q
    将各目标按其重要程度不同的优先等级,转化为单目标模型。: s' x' @; @& [+ f+ O
    7 ~' Y# Y* N& [
    (3)有效解法
    7 Y8 X" j3 O: t/ b- @寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。
    % X0 n# \( D6 R4 U0 I( @! [
    % }, i6 ?- t+ B9 L, {1 S$ t: P' s" X2  目标规划的数学模型1 Z8 @" B$ q0 `9 G! T- X' k
    为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。
    5 {% W; G) f1 ]- ]8 s; [
    3 m. Q4 p5 d5 i8 ?" D* b" Q$ v例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
    5 c7 ?9 m  A) `( \% x" `
    ; q( X6 a6 B. Q' B9 y* Q2 r$ _, t6 [0 o9 I

    , A* o8 N$ v" y; I解  这是一个单目标的规划问题,用线性规划模型表述为:
    3 t! t* @' z2 `/ y6 J: L
    7 q/ A/ d9 t, Z1 e! k- b& R# y* z2 U, K/ n
    0 I5 }0 q! \8 u. `- I/ j
    但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
    2 e/ @6 n& Q5 @0 r7 X! p
    , ?4 Z+ v  O( C' H; a& V/ ^(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。& t+ H9 t" \: ~4 A! P
    4 v% e; T6 ^. E2 X+ F/ l" J; T
    (ii)超过计划供应的原材料,需要高价采购,这就使成本增加。. T0 g* ^- q. Q+ t8 k, x5 L% E2 m8 \

    9 Y  M: }4 o1 p- P  [9 v(iii)应尽可能充分利用设备,但不希望加班。 ; _; d7 v! S4 s) m4 ^4 s  H6 l- W
    - b4 J1 Q+ r$ ]! K# T& a4 I8 m8 K- U
    (iv)应尽可能达到并超过计划利润指标 56 元。
    , |* g$ w; p! |, l" B4 k" y* v' C! b6 o
    这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。 ' ^6 o" ~) {4 t
    - k+ J) K* t7 [! e4 k
    1. 正、负偏差变量 9 @9 y- I* o: E) s7 w: V0 T, X* R

    - u! _+ w  c; [; ^9 T% |- O6 }6 n6 i: {, H7 M0 b* ^

    8 z# Z( q: e6 Z9 K2. 绝对(刚性)约束和目标约束 0 f# H" }/ w/ ^4 A  S
    + H; f1 x9 U: I6 d/ m* m; Y

    2 c! o# |* V' u5 q, d- n/ O( R) \, H
    3. 优先因子(优先等级)与权系数
    9 |: [+ S, ]; Z! a$ J' `! T, U( S# r( }
    & M- s7 ?4 {8 X8 H+ d7 b4 U+ \: M% q& Y+ r5 ^7 \$ A9 |; E$ \# h

    $ ]4 N# x6 W. I/ x- D, x: `7 {1 }8 z4 a- P) b2 D. s
    4. 目标规划的目标函数
    / {: I6 a( c% m
    % `8 Z/ I2 ?7 F4 T& E0 S8 n+ b  ]9 I* V) [2 u0 D6 D1 S

    . ?: I  ~5 Z, N; W) Y1 x# p9 B/ ]对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。
    5 ?' f( B' O7 \- N  A/ s
    5 i( d+ o/ E4 H- q例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  
    " s/ _) G/ z8 M
    7 }% j, Y8 W4 a. [6 Z+ a
    & O9 N/ q$ ], P! {0 c0 ]/ l, p7 ]' C) k# F. [3 ^2 t
    5.目标规划的一般数学模型" x  h5 f" b' Y4 g2 U8 i1 e

    2 F4 a/ o* I2 n  q3 B) K: ~
    " E6 K& G5 r+ m! M( K* n* g" _$ z# b' x; M

    $ {2 t$ E9 U# L- D( V3 a4 J3 [' P建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
    % J& {7 x5 e) v6 G, c
    & F) o+ L/ o& p" P3 ~( ]- A; I% Y5 H7 V3  求解目标规划的序贯式算法
    0 u  Z8 ^1 {9 X# V$ C! G) i. b! l序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
    1 w0 K- j) o& l: D6 }6 |) Q, H' P. e' G: Q8 ^( r5 [# _+ C
    " d5 }5 |! h  H: ~% k* D
    2 A3 h# e: h( C/ ]6 Q
    3 Z. ?1 M" W6 B
    . W; K9 T  f  ]
    注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。 ; s# |, m" f5 Y( V
    4 r% o; A4 z+ E( R- ~+ t
    例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:
    + n- z' c) u' D% J, r+ n* S6 x. S: G, s; s
    7 \/ N/ o# u: D9 q
    ' j- t# j9 L0 T3 J0 g
    (1)力求使利润指标不低于 1500 元;
    ; m! ~, y8 A3 d3 v3 ^) Q1 z3 |& f, b( g7 I7 \  t" x. M
    (2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;
    - t/ u9 ]9 y" }* A
    - k  O+ i- F3 N- d(3)设备 A为贵重设备,严格禁止超时使用;+ F1 p, z8 R7 T9 S5 I

    # K' K3 T  w6 Q$ |(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
    / |3 \! t: Y8 }: `1 d! o' o5 Q
    / d( x# ~  V7 |# ~) O, {( P0 Q建立相应的目标规划模型并求解。
    " b/ p$ U9 L% i% E( ]; @0 h7 c& U/ H( H4 b$ I6 y% K. x% M
    解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。
    $ n, e0 c6 I3 \2 {0 S  Z9 ]3 a9 G( G& D, \# [; v, @

    # l) p7 B/ x6 @! v& G' c3 J* l, z/ U7 |7 L& _! w
    序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: " N( Y6 {% r- u3 l, C1 g" Z

    " v1 l" r% q) W% j' B$ ~model:
    / }* A) B/ u) `. D9 r3 csets: $ q: f" J( }0 J% Y
    variable/1..2/:x;
    2 E4 j3 \) f3 K: XS_Con_Num/1..4/:g,dplus,dminus;
    & L6 @! F6 ?1 @. a4 E" d1 ?S_con(S_Con_Num,Variable):c;
    5 J" ?! Y7 s- {- U! a! m1 O! w, Vendsets
    5 P; `2 w* i1 j' udata: $ {. v+ V  d3 ^& H
    g=1500 0 16 15; , n5 w9 F# s- D  c
    c=200 300 2 -1 4 0 0 5; / }# Q2 J% F- H5 R' J
    enddata
    $ W- q+ R; w' M' ~7 Zmin=dminus(1);
    ) q' k* _" D* P2*x(1)+2*x(2)<12;
    7 Z2 d1 d7 i+ Z$ s9 j+ ]* x@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); * l& u( j0 {" X* b8 ?7 d
    end
    ' X6 ~0 N, ]: N( V" U$ p" D" A) `! ?3 E5 [( G

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

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

    model: 9 r7 e; o3 c: T
    sets: 7 ]' {! s# \& f+ W6 l$ L
    variable/1..2/:x;
    7 y5 V6 e$ _3 a% a" Q5 m% k8 eS_Con_Num/1..4/:g,dplus,dminus;
    * e/ j, s8 P2 X( |* |" [S_con(S_Con_Num,Variable):c; " |# T9 }9 K0 F: q
    endsets & P/ \+ I8 }( i& G4 o
    data:
    % s: N) y8 P/ z# b8 {, ^% N# hg=1500 0 16 15;
    , V% d: `0 }- Xc=200 300 2 -1 4 0 0 5; 6 S2 K, v/ [, J5 K4 s5 s
    enddata . \2 Y. p, p  X
    min=dplus(2)+dminus(2);    !二级目标函数;
    ; d! v. b$ p! ^( m2*x(1)+2*x(2)<12;
    ; b1 {" g# N% y- ?( n+ u# B@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); 8 i) T1 }8 J' ~
    dminus(1)=0;!一级目标约束;
    ; m; U3 _# B& t- B8 G@for(variablegin(x));
    1 _2 Z2 a4 I; m3 b# Oend
    7 t, A/ n, n  k' C5 E: K6 s; Z: R, F) Z6 B
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
    - W4 X& L$ O; s' O' k4 V9 e: s
    " k, s$ Y9 P0 o3 @" E: d1 x" Zmodel:
    ( C& F; E/ [. |, M+ vsets: & @. {: ]! `6 t' F  l3 z2 n
    variable/1..2/:x;
    ! [7 Z& ]+ r0 F. b1 t/ A' `  QS_Con_Num/1..4/:g,dplus,dminus; # F1 V& T# X" U7 I& e0 B" `
    S_con(S_Con_Num,Variable):c; 6 n) q5 A" G/ |
    endsets 2 \& L0 J* `6 [" x& d
    data:
    ; r0 T6 x  k& O5 w. F( {4 l% ]g=1500 0 16 15; ) x% ~( g, k' |. P6 }/ ]- J3 e
    c=200 300 2 -1 4 0 0 5;
    $ `2 C2 ^2 z" I/ w( q2 [enddata 6 Q- R/ k# ?9 W* m3 D) D  q" F0 V$ [
    min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数;
    - N9 \- L  m. M' T5 x- o# m, U8 A2*x(1)+2*x(2)<12;/ V! J' F' j5 ^( o7 x
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); $ @  |2 J# _3 D3 _/ T0 _! ]
    dminus(1)=0;!一级目标约束;
    # F8 v6 [3 o% d3 Z) S# Fdplus(2)+dminus(2)=0;!二级目标约束;
    7 _+ a( h: G# ]. ~  qend: A* }  E! w, w  w
    9 f. K+ g$ s% d7 r* j7 @% @! l" a1 B
    目标函数的最优值为29,即第三级偏差为29。
    ! _" @3 B. j3 f4 {, V4 O! X: h/ N9 e7 U/ v5 i( ~+ H
    分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。
    / m( a1 \  e1 }5 K5 K5 U1 `
    0 R& `8 E+ t% ?& D$ a上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。( L0 Y1 J: Z- O& v6 X! W2 F

    - S+ F0 {: A' b7 Q例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。
    . Y, n* Y. `( j- H" E3 [, {1 I8 [/ R1 T: a
    model:
      |3 y' |% o7 Z  ^sets: * p/ b! |8 c; E& p0 a$ K
    level/1..3/:p,z,goal;
      v) Z8 N5 X2 ~1 b- Uvariable/1..2/:x;
    5 E0 R5 {8 L. G# u2 }; O5 eh_con_num/1..1/:b;
    1 Q: R0 z2 q- K6 I6 T% f5 bs_con_num/1..4/:g,dplus,dminus;
    / v; j# e0 T5 G" ]% @6 ch_con(h_con_num,variable):a; - r7 D7 a8 j5 B; ^3 @( o
    s_con(s_con_num,variable):c; ( s4 a* C$ A; Y
    obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus; $ I0 [! A$ s& q6 d9 t0 T
    endsets 8 X5 I1 s! _1 P: n3 B
    data: - I6 I2 G+ N" c% I+ s3 K( B3 z
    ctr=?;
    " F# o! B% F( r8 ~0 |) ]goal=? ? 0;
    # w  J/ S0 |! D$ Qb=12; $ E: `( ]9 @& B3 C. O
    g=1500 0 16 15;
    + T( K  e: g) ~0 g  [' e7 i5 Ca=2 2; 1 O+ X* t  H" B* L! U0 @% F
    c=200 300 2 -1 4 0 0 5;
    5 t- s# {/ V( E8 j: I. twplus=0 1 3 1;
    * M9 L& V: p  V7 o$ k( xwminus=1 1 3 0; 2 G) G6 x/ C% R/ [
    enddata . a& m: J$ S& g( u5 p3 U
    min=@sum(level:p*z); # l5 K( G- C/ D" [5 ]1 ]6 ^
    p(ctr)=1; , O* A( V( o: G1 G; d
    @for(level(i)|i#ne#ctr:p(i)=0); 0 e# U9 Q, T$ F. \
    @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)));
    # K" Z) j5 \/ s( X$ l, Fend
    * M9 e& e0 o5 Y$ ^8 F" ]* [4 F# `& P/ t7 A/ H, l0 q* s/ c, ?, K

    / L* i( r2 H3 i8 t0 Y# c3 R( Z2 h# q& g1 B4 ]# ~2 `

    3 o' |' E- u4 p1 \4 W3 j- |6 e5 k  T; N" Z% X) E
    4  多标规划的 Matlab 解法

    多目标规划可以归结为

    4 T4 y/ n! @- Q+ p- p9 E: k
      R" {4 w8 E4 b2 p( o

    + ], ~) a0 A4 l+ z, f" _[x,fval]= fgoalattain('fun',x0,goal,weight)           ' e: r- M- w% g. L1 ^2 X
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           
    3 v. O  L) h3 o- S[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    * j# A# |& |5 l4 h  J6 |" s[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) 7 v5 K7 c% J+ f7 H5 c6 n! o
    : u0 l* l) a0 J; _* g; ^
    / E- q3 B% p$ S* W% q
    要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。. z" [7 e: X+ P7 w
    例 5  求解多目标线性规划问题 . ?! H5 w3 p8 o6 V; ]8 a8 T! r
    6 m/ Y* _5 N1 g- [1 J; J* ?

    . }* U' I: T4 ^+ P# [+ `
    " N% z0 P/ n: R- [% [+ X' O7 Y& _解  (i)编写 M 函数 Fun.m: 9 L. b" U( b' W9 [6 v4 r
    4 l  p5 {% X* g! O$ x2 h
    function F=Fun(x); 4 t- v4 O. i8 b/ w: c8 u' L, \
    2 ~3 r- I4 ?3 Z4 o: P" C
    F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
    - g0 C+ [: T; i% H- k, c5 o( }; r, A/ C
    F(2)=3*x(2)+2*x(4); ) H7 R  ~- ^" C

      s/ H7 ?5 y. W- x' g( s9 [4 J7 g(ii)编写 M 文件 9 ^, g4 i; t3 C
    % J% N. @  L3 C7 K9 Y
    a=[-1 -1  0  0   
    0 J0 |0 z  c" I: |( n! ~   0  0  -1 -1    1 C1 o, r, i/ U8 Q' I8 ~1 J% A; E
       3  0   2  0    6 v3 }' z$ A$ x
       0  3   0  2]; 9 Y" `' I( d- S9 o* M. S
    b=[-30 -30 120 48]';
    0 H8 I1 k) s, G- r' ac1=[-100 -90 -80 -70]; ( a4 A( y  y+ A. ]/ j3 c
    c2=[0 3 0 2]; 9 G5 ?+ z  ?: t5 O8 l6 r
    [x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
    ! M5 q: g# x- j9 D2 Q9 U[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 3 B; B$ T$ o/ W  M" c) h
    g3=[g1;g2]  %目标goal的值 , }3 D( ^2 v9 v0 b3 z+ J( u3 z
    [x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1))
    3 p; M6 |% h5 y% p%这里权重weight=目标goal的绝对值 % K! _8 F. S( b7 _/ B; b( Z

    , C  G) J" w4 d) }  c) H

    就可求得问题的解。

    习题
    2 P, g* \. }6 \: _) t, c! v0 l( F1 L1 S8 A, N7 z$ \# P
    4 k  @6 j( C& b7 a, e4 Z
    ————————————————
    : y& G- w3 b! ~8 y版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ; [0 s. _9 [6 t& ?" Q! N' B原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932
    5 }# U7 z/ S3 Z0 R+ E# [3 }$ A( p( e+ G3 s
    9 M6 Y! I6 c% a, t' n5 P& _$ l
    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-14 13:42 , Processed in 0.422316 second(s), 51 queries .

    回顶部