QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2423|回复: 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 Z9 ?, O* l- v3 f0 X% s7 l1 [, }只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。5 ]* H4 ~: V: ?/ ~8 S0 S8 \" B
    " l4 X- f. T# n# ?" `' `
    2.实际决策中,衡量方案优劣考虑多个目标
    : \/ O) y$ x  b3 T这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。# c6 G, J# M4 @
    ' K+ W0 A& x4 x' _' U8 z+ E
    3.目标规划(Goal Programming)' b8 Z6 w/ Z4 m0 D( n3 O
    美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。# d4 q; T) C% r: p! u/ B0 q. I
    . p$ y: _1 d1 O1 _
    4.求解思路  Y( V, S/ G9 w0 }+ g: E7 F9 J
    (1)加权系数法5 T$ o+ Z+ B( z, w8 _- s
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。
    - [; d6 [3 Y9 n3 |2 V0 u3 W- S* G. C! n* k
    (2)优先等级法( \! H4 e4 K, ~, [  s! ]
    将各目标按其重要程度不同的优先等级,转化为单目标模型。
    5 U' n: F/ ^1 g1 B, V- M1 K+ }( Z' ?9 I! U( q* O7 C/ a) R+ v
    (3)有效解法
    6 o; P6 D  B$ X6 g* ~3 K" J  Z6 Y寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。 3 G5 i3 G5 N5 Q7 Y( U

    . ~& n# {( m: l: Q% Y2  目标规划的数学模型
    7 L5 u' P# F" H: P为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。
    * [  g# j" h, I% O- \- G' Z! r, }$ e5 a: L- L
    例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。; U0 k0 d2 L& g" N

    ) F4 O% i1 ^1 H! T1 l3 U
      L1 {( v) Z7 Q; t5 B
    8 K! v, Z9 a2 r1 u5 _8 M解  这是一个单目标的规划问题,用线性规划模型表述为: : }4 v2 M+ U/ N: ^0 x0 v3 N
    2 w. @; n) B- ?/ M. b- D
    8 z6 k8 m1 m9 B9 V6 w

    9 ]6 X! g( }5 ]% W但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如) I" \# _5 Z' L5 g/ ~

    # N6 y" R* R4 O2 b5 R/ U5 G1 ?(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
    - V( |$ e0 F% e4 [6 U7 i: Z4 c2 O( {: Y1 s  \) o
    (ii)超过计划供应的原材料,需要高价采购,这就使成本增加。# i) O" Y+ ?. v, l4 }# J7 c3 A
      g! X$ B% G( B; h
    (iii)应尽可能充分利用设备,但不希望加班。 % I# d9 l$ a6 Z' Z1 `
      d' _  F+ S1 ^) j  `6 b' V4 ?0 d
    (iv)应尽可能达到并超过计划利润指标 56 元。
    9 [# T. M) I, J: `5 F$ F
    2 b; X/ h. L9 x1 S" M: P; k' i这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
    / ^- ~( Y8 W& z6 t$ _& v
    / X( |$ E- s# u. H$ B0 R7 P1. 正、负偏差变量 0 e; @* G- x# N# r) D

    0 f  Y: Y5 ^- W$ i' q! I, e' v) M$ u$ B" E- r
    - c: P2 v+ m9 T/ S
    2. 绝对(刚性)约束和目标约束
    8 Z: u1 b3 W& ?; Z9 _+ B- Y% Q8 x2 q1 j+ T; `
      c* n, P6 e' T# s1 M2 e0 i$ X( b( A
    % `  x& y$ a8 A( K
    3. 优先因子(优先等级)与权系数 8 ~  r( ?: T8 Q5 v9 n
    . l6 a, t' p' `0 }
      t- ^" P4 n9 [' M
    7 S* C6 L0 Z0 l* W5 C' [

    $ a! x& `) \6 ]' P' t: J* x4. 目标规划的目标函数
    . r  U; p9 J$ n3 _/ o) P: m8 p! W2 Z3 W, ~
    5 h+ M( S5 [% _: u, k+ N+ S9 H

    ' V( K6 t/ `) t% m# s* m对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 2 G3 J/ @% V+ @3 F

    ! o) a$ w# t0 O: e0 k9 _# m例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  
    " p, B% f) n, ~: M& W/ @) I/ T1 A- i! X# ]9 p% d) u
    ( I& I9 N: `1 D) J
    ( c  b3 I# o. |+ O5 R6 {# b
    5.目标规划的一般数学模型
    8 |' W& e9 i# O# d( j2 Q; ^) D& X7 I5 p' y% X. Y3 r& g* ], W

    ' |! E+ i) X7 Y  F- t# @
    0 F* Y  ?  w/ R! P" c- Q. C  c5 Z0 P) U- }2 d. V
    建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。 $ F6 S* A* p( o6 O* C/ K

    . w! ]( ?# o* I# x- f3  求解目标规划的序贯式算法
    " k" K& i( r9 e1 S  o$ O0 z7 x序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
    1 s. I8 l  H, o
    3 x. S7 k7 W2 W5 R2 v( Q+ h' C4 L8 ]; a3 k
    8 S/ G- g8 W* r- m1 a
    ! S8 ~4 H( X3 ?5 \9 w) ^
    , `5 \! {8 O' ?  F
    注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。 # T% a( g5 h3 ^1 u

      u& M- |  J* c7 M  L4 K" g/ j  u例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:
    ! P" ?, J( D3 h& x& C" d- `7 G6 ]+ V9 h
    2 H5 D' x2 j, p; c0 n0 R" v, j1 \
    0 y, Z" w0 X/ g- X- `
    (1)力求使利润指标不低于 1500 元;
    8 G$ {' X4 k& o' U1 I8 c) o. I2 T/ N# @( u6 Y
    (2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;
    0 R0 f) q6 i% G) P6 B. G  X
    " `8 E5 p+ Y2 d$ s6 u, s(3)设备 A为贵重设备,严格禁止超时使用;
    1 q3 Q1 s4 m% s1 W0 D) J  L" Q9 o# ~% p( C9 J6 c
    (4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。5 X+ A( k) ]6 a/ g" H

    ( _9 K5 e9 p* {7 E6 a4 f5 v: ?建立相应的目标规划模型并求解。
    / M% ~' a3 s" X; R' P8 `9 }) v! u# x6 [% U
    解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。
    2 f, ?8 U- f+ z7 H" L& O1 ^8 o3 j9 w2 B$ C0 `7 H; a6 U

    ) m% g+ p, R' n- d, I7 r( F3 {% z6 j; ~$ y
    序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: ' x( F; t+ f, G. _, ~

    ! y1 a: R# y1 O3 {' Hmodel:
    $ Y4 H8 I: r0 N/ i+ i' Q+ @sets:
    8 T! p( v/ \% |- l* g1 ~) [- p0 f! H; vvariable/1..2/:x; 6 C! |7 j( ~; j9 E' p" a" t/ V
    S_Con_Num/1..4/:g,dplus,dminus;
    5 b0 j- x% ]& Y: A, J; y# F, P' aS_con(S_Con_Num,Variable):c; 0 K! F% ?" ?" x  e
    endsets
    ( U$ o: [: @9 h# @& R7 Zdata: 9 P6 Q/ O) w. O; w' S
    g=1500 0 16 15; $ S9 |0 T5 _! p
    c=200 300 2 -1 4 0 0 5;
    3 a; M8 r& E) T1 C1 s2 j8 Z2 K! @enddata
    , p6 V+ H1 L0 Jmin=dminus(1); 6 y  s$ E% }9 F9 \! f
    2*x(1)+2*x(2)<12;
    0 f/ ?; m( a/ c% U! ?4 j- z5 u+ L& F@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); % c  ^5 {$ \+ t! d
    end
    & P( Y' z; |) E
    3 O) }& k! t; v9 @. O5 O7 e

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

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

    model: % _2 p4 R. w) R6 N. `
    sets: ; d1 i8 m  ^5 c7 P" }
    variable/1..2/:x; % w' v- T1 A+ ?1 q1 A& H
    S_Con_Num/1..4/:g,dplus,dminus; % G% o: q% N, L7 e3 B
    S_con(S_Con_Num,Variable):c; 2 ?1 }% Z$ U- i- p4 f1 h
    endsets
    / h1 V. h' ]" Z6 t+ E% f; q5 A  Bdata:
      A; X+ a& x6 w( xg=1500 0 16 15;
    ! P; R* z0 P# E3 _+ A) X7 uc=200 300 2 -1 4 0 0 5;
    2 D# i3 z4 {- F: l  Lenddata " k& [- G( i& a# y& Y' |- W# c' f
    min=dplus(2)+dminus(2);    !二级目标函数; 6 }# U8 @0 r4 b4 O3 S
    2*x(1)+2*x(2)<12; 8 b0 S5 z+ M/ c2 i  d, F9 ]/ Q. _# {
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    $ }, w% `* E$ ^( K+ ~: C/ q& Bdminus(1)=0;!一级目标约束;
    , R" Z5 z7 x- w$ I& F@for(variablegin(x)); 0 d4 X- {# ?4 \+ r7 c+ n
    end 1 L# a9 U& X5 p# ~4 G
    ' ?* Z7 k! j# D. X7 ^& n
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下: 8 j5 s2 |( l# V0 g4 [$ Q* p/ @
    : i" T$ `  J' [9 T; O5 ]# d$ Q
    model:
    3 r, C3 |$ K5 i3 g3 g% r: d- @4 fsets:
    9 E, A2 x% [6 J& Zvariable/1..2/:x;
    * H& J' y% O1 f  n7 \+ V$ d0 n5 mS_Con_Num/1..4/:g,dplus,dminus; 2 q! m3 z5 m, @' v
    S_con(S_Con_Num,Variable):c; % _8 r0 N6 k2 u. A( w
    endsets 6 X* w) \6 i0 S" A
    data: # T" F  a3 Z7 _4 p: `2 x  q
    g=1500 0 16 15; ! B8 u: P) w: g3 V& \* Z
    c=200 300 2 -1 4 0 0 5;
    3 t, k* o% x+ ^: U9 Oenddata
    * Z/ q7 m2 u; d; J- u. B' vmin=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数;
    % a( \. @$ T, ]0 {2*x(1)+2*x(2)<12;
    ' C5 J4 Y; s1 m6 p1 B7 C1 i1 c  _ @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    . X  N+ }0 A' a. ~5 m7 U% S! odminus(1)=0;!一级目标约束; * I2 I/ K+ F! G1 [1 n, ^
    dplus(2)+dminus(2)=0;!二级目标约束; , g+ u) U# L& A8 m+ r# K; o' K1 `9 \
    end
    5 l2 ]6 q5 p0 n9 d7 T5 m0 a7 R
    8 R, e& z+ Y" w6 @目标函数的最优值为29,即第三级偏差为29。 9 a; b! N0 Q) X2 x
    * y6 o& z. w% I4 t
    分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。% d9 A' d$ W3 _! H2 }! _& h
    $ X6 r+ v9 B+ q& d4 y
    上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。! [$ K6 {' t' H, }9 ?
    ; P$ m( Z& {, f0 ~8 V
    例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。
    8 m) K3 ^, ^) B2 _: F& A. d) D0 d, ^+ E' g* r0 E# z! }- V) a3 A  [9 o
    model:
    $ ^' L# k) `( Z3 Q5 A1 T! T+ i7 Z" ]sets:
    1 n- o  E) ]9 H5 r( E4 v7 d2 ulevel/1..3/:p,z,goal; : K% |( s& b" k
    variable/1..2/:x;
    2 O2 Q; Z( M3 E! k7 K7 h* }h_con_num/1..1/:b;
    ! a) f, n1 j; j& a5 Fs_con_num/1..4/:g,dplus,dminus; 2 i3 T; b6 s- a6 A
    h_con(h_con_num,variable):a; / h" I& o- C( V& W
    s_con(s_con_num,variable):c;
    3 F# j8 e' Z& Q+ P' Vobj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus; 0 G% o0 y1 R$ q6 D' S4 E
    endsets
    ! Z. y8 b  r5 Z# d9 |8 `data: 1 _. p1 a4 [! z) q! B# x
    ctr=?; / h$ Y  @# @# A1 n9 }
    goal=? ? 0; ! V" J9 w& C1 l3 U- Q( B& B
    b=12; ) T7 g9 p# K! b& P$ q2 p) ^4 e
    g=1500 0 16 15; 2 Z2 C6 l; O$ J# Q2 t: Z
    a=2 2; ! |4 u8 |+ k2 f- q: \- N, s4 O; t$ _
    c=200 300 2 -1 4 0 0 5; $ M. {# A$ T/ D) O! S+ T- t! w
    wplus=0 1 3 1; 2 e. h. Z; Z; L
    wminus=1 1 3 0; % R5 a6 x# t8 [% _, r. w2 v# r
    enddata
    * v+ I. D! [& o9 |! z" Amin=@sum(level:p*z); 5 H! j" s( f3 |# D/ c- q
    p(ctr)=1; # J; l, l0 {) R- K& Z1 h! a( [1 E
    @for(level(i)|i#ne#ctr:p(i)=0);
    7 z# l& K0 X) 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)));
    - Y3 W3 K' T8 a+ C- P- eend   u8 Q$ M7 r& O6 m. Y0 ~
    / J7 D! c, {0 m; N0 N9 {

    / D9 g& j$ O: e( t
    & y& Q- V, w! ]. y
    ' D' H# i" S* t% ~' Z) E& U3 C2 i& z5 n4 [7 ^
    4  多标规划的 Matlab 解法

    多目标规划可以归结为


    ; J+ P) \1 i6 @3 v/ O! ]2 m1 m, Q7 d' {' j% z+ H& Q! q! e4 g: m
    7 b! o4 d4 f% l' {. T; e& P
    [x,fval]= fgoalattain('fun',x0,goal,weight)           
      R9 F; v- m& J; L[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           " d+ R0 C( X8 ~$ H+ H3 R: u5 e
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    - z+ W, s- Q: P# u& ~[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) ( r& `" q) x5 J% a' _( J6 {6 X
    5 a6 J+ d7 g2 l% P* [4 s1 e) L  H
    ( k$ B! `$ B7 q+ l& {7 L+ ?
    要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
    8 t. F; }: A% l, T, l- S; N  R 例 5  求解多目标线性规划问题 , _3 ^  ?( v  V- Q

    " D3 t" Z" ?- q) ~
    1 I7 k+ q. C, r
    " D9 W0 x6 G, f7 e解  (i)编写 M 函数 Fun.m: : Z5 v, P" q' S) i- U$ I8 @# b9 [
    ' y' s7 w9 ?  s2 w' l
    function F=Fun(x);
    ( j0 u1 h7 x) X8 I* S$ J& Z: Y' ~2 b3 S5 n% m, A
    F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4); 1 k: O. V7 U& c1 K& o6 ^
    4 c! _3 ]- O. z
    F(2)=3*x(2)+2*x(4); " L& s/ c9 J5 |3 a& a

    + o1 Y4 y) o3 I) @(ii)编写 M 文件
    ! b- O, i# n8 v* {6 J
    6 x! \, B* r- j4 |( i3 Fa=[-1 -1  0  0   
    , _( o; {7 @0 G9 R   0  0  -1 -1    , c* U5 o, S! Q$ q4 w& w
       3  0   2  0   
    : ]5 M$ I4 o2 }9 R$ G   0  3   0  2]; , g/ D: E1 p' m* A% E
    b=[-30 -30 120 48]';
    5 s" i7 w% r8 X0 c' z  p. _- Nc1=[-100 -90 -80 -70];
    . T- r9 R& o; Ec2=[0 3 0 2];
    " O& H! u! o; m0 B5 x[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
    ; O( Z4 K5 s8 w; x/ H[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 : K& I& v1 U! ]+ |6 d+ P% \8 {" N2 r
    g3=[g1;g2]  %目标goal的值
    ) c4 D6 N: N7 H. e+ a& A" Y& d[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) % i' J7 w* c' |8 Q) [. K
    %这里权重weight=目标goal的绝对值 , }  w, H- T/ q

    & u  u( s! P4 N$ C* \

    就可求得问题的解。

    习题) \. V  o' M5 I: G2 {
    7 ?+ D' S2 E4 {4 H% d

    : q- n4 @% d# n+ N$ n% _————————————————
    0 T. L" C- ]' i+ n3 q$ l版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    4 x, E, P! q1 T+ w' f$ H原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932
    1 [) f+ x; |( W
    ' W2 m( J" v* k: l- O3 r9 T- S' \/ _. I6 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-7-29 03:16 , Processed in 0.510948 second(s), 55 queries .

    回顶部