QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2344|回复: 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.线性规划的局限性
    ( F& i8 w3 I3 r' `只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
    0 U5 E: e* d& T$ V( g' r! Y' `8 j- }0 p- w- r; }7 Q' }
    2.实际决策中,衡量方案优劣考虑多个目标
    9 Y4 l5 ]7 [# n3 D这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
    & H1 J+ ~" ~, {6 A& x  n* E6 z! c0 K" U( ?) k  ]# M1 ^, u
    3.目标规划(Goal Programming)+ w0 q, H, V! z" k# d6 D6 A6 t& Y6 i
    美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。$ `% t) s& ?+ |/ Y
    + `9 C0 Y$ ?# s
    4.求解思路) ~5 `8 d& `( S6 v
    (1)加权系数法/ d6 S! `% v8 [' p: e; k2 Y
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。, j( w* U. a6 H5 y% {
    - F8 j, A4 s% G+ N1 N7 w7 i  h+ p
    (2)优先等级法; ~: U2 {4 \& ]8 b- _4 y7 I' z
    将各目标按其重要程度不同的优先等级,转化为单目标模型。
    ' {+ m6 d- M7 L) [, @2 p6 ~/ h0 a& @
    / Y- C: f) `8 y" S(3)有效解法; L! e% y! k' V
    寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。 % b1 u. J# g) z9 R5 w. n
    1 y# a  ^% z& i7 A1 |! n
    2  目标规划的数学模型
    % B2 }; g3 A. O) g5 V, @  q8 o  a为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。. I/ Q  d5 r7 G' \  ]3 u  v

    / v: s5 q" M, S# z5 R例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。( i" f( j' V' E
    5 u# k4 ~! `  i9 \; ]: G; b0 |
    7 F: L  F) F5 n/ ~& z" u

    + L8 S3 T) e  Q# T解  这是一个单目标的规划问题,用线性规划模型表述为: ! n, Q0 E6 @5 R4 G- n
    2 ~3 A/ T$ X' M+ ?0 S/ x8 N/ X. [
    " \5 L2 w0 o9 E8 G  l& f- ~+ e
    7 |5 M9 C' }( K  l& \/ e" [8 D
    但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
    $ g. l$ j2 t$ W
    & r! X2 M6 P$ z7 m2 v% ~(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。4 z6 B$ ]9 q5 J2 g
    ) T! \* y: U' I4 v9 G( d$ a
    (ii)超过计划供应的原材料,需要高价采购,这就使成本增加。% A- [, C$ s& q3 e
    $ i  m, l) J3 t) S. g- N7 ^
    (iii)应尽可能充分利用设备,但不希望加班。
    # z5 f3 X0 ~( {* g! f- n1 u3 ~$ j8 F
    9 C3 |6 k1 T5 u, K$ \; H, I- q(iv)应尽可能达到并超过计划利润指标 56 元。
    ) \% s) b" l2 `, L+ l6 C3 v$ S% d6 z; d6 Z$ i/ `" Q
    这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。 6 `7 k* N# q9 X+ B6 H: b
    4 K# U, J9 l8 W5 {: }/ G
    1. 正、负偏差变量 / Y, v6 [" i9 o0 D& ~
    ! `" i' k9 M9 x: I# i
    0 {! y% ], w* ~0 ?. |) W
    , I4 W: |! ~' N1 e
    2. 绝对(刚性)约束和目标约束 : ~2 r& N- @7 @

    % P  @% A3 g3 s- K4 w( f6 i- H, P. K$ x# m8 C& T" v

    9 q8 D  Z4 u$ R4 B* N# x7 S4 e3. 优先因子(优先等级)与权系数
    ) r2 p: U7 h$ B) K. q0 D9 P, y5 ^
    / a; Y' C3 q& O) H, C! a: @; O* o% L: S1 S

    5 z! K" I: ]; ]/ c9 k: B6 H; V
    4. 目标规划的目标函数 5 H+ o2 H/ \5 B

    , H; v1 K+ Q& }, }$ z1 W# R- g% D5 _. e" J# n

    ) C; q9 o1 u4 j9 \2 N对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 4 }- I7 `3 B1 I$ F3 |
    ! V$ A1 V/ F$ g6 L$ w" F; g
    例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  
    " G; F' m# m* s8 M2 r2 p  V
    $ ?1 q2 X: B$ g3 {2 K8 U/ M/ k
    2 c# Q* T) u, E; P! F( N4 k+ J5 S$ {- v, ^7 [1 l
    5.目标规划的一般数学模型
    . k. h) N8 W( P" ^2 z
    , U$ z. q: j, t: S' i! h
    / \6 V8 _7 q( A- Z  z, o: }# H- Q; G7 c2 l' J, U
    " n# F( b0 `. O9 q
    建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
    , [. u9 m$ b* Q8 J) w6 h8 v
      m, ~7 n; }5 M- u3  求解目标规划的序贯式算法
    8 l0 V/ T. ?# y2 h, t# w7 {# |序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。   K4 U0 m& G9 _+ z$ }

    : `2 g# q$ M  \" S; w* \: d6 D# j4 V
    $ }8 k# r7 p" s, Q! H

    ! b, Y2 e+ i, A- x( S7 a
    2 m7 \1 K! ?3 S注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。 / C$ W4 C( `# n' N6 Y
    : r% m, v  R$ |5 ]' n2 ^, E. a
    例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:
    0 ~8 g; l2 y, G+ I
    - h) ^% c/ u+ l. [' W
    : H2 R2 t( D) A( s; X
    8 E- Q, x5 \" m- R! R(1)力求使利润指标不低于 1500 元;
    5 }* u/ }0 l& t& `% o% l, e5 d' B& P; n* W$ ?3 ?
    (2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;  i& i' U% _; v; z
    4 a( N( q4 o7 Q- m8 R& b
    (3)设备 A为贵重设备,严格禁止超时使用;* U! }1 S/ _8 Y2 Z3 ]! o: D  n5 a
    ( B  k7 ]+ H- a1 e$ l+ s* i- c
    (4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
    , Q! g$ D7 Y; d! I0 S2 T; f( u/ o% Z) y& |4 b4 E. |+ X- b
    建立相应的目标规划模型并求解。
    # c6 H$ S7 P6 D( {* G  W0 ]8 J. h3 R  w
    解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。 " |, d& t- u" `+ c/ ]+ l& ^
    ) ?5 C! o% d$ I+ x1 k$ I' X+ v
    * ]! ?4 T( I; p3 C' Y
    ! {, f4 f- w) \* P9 R& g
    序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: , X9 x; J* _$ K1 j

    6 x0 D% K4 ~" G; `5 pmodel:
    2 [0 k: g: X6 I5 l6 B. @; Rsets: 1 f3 S6 f% y8 U
    variable/1..2/:x; % \- `: z1 Y' z! [4 P
    S_Con_Num/1..4/:g,dplus,dminus;
      r4 m$ y4 B+ n, `S_con(S_Con_Num,Variable):c; 1 |+ V9 J6 D( d# y/ l1 O. d% b6 q
    endsets ( V. t+ |2 T1 e7 o3 w' D
    data: / ^; v& E, \# ]
    g=1500 0 16 15;
    % H/ G. V, ^; L3 f2 t2 v# A+ Dc=200 300 2 -1 4 0 0 5;
    ! ]5 o" e3 C7 M, i$ H0 m2 M2 z/ L- penddata   S8 A$ s# h8 U6 k( {
    min=dminus(1);
    3 q& D" |4 z& l0 q0 Y2*x(1)+2*x(2)<12;
    5 P% |  p/ U/ k@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); 2 x( t5 n( h% c% k
    end" O/ y4 p' w( \3 w% {
    8 Y5 v/ O% I  ~3 k) h6 X) c

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

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

    model: 9 g5 s; P! S3 X3 `  S; }& U5 M
    sets:
    0 a! t' r( |. [- y, Yvariable/1..2/:x; 4 P% ]7 i, Y5 d" w3 X: a
    S_Con_Num/1..4/:g,dplus,dminus;   y+ |6 P5 l1 S2 K& b% [" N& S/ U( J
    S_con(S_Con_Num,Variable):c; 6 L" k& h1 u) ]8 Z# b
    endsets " M. ~7 y* H2 F, c0 B; P2 v
    data: 7 P1 j* Z' {- [2 B. }
    g=1500 0 16 15; 7 p* E! s/ ^. `  o7 S* J
    c=200 300 2 -1 4 0 0 5;   V- q  j+ y# k/ ?) y! X
    enddata & Z) A, p8 \1 M- m- r. ^1 M
    min=dplus(2)+dminus(2);    !二级目标函数;
    - y' \% `4 z# |2*x(1)+2*x(2)<12; ! L5 E7 E. T1 Y% ^- H
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    2 ^! J. j0 j2 {. v- e- ]dminus(1)=0;!一级目标约束;
    & a7 m) l6 \0 Y8 X4 w1 ?2 |6 h@for(variablegin(x));
    8 G& y% ^/ M  {4 W! Iend 5 R3 @6 e, O7 U! q: t" L. p6 x
    $ Q' |( ?6 e  G$ d( ?2 r
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
    1 r* h; O, `# M/ k9 W# P2 e4 ]  x0 C
    model: " K( C) Y$ J5 q4 X
    sets:
    5 ^6 `- V! _8 p0 lvariable/1..2/:x; - h* j2 l+ i( T7 [7 V0 n( y" e
    S_Con_Num/1..4/:g,dplus,dminus;
    0 W# ?$ y/ K2 N& {, tS_con(S_Con_Num,Variable):c; 2 ~3 p0 z& P7 J+ B$ d" ^
    endsets
    . S: H' _7 q" s% Bdata:
    % }1 I6 G8 ]) v% Bg=1500 0 16 15; & J7 B% ~% }' H* \7 b
    c=200 300 2 -1 4 0 0 5; " A8 [4 K4 |- l
    enddata " g0 T2 h# S3 j
    min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; , ?6 M+ e6 C! k- I# k6 A8 t
    2*x(1)+2*x(2)<12;- V/ Z- N, X) x5 @% B5 {
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    * L, ?+ T0 ^9 s9 [% zdminus(1)=0;!一级目标约束; 0 U' I( _. h8 i
    dplus(2)+dminus(2)=0;!二级目标约束; 0 N9 B7 }& _5 x7 L9 j/ g
    end
    4 n: }; f* ~2 j9 d: B' P0 ?$ y$ W7 B1 ~: a7 d- W8 c0 l
    目标函数的最优值为29,即第三级偏差为29。
    , q8 p6 M8 y: `' w0 }( h) R, r5 j& }' `' i& N; w: J" F
    分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。) X+ R8 k; B  |# R- J4 k8 r6 Q
    + C* H6 y( {0 @1 e- M2 C
    上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。- `5 ^$ _+ u1 {7 L+ @* h# e) r$ r

    # \# u7 K6 o4 v, A4 v& ]例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。
    . s# @' P3 l' H
    1 M  T$ Z, [+ R4 T$ A- |model: + U, A- e5 u) o* M( O/ ]& q8 H+ l
    sets: $ P4 X/ W5 {* R, g- g
    level/1..3/:p,z,goal; * W9 x/ E" i6 {" p& e
    variable/1..2/:x; 8 w( K* b! Z( u0 Q% H
    h_con_num/1..1/:b;
    0 _( L4 _% o  ?s_con_num/1..4/:g,dplus,dminus;
    + ?  X6 @$ f6 O3 Ch_con(h_con_num,variable):a;
    ! m! A1 U6 }& s, Z% A: hs_con(s_con_num,variable):c;
    $ c3 j1 U9 V2 h8 ^$ O! Tobj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
    : S- L& N, i0 Iendsets ! k6 S$ C  R4 z7 i' E5 `' C
    data: ! ?5 ~  H. q( u; H
    ctr=?; . V( j  d/ j- m& f, X3 ^
    goal=? ? 0;
    3 ]) |0 f, d1 s( g# tb=12;
    + z/ l7 W3 F' I+ B: g; ^g=1500 0 16 15;
    , t' [  z" x2 k- h0 ma=2 2; : Z9 g, v7 \% H( {& R: j3 N
    c=200 300 2 -1 4 0 0 5;
    ( l6 j  |/ S+ ?( ~- p$ A1 a+ bwplus=0 1 3 1; " H  W2 Q* ~* Q  l
    wminus=1 1 3 0; % k, ^" `& @) {3 V2 Y+ p0 r: u! Q
    enddata + E) z5 r! ], e  o2 c
    min=@sum(level:p*z); " u$ U! G9 x! I' P( o$ H" x
    p(ctr)=1; % Y4 H6 G  _0 g2 S4 [/ O& t0 w
    @for(level(i)|i#ne#ctr:p(i)=0);
    7 N% k, \7 H; G4 r@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)));   H, S% R- o# c% p, K- M
    end
    ( D$ F; ^* u, r) b6 j
    ' r; U' ?2 @" _$ m6 b7 ]( l, L' }2 h1 O

    # k) N* y! n+ x- C3 N9 a) ]
    2 R9 W- a/ |8 y0 A% `0 Y' {& r: L. K- Q8 P- d9 e
    4  多标规划的 Matlab 解法

    多目标规划可以归结为


    % i9 L0 u( z: x; u( o2 S1 k' p3 U. G% M( h

      C+ Q+ }, r; ?[x,fval]= fgoalattain('fun',x0,goal,weight)           
    3 k2 M! k+ l( [+ j[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           # H# x+ p6 Q& u/ p
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    4 C$ ?0 M; ~4 j[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) 1 b( R1 L: ]1 i, g: {3 O, `

    + [: L' N& i, ^! j$ b! |. f% U9 d
    7 [1 h3 w1 k# t) I要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
    5 A9 q# l4 q( Q: y5 O! c" a 例 5  求解多目标线性规划问题
    / |# H  l8 I/ |9 r) q  E
      `  r# w8 o9 \  O7 ^5 b; h( r" j9 Y- x$ Q9 B: e
    5 l3 X8 E. N% i$ j- e
    解  (i)编写 M 函数 Fun.m:
    % F7 h* }7 V' E: M
    , ]7 i) |6 N# R' l( U  O- vfunction F=Fun(x); * D1 \* Q; [' O% B

    9 M, F2 I& D) F' R1 b! ^F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4); 9 m7 N, o6 K3 W' }7 t

    & B! ^/ S# Y! E9 V/ A( y3 e6 {. w6 R' }2 ~F(2)=3*x(2)+2*x(4);
    . r- t; {, t' A6 R7 V6 l: S
    4 S/ X2 L1 s  _) m# d" _(ii)编写 M 文件
    ' j$ K( t4 s$ v" E- z/ M/ C
    % o" Q2 m# l+ |a=[-1 -1  0  0    ( I3 p( j$ B. R3 u
       0  0  -1 -1   
    ' @& w4 f% d2 L- V) ^1 G; C   3  0   2  0   
    % R' z: V2 N* g   0  3   0  2]; * |2 {9 H; n' a7 w; a! |
    b=[-30 -30 120 48]'; + u( r3 Y* b: [9 |) o( X! c
    c1=[-100 -90 -80 -70];
    * c( r) _! d; A4 w  i+ Ac2=[0 3 0 2]; ! [% j8 U  ]8 t' `1 \/ @
    [x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
    4 e. v, T, `7 d" @. p7 E[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 & C1 t7 p6 ^1 I. l
    g3=[g1;g2]  %目标goal的值 & |0 \) I# w& t+ Y
    [x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1))
    ( ~& u: l8 H/ r- e* z" m# b%这里权重weight=目标goal的绝对值
    / y! s% a0 ^! m
    ' Z9 F0 E7 G" U8 S

    就可求得问题的解。

    习题: Q4 U, M. V  M& P! g

    # L- p' J7 A5 j% m3 w* L% G6 @* B" J* p1 X  v. e+ D8 W1 N4 _& t
    ————————————————4 d( y/ B2 D& J, A3 i
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。2 W2 }, t( `4 G, [4 \
    原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932& p' L( H# j  ?9 _9 q, P( O" ~1 j

    . `9 j$ d0 R% j+ V& Z
    # c( }/ `2 y, V' \
    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-13 13:55 , Processed in 0.308176 second(s), 51 queries .

    回顶部