QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2390|回复: 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.线性规划的局限性  z* Q/ H4 |) A- |0 c9 g
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。: V7 \, N2 s/ W4 E4 O4 i" _0 O4 ^

    8 C6 n$ M+ l* N6 y$ U 2.实际决策中,衡量方案优劣考虑多个目标
    8 H: L! ]2 n* T% c这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。  H  {6 B7 p, \1 b" H7 m2 O  P2 e

    : b. H$ U' ]$ u. w3.目标规划(Goal Programming)
    + O7 L3 j2 f7 K0 s美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。  W5 V' ]9 d* h- b6 F& }6 C3 K
    + n" F8 F0 b9 W' N" z1 l8 B1 G
    4.求解思路
    ; z9 k% h" F8 Q3 O. S$ t(1)加权系数法5 `  W/ x+ |9 \+ l" h
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。
    $ q5 Z% l9 [7 o% i3 Q  y
    2 z# |# N+ _& s1 }( i4 [0 {5 C(2)优先等级法
    1 t" V$ L( Z% D7 \5 c& R将各目标按其重要程度不同的优先等级,转化为单目标模型。' {3 g: L" B% q8 a2 U

    6 \2 A% r( g" ]5 y7 E(3)有效解法
    4 H/ @$ s5 f/ X" @+ ^寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。 7 U) e9 ~3 }! z# ~* X/ Y

    7 ^; V/ z( d, W2  目标规划的数学模型
    ' N8 H1 I! S$ v% ~为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。
      Q+ n( W2 u$ S& O8 c+ ~) y+ T
    $ y% i& U7 K- R7 K5 L9 B" ~8 p- H例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。  O) S8 s7 E; i5 T) _+ B3 V$ i& _' o

    " d$ w6 r6 c+ h' u7 @0 n, j" S9 a

    * W' f7 w& ?' _1 D8 F5 h" u. _+ s解  这是一个单目标的规划问题,用线性规划模型表述为:
    1 v& X5 p: G5 q- ~, N& _4 s! @! \3 ^9 o, _3 ?

    0 }: m: S" [8 [# F9 J' A; Z" n
    / T5 U; l! @# l# a  Q& V但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
    ( R- j& g& c% X2 a& J0 @3 j8 n  k* j0 w! \! Z5 ^( D
    (i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
    4 S% _0 B6 ^9 K, @6 w
    5 W% L! S; K8 e2 S(ii)超过计划供应的原材料,需要高价采购,这就使成本增加。. q9 e+ S$ t% j. ]6 C# q0 p( V

    4 Q- [9 Q2 ]( l1 o7 }(iii)应尽可能充分利用设备,但不希望加班。 + B3 D* O% \' I: e6 _( v& i

    * o& R1 ]9 a8 ?- H' s6 N" q8 v(iv)应尽可能达到并超过计划利润指标 56 元。
    ! K* H* V* ?+ U; m- n) j# i
      u. I. _9 Q& m* ?1 P4 A这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
    4 D2 z# v% P: P9 d; y/ m  Z5 r9 h5 a8 g9 R& ~4 j+ @2 r
    1. 正、负偏差变量
    3 r; ?2 U7 \: n( X+ A1 }  q$ Y9 F3 w
    7 k" O) l+ ]# R. s1 ^4 P
    8 V- j: W) ?, i3 _0 f& d2 U* L1 _; r) E: C
    2. 绝对(刚性)约束和目标约束 , y; H' X+ J: s; E

    . i% e: ~7 t- [( O4 ^8 U, u) c9 \( H/ e  Q5 a* [7 q; N" ?

    # U# G, ]( T6 ~1 q! w3. 优先因子(优先等级)与权系数 7 \; l, u/ }! l1 O: b! w
    # Y) p6 j1 ^( J1 O
    ( t, I/ [2 w/ ~; V. V

    ' Q$ h3 ]% k( D* |1 C$ ^2 v1 K4 b1 c1 J7 m! C
    4. 目标规划的目标函数 # G+ F9 J( ^: U

      ~3 m* x& |9 I' R6 ]  j/ v4 r/ Y
    5 J5 n: k( s6 d6 c
    " l/ q/ i0 z. }8 _- U9 H$ e& \对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 ( x$ D, h# d, D3 V8 t

    0 Z4 ]' N8 B+ c! [7 D, @4 ^例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  
    7 t- g8 G* e; F  [- B% M; @0 \0 t9 u: \+ N

    # F( R% X& E, V3 z5 E" N; v, a3 p9 V9 e# I$ o; x" u  }1 Z
    5.目标规划的一般数学模型
    1 n6 _- N8 M' T9 Y- Z  M/ Q& X
      l, w8 l6 i( D& W  D5 c
    ; A3 G+ t3 W$ z, R6 l* f' [$ T% p6 b0 n9 y) d! L9 X# y

    $ i1 _! h1 Q, k$ d! z  A+ q% H建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
    ) A3 y8 G, H" f, C. k" X# U- y& f
    4 Z4 q* {  @% ^0 _* Y6 w' \' U3  求解目标规划的序贯式算法& A" h! X% I2 i! Z% ^2 x' I
    序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
    ; }* d1 n( ^* a, R
    . Q: c# S& T: k! d+ o! B9 j: w" I/ j! g  I4 |
    & u! z$ j" W- n! g& @

    ' D7 q' d. r5 m: p3 Y" |0 l+ i1 ?$ }: J5 P- I) e
    注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
    " ]" i/ T6 {* Z9 {8 p
    $ _0 g: e! `0 r* r% w例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:$ t0 H; l, v! S

    ! j5 M3 u! B) v. a* [6 Z2 m
    4 F7 l4 I/ @) v! _4 l  ^+ Y# L8 t
    . O6 I+ L3 l+ ~: X9 @6 J(1)力求使利润指标不低于 1500 元;  n  f1 c% U: U7 D$ p

    8 U+ h9 h; N6 h" M6 f/ L; q(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;5 x* x0 b7 H3 X4 x" b3 P
    " _+ [" K/ [8 y  L: D' K9 _
    (3)设备 A为贵重设备,严格禁止超时使用;
    - A8 ]. O" B1 z
    ' c9 P7 e# N3 O(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。/ K  ]' m! X& Z8 f& w, M
    - J. Z8 u& S; x% P# P. j
    建立相应的目标规划模型并求解。: k' \9 s8 C& F# z# m

    : n# b% k3 A8 i2 y! b% Z; m  ?. y解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。 . J, O* x2 A+ D1 `+ n- P
    ; K0 S9 q* e, P* w
    0 n7 t) l6 a* c3 L8 I

    4 u, @9 j) p  H3 c- q$ u序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: ! h6 J& `4 R+ d4 q1 E0 i& u! J
    2 M5 k! j7 @" X5 j
    model: % `7 I. C8 _/ Y9 a4 }+ n
    sets:
    ; x4 Z% x' Z' }5 s  }variable/1..2/:x;
    : o7 \* b% m! P* LS_Con_Num/1..4/:g,dplus,dminus; " h$ P! d# N; k
    S_con(S_Con_Num,Variable):c;
    ' T( q- S5 X0 {endsets
    1 m) j" u" x4 z+ O5 A) cdata:
    ; S! S9 _$ p  k" O$ @0 ^9 Ug=1500 0 16 15; , o$ D4 K  r& B7 z; i1 l
    c=200 300 2 -1 4 0 0 5;
    & Q/ T6 X9 G1 Eenddata
    ' c) B* _" h. X  N/ wmin=dminus(1);   q* q  R0 A6 K+ P0 g' Q( d5 f
    2*x(1)+2*x(2)<12;
    0 _; {0 D2 m6 _6 V@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); - z, x/ x& M+ v, N, t
    end, h4 U& ~! m" h0 ~1 t2 {
    6 ^( X7 ^" }" y. ~; _) R& E8 t) ?

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

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

    model: ; o1 x5 g- n& P- X4 j
    sets: $ ?' A2 `4 j5 \' H" U; Y0 |
    variable/1..2/:x; 3 D0 u, M0 H( t- j$ B
    S_Con_Num/1..4/:g,dplus,dminus; # U+ d; ?, p; W$ N& r5 n
    S_con(S_Con_Num,Variable):c;
    - q2 w/ j1 R% w( |9 k1 }endsets
    & I2 V4 y6 l; T) D5 {, w  }data:
    ) G$ s: g2 s" Z2 Z5 |g=1500 0 16 15; " I3 H- A# |  u" a; t
    c=200 300 2 -1 4 0 0 5; + P( K- u& B: B5 u
    enddata
    , q! D9 Y* M, d, `min=dplus(2)+dminus(2);    !二级目标函数;
    . [7 D& Z1 t  G( A2*x(1)+2*x(2)<12;
    2 p* _0 A+ U6 I9 u+ a1 w& N" E@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); 6 z. T5 \' k: U- X- U2 I: r- w1 a
    dminus(1)=0;!一级目标约束;
    ( o3 b" G# M( K5 M8 a! G* j@for(variablegin(x));
    2 R0 G7 z. b' i' x$ p5 T0 Tend & [) o* S9 Y; D( d
    9 Q- O6 ]) b/ W7 @; z
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
    & Z( @1 n4 \! \% T" G
    4 X9 {* ?4 Y9 E: R: `) Bmodel:
    + |. E7 K* d1 _' U) X) T6 rsets: 5 P% s1 g9 U: w, E
    variable/1..2/:x; 1 J7 e; j) U6 R/ |* n
    S_Con_Num/1..4/:g,dplus,dminus;
    0 R5 r; F% U1 w1 }5 v: bS_con(S_Con_Num,Variable):c; & @. c) [3 A) I9 D% |2 \' q+ b' t7 c
    endsets
    8 [" ^( R: U1 \% X" a6 l. Y. Q( Zdata:
    & h7 M9 u: I$ r! \; Cg=1500 0 16 15; + y$ E8 j. \( a5 L: C
    c=200 300 2 -1 4 0 0 5;
    * F6 r& C9 `- I/ g0 W; n1 ^enddata
    9 D& ]; D* d; ~% `! Emin=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; ( i+ q) ^3 i1 P# c& ~, g9 @2 a" X& s
    2*x(1)+2*x(2)<12;
    7 C& m: \: w- \, f @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); 6 M) v8 Y* e+ U
    dminus(1)=0;!一级目标约束; ' m* Z! c- K' _" J
    dplus(2)+dminus(2)=0;!二级目标约束; 1 ^0 m" \& D3 c9 K
    end5 ^  x; u" R0 [
    3 H6 A, U& |% V4 R! F9 Q9 h  h+ a
    目标函数的最优值为29,即第三级偏差为29。 $ G, ^$ n/ c' N2 b& _
    ! J- C/ d1 F# V' H1 w
    分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。; E2 \* \) d3 ^. B% `* R1 ?
    3 a2 k7 `$ E! f: l: L0 \
    上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
    " `) _- m4 g. e# ~
    3 B2 }9 l/ T( c0 \例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。- P8 l4 Q- e- y9 B6 L5 t
    % z, u. R' `, [
    model: $ W2 W+ q6 w* L  F9 z4 Q3 D% |; H
    sets: ; u8 M4 X. y# K
    level/1..3/:p,z,goal;
    - H- t( f- T/ H2 w" K6 nvariable/1..2/:x;
    , `" S. |' H8 b" mh_con_num/1..1/:b;
    ! s2 a; }2 [$ h& q. Ss_con_num/1..4/:g,dplus,dminus;
    ; P, x+ t" u: d9 X, \/ X1 Qh_con(h_con_num,variable):a; & X& ^# s1 A# V* T
    s_con(s_con_num,variable):c;
    2 o& h9 S9 D& u& [/ M2 @+ dobj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
    * Q' ]! B  R- O3 |$ @0 C* J# Cendsets
    * z1 I6 b2 n- ]: @" tdata:
    ) u0 w6 J4 C% @$ J3 N: x+ p# d2 Actr=?; " w. W2 y2 k8 V$ F- Z
    goal=? ? 0; / o# R. O' h. V  e( k6 m
    b=12; 8 w6 j. O: r6 F$ s
    g=1500 0 16 15; 4 b5 b! o( k6 l% I9 t
    a=2 2;
    : ]) g4 L$ N) x/ qc=200 300 2 -1 4 0 0 5; 0 v" ?5 k, t6 a& [4 ^
    wplus=0 1 3 1; ! Q( O, [* H8 `' r( e
    wminus=1 1 3 0;
    $ u7 Y- e2 O) D6 Qenddata   q. `1 @& L( F8 S( u, S6 r; K
    min=@sum(level:p*z); : m7 i0 W" ~- K  U' Q1 g
    p(ctr)=1; ; u: i  {) k% [1 ^9 R# z
    @for(level(i)|i#ne#ctr:p(i)=0); ; j1 J* ]; [! V' Q  {5 s  D3 [2 k; L
    @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))); ' q% t8 V$ x; A5 |' Y) l. i
    end
    1 j/ z' H* L0 m4 i
    ' O9 Z( `) G! X8 S/ v' ?
    + x: |$ k8 T/ ^5 ]8 P% C) [6 y
    ) B( G4 q) D2 B7 a! Y7 M) z: ^) J' e+ n3 _9 a2 Y8 q0 k/ L3 p1 W% C; ?
    , P& P/ m! J3 f- l4 e" t
    4  多标规划的 Matlab 解法

    多目标规划可以归结为


    8 z' [; U0 ^5 z) ^. n8 P3 Q+ l/ Y& X1 @. n8 x, |0 r

    ; _( G! J- K9 O[x,fval]= fgoalattain('fun',x0,goal,weight)           : o9 D: D; f4 l' ^# x& V
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           + {. p2 B) m+ i. f& _
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
      w4 `0 O9 K: N' v" a. G0 N[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) 2 f# E1 Q/ z) p

    4 v; @9 V5 ]' d) v$ }4 `+ P- O. s9 r$ I  V2 r8 Q, W" K0 D
    要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。% U$ x( }% W" x
    例 5  求解多目标线性规划问题 ) ~* t2 n4 V% W/ I; J* @

    ( `( M. C+ E+ j( q1 J; V
    1 ^6 z; C# |$ a& F& H- }- Q
    / V9 C9 s9 {( b解  (i)编写 M 函数 Fun.m:   i9 W1 _6 v5 E) }7 A/ W

    : p  n; e4 }' N- l% Gfunction F=Fun(x); + E# K: I, ~* _4 A3 a& L+ v
    7 W( }  Y& Z$ H* h+ Z0 q
    F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
    / I6 O' s5 Y& e$ |) n" {( f8 H" Q6 ]6 z4 l
    F(2)=3*x(2)+2*x(4); 2 X! g5 Z0 s$ ~

    4 n! x  X# H" ?7 h4 M(ii)编写 M 文件
    7 p9 g: r2 r4 x+ h: F1 I& z) s% p8 U% _5 w1 B) s; o. p
    a=[-1 -1  0  0   
    7 p7 B( L# m3 p) F( O   0  0  -1 -1    9 d; d; \/ A0 `! X+ e, \8 i& ?
       3  0   2  0    * O! k) z# ~: p5 H  _
       0  3   0  2]; 3 U$ p6 C5 D& t9 P
    b=[-30 -30 120 48]';
      v& k8 \; [: _! Lc1=[-100 -90 -80 -70];
    * e6 S7 r; f4 A/ `  M# u* D, Xc2=[0 3 0 2];
    - ?3 k7 _9 n: K0 y6 k; A9 g[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
    & j+ r7 H: X* ~[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 . S! {# `2 ^7 B2 b3 ?
    g3=[g1;g2]  %目标goal的值 9 A7 S  X) E3 y* l6 @! r! f
    [x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) 1 W2 S4 h1 q( p, L  e0 g. `
    %这里权重weight=目标goal的绝对值
    ; i1 G, x+ h8 s+ v4 p* ^* X3 W, o$ i& C0 g% Z

    就可求得问题的解。

    习题- i/ A% x* J& p
    ! q- Q! s& l! C+ {% a! i2 P

    2 A  ~) s/ T/ p8 W" {7 k7 i————————————————
    4 b( B; `% P  y( F3 H5 S, w$ {4 m! S0 ~版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。* M1 \9 ^# v6 \7 q) ^- b
    原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932
    * F. M4 S8 L: ?( |% b
    ! C, Z3 k* M$ L: t, \( }) L
    ) K  p) @6 _( Z2 }% z
    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-14 08:30 , Processed in 0.407722 second(s), 51 queries .

    回顶部