QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2384|回复: 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.线性规划的局限性( d# u7 u8 @+ P3 P- ]5 n$ D
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。4 \, g, l" x5 q1 H
    / k8 j9 ^6 x. x& z. V. _
    2.实际决策中,衡量方案优劣考虑多个目标3 z3 |" L' [! ]  Y+ s9 ^% y& C+ {" ~
    这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
    ; D& s9 _- o( j% F3 m1 o
    7 E& D: g! x& j- z) j9 B3.目标规划(Goal Programming)
    ' Q9 N* E; J. v) s, M/ n美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。8 N4 k4 `: `" o, s  o
    ( B! d. [  p7 z1 F  V  y
    4.求解思路# O, j3 Z1 _5 d0 j; w
    (1)加权系数法7 @& h# q: h% R$ ^) @* L5 R/ c
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。
    2 [- r0 X5 j% G2 _( _1 q* v- W+ s' u& ~! u( z
    (2)优先等级法
    5 t. C+ p/ n6 R# c1 }将各目标按其重要程度不同的优先等级,转化为单目标模型。
    , f' ]* O& @# ^% R# T  F! |- A3 P9 X
    (3)有效解法
    8 Y5 g6 u6 u1 [寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。 0 S7 G0 J/ R) }! i( G/ @' j5 h  A

    % X# X) l" l# a- M$ ~3 D2  目标规划的数学模型, u: Z8 u; T; r' b
    为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。# D& p: ]: X& @3 ^
    / Q$ \6 w/ I) Y/ p
    例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
    , i# I# O" q1 n
    / p" J' t2 A6 ~( C' g4 k! Y6 d. g/ w; [: Y! |: C7 p( L2 |; v

    % O' T5 Y* F8 L& K解  这是一个单目标的规划问题,用线性规划模型表述为:
    ! P/ W- G  F4 V9 h& e1 p1 h' i% j7 V* P' A7 O1 U, t! n& {- y
    * w1 x+ s' ?( T' Y

    . L- f* T8 |. C; K, N. J但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
    5 b% t) b7 A" K& c/ k  h9 s- Y- A; X
    (i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
    . K+ F$ l& b4 T  A2 W
    : K" q6 t4 n) W8 t* |(ii)超过计划供应的原材料,需要高价采购,这就使成本增加。( R2 m2 f+ q/ b& u

      u% b9 X, c+ @9 ^( \(iii)应尽可能充分利用设备,但不希望加班。 - ?, K% G% W/ z0 T" h
    7 {$ n' f5 v! {( D
    (iv)应尽可能达到并超过计划利润指标 56 元。. C6 l$ v4 D+ j  G

    " T+ j4 u3 @* ]! t+ Z. E; z这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
    $ V% W8 u8 R2 b" O! D- }7 z( k% H# I' F
    1. 正、负偏差变量 0 d& _5 v1 v3 F% C

    $ o- H: O+ S4 r3 ?$ W: K  k3 _, F/ c: m5 l( \
    * b9 d, T4 f7 p
    2. 绝对(刚性)约束和目标约束 , z$ J/ s( {  X2 J: p" T2 e
    4 v' ~8 {% U7 M$ j* U
    2 Q( a3 n$ p1 |' S- `/ v% z+ K

    % j! W/ e0 g" c. @, Q3. 优先因子(优先等级)与权系数
    ( I1 x. x: M+ |" V
    ! q! u% P8 ?, r) ?7 u+ n
    : j1 y, r, a( d$ m: B3 b5 X+ Z8 P7 {0 f0 y) K1 }; ~, c* e
    7 K" ]; V) z9 E7 J9 f. X2 k
    4. 目标规划的目标函数 ' ^/ J' T* m) k0 {

    ; r0 @- U; |- h# K) r' E0 y3 L( P5 e: p. b3 [' Q

    . n- F8 p" I/ m' R2 Q: _- ?对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。
    ( i3 c, _! L' R& ~% P9 o. o, P9 J# I7 O) }0 O$ m6 T
    例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  , C. u; u+ b4 @" E* N' [

    2 L; K* p5 t$ C
    0 n! O1 S- |! I5 Q0 e
    / b$ ~, ^9 J* Q6 v1 Z- A5.目标规划的一般数学模型( Q9 v$ d( @; p( c
    7 ^2 {+ Z! W1 d* Q, B* A4 m

    / g# Z$ A2 S: f  G
    - N) [+ f3 E! {7 B% Y9 v, h
    ' I) [0 y# r9 T$ x/ Z+ T建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
    2 a& |9 b9 E. S! y) T% R( _% ]( i9 H; N+ T- L8 f0 ~: z
    3  求解目标规划的序贯式算法& C9 l4 U3 o  q+ Q9 \
    序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
    * r5 v$ m' S. J; r0 m+ ?' X5 h2 [6 ]2 j( X8 V

    # A3 C3 X1 B7 F8 c* p: L) B
    ) A/ i9 D: x* ~+ M% I& a7 C' x3 v2 _( x* w7 g% u" h. b
    . s, m! ?+ F9 z+ n
    注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
    ' c' F$ ~  a0 X, b1 H, |  J) f! d6 @
    例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:9 m% p' W9 d% n5 L3 {7 d  @9 ?" k

    ; Y+ I+ c+ x, X4 H+ o4 [* Q& I. ?4 y* o4 u

    % A2 j. X  a: u- J( O(1)力求使利润指标不低于 1500 元;# @2 J/ m4 j$ E- \/ S. |
    $ W- H( [0 K9 @( f. S
    (2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;' n  L4 G% r6 T- V) k! `
    9 M& @7 |8 x- _) d
    (3)设备 A为贵重设备,严格禁止超时使用;
    5 }  W2 F- N" S
    / u4 k% \: J$ H, r(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
    ; c6 X! F, F# ~" X/ k
    8 J7 {3 D) a7 Z% C1 [1 @! ?; z2 M7 W建立相应的目标规划模型并求解。4 B+ X$ |' A8 _9 F$ ^6 ~

    1 Y7 D6 k" }. R1 h2 v解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。 & g7 u2 [' H! x, J
    9 K) C6 ?4 u1 E! l8 |
    $ ]5 g/ O- F; F0 ^+ d& U2 e

    3 z7 M2 j9 Y' h( C序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: # F, u& i8 T( I  j) v4 C
    % y' Y3 m2 V; M
    model:
    " r  n+ X3 B+ T& z; m3 a/ msets:
    " F3 I: G! w( A* `8 _/ X+ vvariable/1..2/:x; ; e  w; U' K+ h3 T: s
    S_Con_Num/1..4/:g,dplus,dminus; . z# g1 Y, ]- ^- V! h- X2 B$ n" y# G
    S_con(S_Con_Num,Variable):c;
      \6 U. b. i% S5 `: A& U4 t  Dendsets
    / s/ y( A2 I+ o+ E7 \data:
    ) B$ x' q. \3 U1 w) ng=1500 0 16 15; 7 O1 J% }+ U3 M5 t
    c=200 300 2 -1 4 0 0 5; 5 J+ a$ \' P) d4 {& r
    enddata ; K& U0 K8 D9 I# C- e2 c
    min=dminus(1);
    3 h( a$ W; P- A. y4 c& @; O% K) H  i) l8 r2*x(1)+2*x(2)<12;
    % a2 l6 p" Q) ^@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); ! D% ]: r- _4 z: P+ T
    end7 i: \1 Q* P7 j
    ! y4 x& \  q$ K( [& C+ w* C. k0 D

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

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

    model: 0 E4 u  Q# t+ N) {
    sets:
    5 }' ~0 c" W' {; M) v! \variable/1..2/:x; & B$ s* K: R8 ]5 H) o% S! ]
    S_Con_Num/1..4/:g,dplus,dminus;
    2 i1 Y" e9 Q; [5 Y% i- @0 L3 QS_con(S_Con_Num,Variable):c; ' D, E' F) t+ H
    endsets
    " n1 w6 R# a3 J- ]. Odata:
    * f5 ]! ~" y3 Og=1500 0 16 15; ! ~- H6 L) E: E+ ~" t3 \% \5 [$ J  ]
    c=200 300 2 -1 4 0 0 5; 9 u! B  x8 n5 e- {, M+ N
    enddata
    $ n( n1 C9 W) p/ \5 [min=dplus(2)+dminus(2);    !二级目标函数;
    / {4 {4 v/ P# r1 k0 U9 F3 e2*x(1)+2*x(2)<12; ' J1 D+ g2 D7 N
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    $ Q3 K6 c  L  A% V. ^dminus(1)=0;!一级目标约束;
    , O  P! a" f; ]" c; c4 R. K% ^4 `@for(variablegin(x)); 4 D) e  l/ R3 F( i4 s* Z9 ~
    end
    2 Y2 l" t. h  }: B5 H  j* z4 z
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下: - \4 i8 Y# }. K, B/ M8 ~
    5 i1 ?' m. C. v, f+ ?
    model:
    ) Q) @" c0 a( D  z( ~7 i5 k9 ^sets:
    5 V# p' `7 \8 qvariable/1..2/:x; " ^$ x2 C" ^( N/ _6 C5 t
    S_Con_Num/1..4/:g,dplus,dminus;
    7 f6 {( i7 k; b; SS_con(S_Con_Num,Variable):c;
    4 N' p3 s) L, n& a9 g3 m& zendsets , g0 g5 v- a3 G% Z  P- }$ D& v+ l1 W
    data: $ g( T9 D  n4 b  t
    g=1500 0 16 15;
    1 z4 E2 J+ B" H! |3 E4 g- zc=200 300 2 -1 4 0 0 5; 1 z6 f' y2 f2 m. U2 W
    enddata
    : y9 Z/ T3 Q+ q# h  r, V& Smin=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; 5 z2 @* K) i3 |* G
    2*x(1)+2*x(2)<12;
    / t! ~! g% E" h1 ^3 k+ T  U5 G @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); ! Q, O0 G6 q, i' A& C5 T( T
    dminus(1)=0;!一级目标约束; % Q6 _/ S$ k, {3 [
    dplus(2)+dminus(2)=0;!二级目标约束;
    9 E6 A: b8 Z. _* @0 F/ Iend& t; u( y( t7 A3 t

    " g/ `! A9 S) j( f% o0 @) h目标函数的最优值为29,即第三级偏差为29。 3 a9 |! S+ M. _- s" M; _

    6 Y7 j" r; y0 ?" ~+ D分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。  `4 D3 f+ T) i" H  G5 b

    0 ]# l! B; n$ u: B2 P) _上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。! H0 i5 }$ O: Z1 T2 I8 ?( }
    9 A5 w1 K9 i* I  `  f
    例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。1 h5 D8 Y6 |: b' N5 w
    . c" \' g4 M& p0 ~4 Y: [4 b
    model:
    ) g  P7 t! _! L% `sets: * K0 W# e  ^7 z! ~+ h
    level/1..3/:p,z,goal;
    / C! a8 {4 z1 {% jvariable/1..2/:x; 5 `# o* H- i6 C% o
    h_con_num/1..1/:b;
    3 g& O( t- q& g# p4 ?( d6 r; ^s_con_num/1..4/:g,dplus,dminus; 0 D9 O8 M) \. ]7 Z
    h_con(h_con_num,variable):a; , I4 ?8 \/ O) d" R) M
    s_con(s_con_num,variable):c;
    1 k1 n* I# a( zobj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
    $ s2 }$ p9 D2 gendsets 0 h, [- H# |' u$ a0 M& J0 C- D
    data:
    ( N# `* ^: q, S9 M& uctr=?; 4 i! Y! s4 m8 _; J& u& f
    goal=? ? 0; $ I# G, f) d0 }
    b=12;
    " S/ N& B: w; Q' fg=1500 0 16 15; $ j+ m' V. m. \
    a=2 2;
    + |: i3 o  n; C$ ~c=200 300 2 -1 4 0 0 5; % Z4 H0 s" `3 o1 p% e- t/ G1 q
    wplus=0 1 3 1;
    ! ^7 z$ q9 e  e  rwminus=1 1 3 0;
    / C( U  ^4 u7 ~1 P& c( Senddata 4 ^5 ~7 _; s* P' m/ m4 ^
    min=@sum(level:p*z);
    ) |- G8 x# }9 x3 Qp(ctr)=1; / @: X6 y% G3 c- |8 W. W; \5 c
    @for(level(i)|i#ne#ctr:p(i)=0); 4 W& T- D! i8 s8 p! w! Y; L2 [- m$ o
    @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 a$ ]1 p+ J$ J  K% l
    end
    + C3 s8 y0 p/ s1 x. d9 _
    7 Q# _# d) ]; m) ~3 a
    ( j; b1 w9 Y0 n3 T4 A( S
    # D4 X% `) D, B/ a2 _- L
    ( i, O* i* K2 y. ~- S: O  C: _+ c/ F/ c
    4  多标规划的 Matlab 解法

    多目标规划可以归结为


    3 n+ x5 G' e, b7 T: S9 p. t  L' ]# U" m

    1 J5 b% D- `( ]! D- E6 u[x,fval]= fgoalattain('fun',x0,goal,weight)           
    ! [  g: k, p  E& }6 q[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           + x5 n" e& y: q
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           % f3 r" b* ~( O. }  f& b: h6 E
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
    9 k: p" [% b6 K1 b& {9 r; a
    3 y! l1 t" u! Z4 l- l- X, A2 _  ?" o% w- N4 u
    要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。; T2 h8 y6 ^$ d& Z8 a
    例 5  求解多目标线性规划问题
    : u: s9 @% g/ w. `& r
    % ~$ _) p" ~& ?0 q' m: [4 Z/ ?# B, I

    6 {" M/ L5 u& z) c6 J) b( |8 z解  (i)编写 M 函数 Fun.m:
    7 B! Z. u) N, i2 G4 y2 H( p: R. ^+ B
    function F=Fun(x);
    ) ^& I. x7 W$ d5 {* i5 M+ k2 O, |3 A5 G/ S! K
    F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4); 3 d& l" A9 i+ l' R
    ) s8 l8 x* @0 P) r$ P
    F(2)=3*x(2)+2*x(4); # B' ?' X. {9 \: y% r( V
    5 ~% u- G7 I5 C! ?/ a% b% u
    (ii)编写 M 文件
    4 w$ b* v& m/ c) _4 z& C+ f
    " [$ F4 @6 }# B& o3 ra=[-1 -1  0  0    0 T! T( @7 c& I9 }( ]. `
       0  0  -1 -1    ) p6 C' e' y5 p# P
       3  0   2  0    + Q' }2 h7 n$ Q  S1 ?
       0  3   0  2];
    ( G7 \" O8 C  k# c/ }b=[-30 -30 120 48]';
    . j; o6 y; S' G# Rc1=[-100 -90 -80 -70]; - v1 w' f: I' m/ v0 W! D8 c! K
    c2=[0 3 0 2]; # b9 L0 p4 y0 D* n
    [x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
    , [  a5 `- h7 K5 s[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值
    4 Q& `# V* g' `: h" D  Bg3=[g1;g2]  %目标goal的值 ; O5 I- \) a% }6 Q% ]+ c
    [x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) ( r+ z) }4 }; d1 o  U" y# s+ L7 S3 O
    %这里权重weight=目标goal的绝对值 8 J/ @. {$ l, l2 K6 h# U2 A

    ' a) d. }' ~6 n1 q5 i( d( c, m) n7 e/ w. C. }

    就可求得问题的解。

    习题$ w$ d/ i; {& S
    7 V: B  e' u0 r3 m. }: c# `+ R3 ]3 ?
    1 e7 J. f1 L4 U, m# [6 r; B' R: f4 x
    ————————————————$ [4 s! `, `7 G7 D8 X
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    : |% P$ {8 s# f5 u( i, o- o, |原文链接:https://blog.csdn.net/qq_29831163/article/details/894889329 X3 S; V, T6 N$ S3 Y

    # e( o% {2 z) _$ M- C2 R; X
    2 y; _, S4 P: A, J0 x5 ?0 q. x  e% 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-6-11 02:12 , Processed in 0.415214 second(s), 51 queries .

    回顶部