QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2343|回复: 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.线性规划的局限性
    ( B" [9 E- N# h3 J" k; q只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
    7 m2 q& ?- o! Z8 Z) M  I2 y
    1 \/ L4 `) x- U5 s 2.实际决策中,衡量方案优劣考虑多个目标
    # G2 V# h& h. l' ?这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
    2 m2 s8 D: W. s# d" @- @1 E2 @* n: {( F
    3.目标规划(Goal Programming)( J# ^8 x- ^/ t# `8 @' @
    美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
    - m+ r; y5 {9 I/ _6 c8 a; q, C7 H6 A7 I! U: V
    4.求解思路5 h" t9 A6 e+ h4 Q: N, ]  R
    (1)加权系数法- t8 e( s6 i/ R$ j0 |
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。! _5 ^4 E3 U0 w' g8 D
    : h) G! D" k8 f1 a% D0 P
    (2)优先等级法
    % h$ M4 T7 C( N3 x将各目标按其重要程度不同的优先等级,转化为单目标模型。
    % y6 ^. J# U7 f0 c1 e1 K- y: s' x" N3 Q0 J9 I0 d( D
    (3)有效解法
    4 q$ X- \7 s% r' Y8 Q! b寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。
    2 Q# C& C9 m3 M! t% o1 ^- w8 S( S% \; T, x9 [/ Q
    2  目标规划的数学模型% O, N0 U- }' J
    为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。- u! Z/ A/ L/ F0 t; I

    8 l; B( [. v; H* h1 h例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
    ! [, `# M0 I8 z- [
    : w" N4 s$ v2 H& i& }% {# Y
    % @5 L+ L- |1 n  ?: [7 W2 s% ]/ C9 [. j+ |: u& J3 J5 P" B9 }
    解  这是一个单目标的规划问题,用线性规划模型表述为:
    8 s( L5 t$ [- _9 x
    * G( Z7 O: {4 \1 |
    # j) P& f- A! y, n
    : }0 `$ Y! M2 G/ O$ e+ L: N但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
    / g7 F) a% Q! U! f3 R3 j  @
    . L) C% h/ l8 }) o7 w' ~% l, O  B(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。. p1 q' T! _! U( y! B9 d9 Z3 i

    . g1 Z' |" d# D# @- q(ii)超过计划供应的原材料,需要高价采购,这就使成本增加。
    ) s' _* E8 E/ {
    " H% b) @- q6 ~+ t$ {* v) a" E9 y% O(iii)应尽可能充分利用设备,但不希望加班。 # k  f9 g1 m" D/ Q. |

    7 N2 X. D" N; [+ n* q& |% v6 g0 _(iv)应尽可能达到并超过计划利润指标 56 元。
    * s! ?! B& G. x( R4 @# J1 i+ E' Q* J8 W8 o! g6 N1 m
    这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
    * p' I3 ^( M  m9 h0 J
    " n5 K" M# x! E2 m) t1. 正、负偏差变量
    & Z* u, \2 f" Z: ~- b& u9 [# f
    ) @% c7 ]4 o. ~2 f
    " p/ k$ ^4 ]& j8 q: H3 Q
    1 d( D& B; I# Y7 x& p2. 绝对(刚性)约束和目标约束 - n; Z# M8 G1 m  B
    ; ]! N' j& K" N! m
    " @; W. ]( M: t0 _% t: B. `/ G

    : d- U; q% `+ K* i) x  U: ?. }3. 优先因子(优先等级)与权系数
    : q* m3 I3 W0 i' S" t; {; N+ o
      d# B  x$ C. j! }5 I: N% @4 j4 j" k
    & L7 q3 N; u& G7 D' R7 @0 K# }$ v8 K" |0 a8 W  i/ U  r
    ! W8 i  g2 m* Y4 S8 \
    4. 目标规划的目标函数 # U4 B+ d  L6 p4 v
    / @/ `3 N) o" H  P7 S

    5 W3 v5 [# e" S9 I9 L: l& o" t8 I, f% p1 T
    对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。
    3 j/ }# l# V& a  s* [/ t2 l
    2 c4 |7 {# y# G, d* m9 Y! e例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  ; i) Q& h6 G4 R% R, o( Z0 J- X
    % Y. b% i7 k  o" c% _" X7 G* z
    ; U) t) X0 T" z7 l2 z0 h/ |7 a

    ; X5 W8 a% r" f4 r5.目标规划的一般数学模型% o& B. L5 V9 {

    ' A. e! ~& u$ y, e7 o& O3 K
    4 r; I" l2 F; |- n
    # q7 a- O9 V& n% H4 f+ Z: t% c: e. ~* E3 ]
    建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
    4 F, P$ F5 p. v; F- K' U' f7 w- E$ q' k4 i5 Y
    3  求解目标规划的序贯式算法
    5 ]: U' I- x# S+ A& q, b: c7 w序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
    : h: I7 ^4 ?$ x# P9 L- @3 I; b: p: @7 u

    / l8 j% c+ ~, |! H6 P, g( n# n4 L2 B% @
    0 e# {, o! q0 s0 T3 T0 p
    ' B5 j+ y# c4 k2 D
    注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
    9 H# \" }$ ~" `( r5 |
    % h0 X3 t) c% e5 b  R6 @例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:6 F: e/ b+ L3 T! l+ e

    ( c4 Q3 r2 v8 e% v! Y" [, [- s' o2 _6 V% e, y" q% M6 B
    " W! `1 J' }9 k" y; ?5 a
    (1)力求使利润指标不低于 1500 元;
    ( p. u, B9 q: @, n+ r5 ^
      K; h; a( w, M% Y(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;1 s$ G$ q1 Z7 o( d9 \) g9 D  l
    " m" Q$ P( f: h# X
    (3)设备 A为贵重设备,严格禁止超时使用;9 l0 g1 V# B+ i; o; i0 j
    + I6 C5 B6 R$ \$ Y' s3 Y# E- G2 O
    (4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
    - y# }8 I7 @' P7 T2 V& a; I
    5 l; E# A& Q) x& _2 P$ G建立相应的目标规划模型并求解。
    ' L6 x+ T# \: _' W( u2 j. f+ {! ]* r; j2 I8 }
    解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。 5 Z7 H7 G8 n% i5 b" [
    ' B! S5 x# |3 |$ r& ^$ h

    / c7 [$ f$ l0 E
    8 f* ~3 J! s1 a序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下:
    ' E$ T2 N1 J+ b5 v- k' Z% m$ f) @& h" t; x% V3 t) C' Y; T
    model: 5 }7 N4 G; [6 g% z
    sets:
    4 r# z' G# N6 r& t& [variable/1..2/:x; / d% L& T7 s$ B
    S_Con_Num/1..4/:g,dplus,dminus; ) U- d9 {* K+ m% L$ I3 W- H
    S_con(S_Con_Num,Variable):c; " D! b2 L' R6 v$ K+ s
    endsets
    3 k* I% X! o& edata: ' g% |- @; w* h' w# T
    g=1500 0 16 15; 1 R7 J1 c. F6 |# p0 x
    c=200 300 2 -1 4 0 0 5;
    / c5 s& O+ d4 nenddata
    # R! L4 }* w; ~: l8 Xmin=dminus(1);
    ' t5 F! b5 o5 Q( R2 B; W+ C2*x(1)+2*x(2)<12; 7 J, }3 I. ?# B
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    . |) y* W9 _' E: G) ^' T, N- yend! o. C; r* _# ^" U
    : L  U0 I1 c# m5 d3 P! L

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

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

    model:
    5 T$ j3 I& S4 L% v/ a8 ~sets: " H8 f4 f" @- F1 D0 p
    variable/1..2/:x;
    , G5 q' _5 i0 U8 f+ @8 jS_Con_Num/1..4/:g,dplus,dminus; ; N4 w7 t6 M2 p! v6 e6 _
    S_con(S_Con_Num,Variable):c; 2 G8 q7 [# M1 J& k
    endsets
    # G( m3 E' D  C  idata:
    , P) n  r% \3 T3 y0 ~8 w2 S6 yg=1500 0 16 15;
    0 c/ O! V3 I7 s" n9 Y- Bc=200 300 2 -1 4 0 0 5;
    7 g3 ?3 Z+ |9 s6 w$ F& l* f. penddata
    ) `" W: k$ Y! o; k8 e$ Y3 nmin=dplus(2)+dminus(2);    !二级目标函数; 8 c' |! T8 C- B5 z7 z, b9 n' N
    2*x(1)+2*x(2)<12;
    1 f/ ?  B# V$ X- N( |3 @$ Q9 R1 s4 {@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    ; _' e( Z& f; r9 tdminus(1)=0;!一级目标约束; 9 ~; w: O# [1 a5 N0 d
    @for(variablegin(x)); 9 j8 Y* c3 o: @0 i9 w
    end & ~0 t; H  V* S8 t2 d
    # M3 o3 R2 o3 ?9 [( w& q6 h
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下: + D$ R+ \9 f3 E- q: C
    ; B" A/ E5 l1 J' z; T
    model: + O8 i  J4 u) [: |! D& Z
    sets:
    ' L* I; e4 ]* x' evariable/1..2/:x; 4 K0 f- \) k/ R; z: x
    S_Con_Num/1..4/:g,dplus,dminus; % e: a# D) @, k# J* y5 B, S
    S_con(S_Con_Num,Variable):c;
    8 N" o  j+ g: t$ p. |1 fendsets $ A& @& ~8 D4 `
    data: 0 c: Z8 f" E9 d1 \4 a% P8 m+ c
    g=1500 0 16 15;
    * @3 S$ q$ H3 _: Rc=200 300 2 -1 4 0 0 5; : q' n, ]# r3 O3 X. n; ^/ n. ?) t
    enddata   }% Y& T) i, e0 H
    min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数;
    + r4 [$ W$ }$ P$ h% O+ e+ t2*x(1)+2*x(2)<12;3 \# d3 Q, z/ W9 D5 b, W" m1 ~& v: M
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); . d* t$ h2 Y/ \
    dminus(1)=0;!一级目标约束;
    5 J& p9 K0 q1 M- w& R3 w0 c/ `# bdplus(2)+dminus(2)=0;!二级目标约束; % g. k2 S" U' U5 ~' v
    end
    1 a$ V9 M9 Y+ F1 ?4 ~( P; s$ l, \9 S+ H/ ]2 o# b$ k* X. g& V
    目标函数的最优值为29,即第三级偏差为29。
    0 t- s1 P5 H$ f+ q, {' H7 O* F8 f2 f. }' U7 M
    分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。$ Z7 ~' A% I5 n: i  e
    . Q' P) c- g3 S! u* g$ z
    上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。( j1 x, C$ l* M4 _3 h1 F2 |
    4 P8 l( F' m( K/ x3 x1 m% R: ]
    例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。8 [3 p" c0 e* z* `
    - p5 b7 B# P4 Y) s# i- e
    model: ; M" X) `+ T5 _( z  |% L
    sets:
    3 ?7 F" y' ]% A- g' j1 K9 u$ blevel/1..3/:p,z,goal;
    ) a. Q* ?. {- D  y* Cvariable/1..2/:x; 7 a  {6 E' N+ V6 U! ^
    h_con_num/1..1/:b;
    ; Q& S( h) B' f/ G6 Ys_con_num/1..4/:g,dplus,dminus;
    0 h( w3 h" C3 r9 R8 @% m5 fh_con(h_con_num,variable):a;
    % L3 l$ \& N! i& U" y, As_con(s_con_num,variable):c; 6 J; N6 r) f) x' Y: _& w9 c
    obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus; + Y  ?, h2 g+ |) v. E& `! G
    endsets , C! b9 ^$ d5 E' q  a) j
    data:
    , K1 V2 {% x) T; k; R/ tctr=?;
    - P. v) M, @9 ~$ o6 z) n' bgoal=? ? 0;
    # q5 y# k/ o% Q; Cb=12;
    4 v$ p- ]' S3 D8 K' x7 Qg=1500 0 16 15;
    . j/ g; j/ I3 T( A) l/ W  Xa=2 2;
    8 R( c  Y  Y' ]c=200 300 2 -1 4 0 0 5; 4 _& h! \. S. L8 R3 k
    wplus=0 1 3 1;
    + k' Q7 k) O$ U) Iwminus=1 1 3 0;
      K4 e) p. s! }' `enddata
    3 H7 `2 y2 L9 e) q( g7 |min=@sum(level:p*z); 2 k9 N& n  r% U: ~( p" v+ {
    p(ctr)=1; : \7 U- M* x9 k1 C/ \
    @for(level(i)|i#ne#ctr:p(i)=0); ) O2 r: p3 S1 d% m. e
    @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))); + i3 j6 O: @) z; Q
    end
    & f" q* h0 i* b0 L) p4 B9 ^$ U6 s' V" K

    6 h, f. y1 a1 u" J
      O3 u# b, T) m! m$ p, L9 j9 ?6 m1 H+ U. T# v( L5 m/ l

    / k' ?; @0 m9 _: D4  多标规划的 Matlab 解法

    多目标规划可以归结为


    ; H2 y- _5 [2 V) D6 p& v4 c0 M. B8 m5 E- t; h# p* ^" b

    6 f5 h& \4 y+ [8 S" {  J2 L[x,fval]= fgoalattain('fun',x0,goal,weight)           
    * a% T# s5 N: ?. U; N3 n[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           6 V$ @$ R4 S! k" t
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    $ ?! x. b) P" y/ r[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
    % S) F0 {9 g) V2 m4 h5 O3 [& b0 a6 Q

    : [# B: G* b6 |9 X. L  I要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
    * h) i3 b7 ]  `+ N) n  d' [# m 例 5  求解多目标线性规划问题
    : n/ }) Y; p8 ]% ?- l# J' K' k7 D# p. X+ J  W' @7 v1 \
    / P' L% K$ y" ]9 }, Y9 s* a' ^7 @  \, p
    % T0 W) I" a$ `! ^" B3 T
    解  (i)编写 M 函数 Fun.m: 7 _4 T, F2 W; ]" s/ W: C
    9 c$ P2 m8 [  @6 [) X
    function F=Fun(x);
    ' ~7 T3 |% t% S+ D$ r/ n+ {( g# c/ `) T
    F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4); 5 ?3 f$ K9 b& B& l. \. i) W! r
    ( ?! P2 D$ u& K5 U( t
    F(2)=3*x(2)+2*x(4);
    3 V, u4 b' b) j5 T8 l4 |
    , G' E0 {1 ]4 W' w7 z$ ~(ii)编写 M 文件 0 h! L  j+ C3 T% u; @5 o

    3 F4 p  w' `5 H( la=[-1 -1  0  0    ' I. [1 L# M: C3 I4 E
       0  0  -1 -1    2 L  t& O7 P4 [* v' {
       3  0   2  0    $ X0 p. s, n: ]  r/ {# e: s* h, t% [
       0  3   0  2];
    ( E8 e& k9 q$ i: J# [; O+ M( A+ `9 zb=[-30 -30 120 48]';
    . e- @8 b! Y6 A) }6 b- Xc1=[-100 -90 -80 -70]; 7 I+ }- D0 K/ v  D; n3 v) E
    c2=[0 3 0 2];
    . f" I: I% U, }" k[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
    3 b6 a  \+ E4 j3 p3 S% y9 {& X[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 / g7 o0 M( b$ J& ~1 Z) x9 T7 ^: s
    g3=[g1;g2]  %目标goal的值
    ) b. a- Y1 ~" E& m. {/ B9 A% |6 y[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1))
    8 i1 a5 R3 i  h. Q' {%这里权重weight=目标goal的绝对值 0 N# K8 {# F5 A! d! s! z

    : H8 j& g9 Q4 ^  M5 C  O( N

    就可求得问题的解。

    习题' w0 a. x1 \: q
    . v4 W0 P2 j: b: I+ w/ ]/ D

    4 h& H1 ^) B) m  ~* e————————————————* M# O6 x$ r  }( a/ J
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。* |3 ~+ I3 S0 X# @" B. o+ C
    原文链接:https://blog.csdn.net/qq_29831163/article/details/894889329 W* x0 i, o* ^7 K
    / ~, o% j/ ^( M9 }8 k  I4 a; ?- o

    * E4 J& A! C1 ~" {) \
    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 10:30 , Processed in 0.432155 second(s), 50 queries .

    回顶部