QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2349|回复: 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.线性规划的局限性+ j8 s: {8 T( s) z4 ?
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
    8 \2 Z1 U1 T$ y8 H4 T# U. \6 E$ \$ ^! d6 u) V1 `
    2.实际决策中,衡量方案优劣考虑多个目标
    ) l3 d6 C7 r3 v  }5 \- N# J+ B这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。4 a. s2 q$ e: i- m. L5 B

    7 H" O' G1 Z; T  y3.目标规划(Goal Programming)
    + W5 X( x' Z: g! T6 ~美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。* K7 K  w. \  T+ @
    " l4 D) s+ y; ]+ }
    4.求解思路
    + s2 P  @) R' J1 |, n: P1 |9 H(1)加权系数法
    " t/ v7 `. F1 w$ T为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。2 X  U! c' v  t+ w9 k0 Y
    & I& S, I) I: l6 b
    (2)优先等级法
    0 Y( H7 q' M2 I) a2 I将各目标按其重要程度不同的优先等级,转化为单目标模型。
    9 J) I% k. G" ~; r( O5 c) j0 v' S- K9 ^% V, O
    (3)有效解法. X8 _! Y1 V8 j3 j. X2 V5 @
    寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。
    6 m5 I/ g  F) V, Q/ k/ p1 K" U; Z# V9 ^& t( i% @7 z, x; k) z4 e
    2  目标规划的数学模型, X/ i# [% Y3 d! ~/ L) t, p1 W
    为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。
    & A2 K. m0 z, E
    ; }* Z* r: u  Z/ S) e# d2 w. g例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
    9 d- ]* }$ F) A8 p% o4 s8 h6 q9 ~6 W8 [! U1 m* s$ @( s
    0 I, ^9 y& j+ _. E  g0 w% W

    7 F+ {2 j; T( {6 b6 }解  这是一个单目标的规划问题,用线性规划模型表述为:
    2 b; [+ U" K( D3 z+ G1 ^  O& Z$ P) B* K8 t# \  y8 _

    7 b; y/ h1 p  p3 R/ I  }8 r8 ?' R" Z, {/ |
    但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如$ L; G# F3 \2 n7 c- b& s

    0 l! B' P: u$ `- w- p(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。4 d0 I! a* G, z4 p$ D! n% }4 b$ {
    ! C# R. ^4 [; A- ]$ p
    (ii)超过计划供应的原材料,需要高价采购,这就使成本增加。
    4 a, u: j9 i6 m1 W. s$ l7 {* k! a( X0 f' Z
    (iii)应尽可能充分利用设备,但不希望加班。
    - O: e: Q6 |" G$ ^7 r! i1 L. @; Z7 `0 @( l; a& F: z7 _( D
    (iv)应尽可能达到并超过计划利润指标 56 元。
    5 H0 p0 `1 Z6 n% I
    7 \! ^+ T) P. S& u- c- b这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
    5 ?' o$ g  Z: K9 U) [1 f% F2 v7 j! C& a. y$ o. n3 ^0 I: V" }
    1. 正、负偏差变量
    , f# g) |% V4 e# {9 n$ F+ w  t3 R2 {) x% j9 B; e

    ( H) ]+ j3 I, G
    ) R- F( t5 N" p2 n2. 绝对(刚性)约束和目标约束
    2 o) u0 H3 u+ O# }5 G/ e' ?7 `
    5 s! S9 v  }* d0 {/ U9 T0 s$ J9 x, o7 v$ @) j( C9 ]# q

    4 ^" p/ k* _' {  W  w. t+ I3. 优先因子(优先等级)与权系数
    0 {+ Q* Q' p6 Y# X
    . Z  {8 h1 S8 p% Z) v+ f5 B6 x: p2 ?  b
    0 F$ ^3 }+ H; ?  U2 o3 U; B# Z9 `
    1 p/ j+ d  A% n" V8 m
    4. 目标规划的目标函数
    + W" Z4 a1 X) e2 J. b
    # V+ ?- D: U5 I: y  n1 X& t- o
    , C+ v, H) O1 w; \- Y4 k; n4 u( N2 z7 r, q* r- N6 N1 O; R
    对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。
    1 |4 n( `% u$ E) {0 |  ^0 j# i8 C, m1 Q- \. F: t/ k
    例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  * `  S# A) o! M# B; y- W# U) t5 p

    " d  o4 f" t; o8 ]5 |( f) g6 w( I0 i9 Y( C6 }
    4 S7 D+ p9 ]) f  j2 K
    5.目标规划的一般数学模型  p; t1 p) z: ?- g$ n

    3 _% O4 L+ k' n9 J8 c  C7 d: K$ u. w2 P, `7 t

    ' Y" C& U: w7 U' s) d
    6 w& r& X. {& d8 Y5 S建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
    / ]6 P. \/ V  e; K' J' A( E. w: x% I, v. p0 N( U2 \- m
    3  求解目标规划的序贯式算法) Z, j2 y" ]  [; s& }1 `
    序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
    4 C% e; i$ \  w4 C. T" L6 U; v/ m6 ?

      [  C7 h. V8 v0 C
    ' t( ?5 X4 o7 \$ Y9 f( k4 D4 v4 W- K1 Q

    ! y( a! B- `2 C) C9 u8 v! U注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
    4 e! M) G. z  o1 v6 q
    ) e6 J9 m( l% D, X4 J. d& _2 z例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:
    4 Z  M1 S: r+ t! q1 F0 e; e" t
    0 G% o  H8 q+ e" |
    1 v! I) P; h( f. a2 t
    & p: L" M8 B% L  e(1)力求使利润指标不低于 1500 元;) m3 \8 a4 S7 V

    & j  |$ _2 h2 y, d9 U9 y(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;  x, c+ T; X* Y6 P: ]( G

    $ q$ D& b% s9 t8 K(3)设备 A为贵重设备,严格禁止超时使用;
    5 Q0 _  q4 W3 R0 q5 S
    0 n0 h" [* p# }: B. T- x(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
    , z+ f& E) b( }& g
    ' m' M0 N8 e' z. Q  K9 y8 D建立相应的目标规划模型并求解。6 @8 K/ v, D- E8 D+ ^

    / F* U8 N% Q, d3 ?解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。
    1 i# f0 c! E* T+ N2 u* J+ A" @+ b9 V( ^* I  U9 Q
    7 `' S' F8 e5 p' ^; E/ C9 S6 J# K
    8 W; i" n% w1 F' a9 {0 L
    序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: * i$ k1 a9 f3 n  }5 C
    ' r# r  L2 ~; |  [
    model: 4 q: T$ F$ w" l4 J1 P1 V0 W- C
    sets:
      }4 i6 h& L+ I5 I9 vvariable/1..2/:x;
    / X/ f5 g1 I, W+ M; ]1 j7 ^S_Con_Num/1..4/:g,dplus,dminus; : X& I% `: E; ], b2 F# w
    S_con(S_Con_Num,Variable):c;
    ' }" @6 c: S! A/ B9 Cendsets - W+ m. t- H( n1 u: h- M
    data: # f. Q- m/ @5 P% f
    g=1500 0 16 15; + s' r# b$ @4 e7 P- `% Z
    c=200 300 2 -1 4 0 0 5; " o8 S1 ~. ]% G- ~, [+ f
    enddata
    0 s+ a3 X  q3 nmin=dminus(1);
    $ d$ q3 P8 v" b0 G4 D& u3 B/ D2*x(1)+2*x(2)<12; & m5 w* U1 Z; U8 V  I1 l
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); & E; R, V: [  d# ]0 m
    end
    4 L- c1 A# S1 i
    % `* C9 Q0 z' R* p9 K

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

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

    model:
    ; b0 s$ n5 A  ^sets: * h- v7 I% j1 }( ?2 P3 ]( \- d
    variable/1..2/:x; / |, Z6 p% R- v0 R0 q0 M
    S_Con_Num/1..4/:g,dplus,dminus; 4 Y0 x# y3 _2 g( F( J7 C! }8 ?
    S_con(S_Con_Num,Variable):c;
    6 q' \8 [7 V8 m3 Gendsets 4 N: Q+ j! i& I) {
    data:
    . t! M2 ~) [. ?g=1500 0 16 15; + z; {* f  A- m0 k9 j
    c=200 300 2 -1 4 0 0 5;
    7 J3 q+ R/ o5 {! K( N8 xenddata / B# i- O- v2 A; E
    min=dplus(2)+dminus(2);    !二级目标函数;
    # k' S9 |. K* n& x- i6 Q1 F2*x(1)+2*x(2)<12;
    3 G4 s7 G- Y' ]1 A" x' T' [, b@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    ! ^0 K" {" ?/ \. wdminus(1)=0;!一级目标约束; + B* v: _" }$ w3 Y) |
    @for(variablegin(x)); ! a* ?0 ^- \1 K9 ]  A
    end 5 _/ h( b! k' J" O4 `* k
    0 j' l2 v# [% y
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下: ; g7 D2 M1 E2 b

    7 V! H# X4 u  f) M. l- r. K$ ]& vmodel: , u5 e8 E, @+ t: a- o' F
    sets:
    ! I( ?5 O! z- y2 F3 rvariable/1..2/:x;
    7 k1 G! Y2 `' u$ D& {7 k; \3 A; MS_Con_Num/1..4/:g,dplus,dminus;
    " n3 c3 b, n! i) R% f: oS_con(S_Con_Num,Variable):c; 8 L7 N- L3 C1 d# {
    endsets
    # E0 s- C' q* J3 Zdata:
    - x$ U  @/ n) fg=1500 0 16 15; 1 O. R" y" ~  J, G' m' A1 y' [
    c=200 300 2 -1 4 0 0 5; 2 |' o6 l- L9 ]" J5 l
    enddata
    $ W% J3 U5 _: j0 zmin=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数;
    . y& j$ J- q, ]! v" S% l: o2*x(1)+2*x(2)<12;( r4 _! P+ w$ i
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); 6 ^+ F. Q) E  ]+ ?5 x) W8 r
    dminus(1)=0;!一级目标约束; ; b( O$ I$ A8 j
    dplus(2)+dminus(2)=0;!二级目标约束; / n3 I* _  \3 T5 [
    end# r, I$ X- i3 C- C- e) F
    % r0 M7 ~, r! }" o# G" z3 \* m" t
    目标函数的最优值为29,即第三级偏差为29。
    ; P" e  `& a2 c+ Q" F$ M& b+ y# N2 Y6 u& f$ _
    分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。% m, ?2 n' z8 F% _2 N( k1 `

    3 \1 f. i9 }4 S9 t, \( g7 Y9 ~上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
    1 m" N6 w( X) C# j
    7 f$ V7 U2 q9 ^例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。! d7 l& L+ Y- u3 j% Q  h7 R

    + n# x. U+ X: D5 y8 j9 o+ Hmodel: - E4 M! W9 T' K6 Y
    sets:
      A0 _! ^+ [. y& f" x7 U; Jlevel/1..3/:p,z,goal; # E+ }8 Y7 b6 a* W+ Y$ R
    variable/1..2/:x;
    1 X0 N$ e( R- }$ }6 j  I. oh_con_num/1..1/:b;
    9 O3 f! x! @: N1 D8 ks_con_num/1..4/:g,dplus,dminus;
    7 Y3 D% L) b+ s  U& L+ f$ Yh_con(h_con_num,variable):a;
    3 R: x# k- W, D9 t" E. y% js_con(s_con_num,variable):c; 9 j8 C. N- b0 h6 \9 K
    obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus; / x/ d3 k  I0 j0 H" Z( j
    endsets , C4 N; K; x7 g( U2 a+ T
    data:
    $ R) t0 \& X) J" }& ]3 qctr=?;
    / R: r1 c( l" q; ]1 Vgoal=? ? 0;
    , z5 N9 J+ ^! N1 cb=12; . x5 s1 h4 d) {- r
    g=1500 0 16 15;
    5 ], W7 ]1 w- \( {5 aa=2 2; 7 ^1 D* u3 ]3 ~9 D" v
    c=200 300 2 -1 4 0 0 5;
    # S" C# i1 n8 F/ O) gwplus=0 1 3 1; 0 q, e5 c4 }! L/ J
    wminus=1 1 3 0;
    ( t2 N+ ?* K' P1 lenddata
    5 g( U; t, B' n! Nmin=@sum(level:p*z); : T0 ?; k6 L- U; w% E
    p(ctr)=1; ! s, p3 w2 h$ U9 R  `4 {
    @for(level(i)|i#ne#ctr:p(i)=0); ( \8 I9 R. N3 _/ l- U; i+ A
    @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))); % S# ^2 d  J7 M+ Z* _* D
    end * V+ _  u( o/ U$ v# S" w
    ) N8 ?+ O2 v3 l7 ~
    ! D7 y% ]( y. o' m9 Y

    7 |; O; H% e* r% I: w
    : Z6 H+ Q% V: Q0 Z* Z+ o* Z- h% |- @* T6 m
    4  多标规划的 Matlab 解法

    多目标规划可以归结为

    ; p4 ]3 O: F8 v- v2 ]7 Z4 H

    9 Q5 n& K' G+ ~8 H* S8 s" t3 }. {7 y! Q
    / T1 J+ }. \9 J( d/ N; p0 m( o9 Z  C[x,fval]= fgoalattain('fun',x0,goal,weight)           
    . Z4 o8 f+ [' b* y2 ][x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           
    & ]; y1 B: `2 Z1 `/ B[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    : r$ Y& w' `( n( ?& B3 R[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
    " l! O- b6 {' K3 W4 {* ^* [
    3 h: `: Q' y% w% E, a! `; z& ?1 j: W3 m( p
    要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
    . ^/ L* m# b5 @# }( v1 D! i$ { 例 5  求解多目标线性规划问题
    / {5 \+ G5 W* T) w  n5 H
    7 J8 u, C7 U4 B
    . P  t0 i2 O3 B+ l* x- S
    + l% p" l  x/ ^; s3 T解  (i)编写 M 函数 Fun.m:
    $ Y' y* O+ ^, C$ x/ q5 k; L% X" i- Z* @6 C8 F
    function F=Fun(x); + y6 z5 ?+ F! {& [" r& k

    # [+ h0 a$ ^" e, Y$ j& PF(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
    * f/ r5 N( k" y
    + ]5 e- z6 J. F2 b, r  zF(2)=3*x(2)+2*x(4); ; H' E* M2 C' |1 n  s
    6 P' |  S3 d6 X0 `- M
    (ii)编写 M 文件 : [$ {( s3 U1 C9 p# E! t

    ) u* p3 |. l: x8 e# p, Z4 {; wa=[-1 -1  0  0   
    + D3 d+ X2 d5 B, }( g1 S7 C9 |   0  0  -1 -1    7 S# {" `$ u. u
       3  0   2  0    ) i# A1 }5 j7 ~1 M. |2 e
       0  3   0  2];
    1 Q& ~; q5 {+ kb=[-30 -30 120 48]'; / p/ [% a" {+ Q: R" q0 M
    c1=[-100 -90 -80 -70];
    6 ^( y% ]# t" R7 rc2=[0 3 0 2];
    # f$ Z2 L. k+ P- S2 P2 P! r[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
    + d% k3 _6 C% e) r3 B; I% P0 q4 c[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值
    ( c- {# d, `3 `; [2 Ng3=[g1;g2]  %目标goal的值
    6 Y9 U! C+ y: K( G5 K" F- `% U+ F[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1))
    $ W9 x; L5 ]! N2 X# d  k%这里权重weight=目标goal的绝对值   U% U! T; K$ I( W( u: I

    * Z9 Y3 L: k6 z2 W

    就可求得问题的解。

    习题9 Q( R7 k: ~' X( d: O- G4 S0 [

    : A, |4 S$ f- `. L5 j4 i4 w& `8 H- U) D+ P/ A" A/ f/ z
    ————————————————3 ?' n  @/ D' c5 @) R2 x
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    9 O- H' q* V# {, R- l, K: Q$ H, y原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932( \$ M# o/ _0 Z8 c; I" d, c
      J, w7 s- A& ]" j3 u' Y

    ' F- r# C- ~& C* h! ?4 E, L$ J5 E
    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-18 13:09 , Processed in 0.422653 second(s), 50 queries .

    回顶部