QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2428|回复: 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.线性规划的局限性4 [' S$ d  R8 d% J+ G" v. z" H
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。) V9 T0 d- p& V2 L; [/ y) x6 F& z4 _

    5 e- `5 q4 C0 A 2.实际决策中,衡量方案优劣考虑多个目标: T# p6 n% C  G% o) ~
    这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
    2 _" x: p: {0 B; h- P8 }7 [! _. q& ~4 S: w$ n
    3.目标规划(Goal Programming)! x# ~- ?4 @2 C; B) }
    美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。6 q( }8 G- p. h' Y; O( L6 j7 x
    3 U1 R( A& @% N
    4.求解思路
    9 o, b* y! }0 U" ?; X5 Z(1)加权系数法7 k1 \" {( n" _% p  f
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。* o- }; x- N& f5 i" Y  x% {& s9 W( \

    0 _% g# n3 ~/ P8 I- C(2)优先等级法- L& _3 {8 y) L. u
    将各目标按其重要程度不同的优先等级,转化为单目标模型。
    2 T/ r5 Z; k& J2 L% L( s6 B; g" J" S* I5 e+ p8 _) j/ m# w
    (3)有效解法
    / Q1 v  X. C. C" o+ C寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。 0 E7 e+ v" e' b- [, b
    6 X5 n* {- x/ N4 V# P. z/ c
    2  目标规划的数学模型
    " y7 |( B' W7 ]) U& G- P为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。
    ! s9 O- N  D7 L: p$ A2 a8 o% Z; h! X: l: O& g$ R4 w6 x5 Z8 V; r
    例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
    3 G& E3 y+ M* G6 n- u" `% e2 z7 ^' _9 B) g" A" }
    - \. e- d3 f& `4 A

    - I2 p/ E$ W5 }. w& d解  这是一个单目标的规划问题,用线性规划模型表述为:
    5 ~, F( D4 W: t- W! h
    1 R$ I* J2 v) n  {' N/ q
    . O/ z9 o- m+ x* n: L3 k
    & k& M3 z  b2 L' E# ]$ F但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
    # C7 h; G: B+ j+ B* N2 H& g& R% j* v! v7 t1 `# R( }
    (i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。: q" E# t* R& q; y" b" E" ?
    3 m  l$ W: v# R) E1 q* e( |3 ?5 E
    (ii)超过计划供应的原材料,需要高价采购,这就使成本增加。# ]% I4 x) Q. H! Y8 b
    & b- F0 D/ `, A2 T* f; J5 e: k
    (iii)应尽可能充分利用设备,但不希望加班。 ' X3 F- S2 N4 r  N  e
    ! R8 W, F  y, v
    (iv)应尽可能达到并超过计划利润指标 56 元。
    % C% n) W6 g3 T4 f- e
    . w2 D. M$ h7 {! P7 c7 k: Y这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
    & {5 F* }0 N4 Z- m
    + \2 p* ?0 B7 T9 o# E1. 正、负偏差变量
    1 N: m) W2 w: }9 k: t5 I: x7 k* L, f+ [3 n5 N. O0 X

    ' i1 t+ V0 l, u" R' [5 e/ F0 f+ y2 n+ @& ?( _2 h; p: `% h3 C
    2. 绝对(刚性)约束和目标约束
    : F# |3 X" U! A( ^% h% q. U7 I8 G
    . N# }0 O+ A' T) W8 S
    ' U1 E. r9 R* q7 C4 n6 S1 \5 n$ K$ W, h$ O' S) ^8 h, p5 [# K
    3. 优先因子(优先等级)与权系数
      a& _1 W& s& o0 `2 S" g3 ~9 _3 F: p, Q% n. ]- l! x$ ?- f3 k. ?1 C
      U# P  C- N0 k9 n. X5 l
    " R6 Q0 l9 w9 K+ h

    0 [7 a3 c" b2 P- P4. 目标规划的目标函数
      u+ i, t. N% u5 d% n- `7 M# f; T: [# M& `5 x% b9 i1 O

    . H8 n2 S( e3 a5 e/ h6 S( \8 x4 s: d" y6 S6 {
    对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。
    8 E7 W5 S6 `, _  }7 Y
    ' }% R4 f& B; T( H例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  $ i3 b' s9 M7 I9 C
    % E- }+ }+ s4 Q; A
    ( g4 y- a4 {: ]. u: C. [6 i

    $ `8 v& P( E7 X1 L1 T5.目标规划的一般数学模型
    6 @0 A% z! Y/ \3 r$ R9 T: f; m5 G" n# o: d! M# \( w

    , B- w- I6 r4 N' i* G$ f
    ( J+ e9 B1 F+ E+ S: v8 ?, ^( |3 r3 A! d
    建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。 5 y2 T* Z: k0 |" j, `
    8 U# H& a, t2 O* `
    3  求解目标规划的序贯式算法. n( t! ]6 d0 |6 u- f3 o
    序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。 * L* ?: e, K$ y5 j# o% J
    % d" f  E' q3 _# p* s/ L2 q
    0 L+ M& K# C, c- h1 g" ?8 d

    & U; ]& i+ O+ d- w5 T5 ?" z2 {) E% d2 ?, G( P4 y* H& M& y7 L+ `

    ) f; G/ r1 A- M0 v; k注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。 / |7 Y* C6 H: U

    ' K9 N" v/ f& n7 L# `例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:- o4 U/ w3 x  n" K5 l

    4 `3 g1 {& Y7 v, P
    ( t6 ^5 W, C9 D0 }$ y8 K4 i  N- C1 f
    (1)力求使利润指标不低于 1500 元;
    ' @& ]$ C7 V# _. E7 f# n6 }1 H3 @0 r. W1 H% g
    (2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;. W( r7 X/ k1 A/ x- B) W) q
    " ]* Q" P3 y; O2 c+ z
    (3)设备 A为贵重设备,严格禁止超时使用;
    $ n; X5 J# o% [% S( b/ t1 u1 D' z2 q9 `' C
    (4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
    : V  t4 d2 n8 i  M' E
    . K2 g% \! s6 x7 p8 _! M建立相应的目标规划模型并求解。
    : ~" E' J/ u" V/ o: f) m
    $ Q! g( j0 Y9 u1 n- ~解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。 * i6 D/ |$ S. G: A, |5 S9 i
    ! \+ z. U5 r! L- ^: n; \
    ' i0 m( n0 M% I" J3 g- [

    ' \' C% E( |; F# x序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: & t3 `) U/ y% d& b/ }% B7 x, b, Y7 Q

    1 m' R0 ?' }0 x' l9 j8 }6 U. u$ c' Amodel: 4 f5 @4 M7 a0 i) m$ k, E$ w
    sets:
    6 m9 i; o- P+ _variable/1..2/:x; # j, U+ C  h" Z, d
    S_Con_Num/1..4/:g,dplus,dminus;
    # j+ P( _( z9 ~8 WS_con(S_Con_Num,Variable):c; 4 i) c" j, W7 u. Y) Q+ A
    endsets * b- g0 W) X& Y0 t& t+ h7 K+ X0 f; R
    data: 2 f0 _1 W0 v- x* @. q
    g=1500 0 16 15;
    / R6 Z; @& m: b9 v$ r6 I; h$ ic=200 300 2 -1 4 0 0 5;
    * [& ^. R' U, Oenddata
    4 s5 L% ~' m4 X4 h, h) o: N2 f7 Q! b% ]min=dminus(1); 5 _8 B+ W/ G( z/ k
    2*x(1)+2*x(2)<12; 9 {& Q% I; O4 ]3 M
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); % }; Y, {. Y$ U0 M( Q$ ]4 x$ Q
    end
    ) D$ h+ i' Z+ d! D- Y( F$ l( j% c9 r& u

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

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

    model: # ^$ Q- G2 N9 b) Y5 i( {
    sets: # f4 O0 S. @9 k- ?; z8 s+ _
    variable/1..2/:x; ) {$ y' b: Q" t5 w3 ?. U' S5 Z
    S_Con_Num/1..4/:g,dplus,dminus; * H% U9 j9 a% h! E
    S_con(S_Con_Num,Variable):c; . H) _9 b+ B8 E1 u
    endsets $ O4 M. i: U! {5 {
    data:
    ' ?5 T- h8 j: s$ f+ d" ]7 yg=1500 0 16 15;
    # C& u7 U. v' N9 C, Dc=200 300 2 -1 4 0 0 5;
    , K8 a. u( n* M" d( t! _6 H" @enddata , k) E2 E& S$ D/ B0 V
    min=dplus(2)+dminus(2);    !二级目标函数;
    - A+ @$ t% l) U' }) s1 T2 C2*x(1)+2*x(2)<12; 1 J# L' x& u; E/ _1 b) d
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    * q8 Z: U. O" _8 g8 b8 J0 E1 _& ^4 sdminus(1)=0;!一级目标约束; / O5 H2 P: D0 N  M9 i
    @for(variablegin(x)); $ [. d' |9 ?3 u/ v
    end 3 P9 X- ?/ l, {7 f$ b4 v$ U6 k# }

    6 i. I# L# M4 O7 t1 d- _9 ]& g求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
    , V$ d) ]+ C; f. `- q' S+ q( Z7 p2 g. [7 t3 b! r
    model: & J4 ~  e& C# \! l) _8 N
    sets: ! {# X0 M/ R! h
    variable/1..2/:x; . Q& v* v+ N& Z
    S_Con_Num/1..4/:g,dplus,dminus;
    ( f. I8 c2 h4 V& v/ g9 r+ X7 K! u9 yS_con(S_Con_Num,Variable):c; + ]& M7 C5 C2 s: e# a- M  p
    endsets ; Z, N7 q# p3 |
    data: ' V  E4 E9 D6 E
    g=1500 0 16 15; 1 K, J: M9 G" h- F5 W" Z
    c=200 300 2 -1 4 0 0 5; + B( `2 S& Y3 R5 ?
    enddata
    " u& ]: `3 W& Q0 E0 ]/ t3 Kmin=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数;
    5 j1 v# x5 r: n2*x(1)+2*x(2)<12;
    ) D6 G) R: a2 a5 X# d# _* a. B @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); 1 e5 C& }1 `/ v, T3 |) V$ u
    dminus(1)=0;!一级目标约束;
    . p8 _' y7 a) X9 @' o$ `dplus(2)+dminus(2)=0;!二级目标约束; 1 c/ h+ `. V1 T" f- p% @
    end
    " E+ Z" M: g+ A* X. S' Q: {. D0 x3 [9 c$ q0 W+ d
    目标函数的最优值为29,即第三级偏差为29。
    , L0 L/ P" f4 J: d7 X
      g  O7 \# _3 S1 O8 ^& [* e% P8 h2 z分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。
    # L7 Z3 _& s9 F, }
    - W% N2 y" ^! `7 j, g  }; H上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。$ L3 b1 j" G; R& A
    8 \( @2 }* h$ j# Z, q, K
    例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。; {' c" p( K0 f6 X0 W

    0 e( e# S% D; K' S2 u; |model:   o5 d; ?2 l0 \$ I
    sets: % a/ e( A$ ]( O- ?' J  K
    level/1..3/:p,z,goal; 3 A% S; i$ p3 r8 s7 z- d7 A
    variable/1..2/:x;
    9 i7 i4 }3 z/ T/ y& x8 Q! eh_con_num/1..1/:b; 1 f2 s. d2 P# F1 E8 M4 U
    s_con_num/1..4/:g,dplus,dminus;
    1 q$ s; K% H" Q* Kh_con(h_con_num,variable):a;
    + ~& [% s# F: T& xs_con(s_con_num,variable):c;
    9 V. x+ S2 ?4 v- C7 x, p& Wobj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus; 6 x" c+ m: y, Z3 x8 j
    endsets
    3 ?) l& [* k& y+ }! vdata:
    2 H3 ?! G+ _$ [8 [2 Nctr=?; 6 u: c( B6 D* I
    goal=? ? 0; ! U4 [# b: b2 v3 X
    b=12;
    - N& {% |# b" o/ cg=1500 0 16 15;
    6 {! p6 ?' ~9 ^$ C3 Q7 Q- D4 \a=2 2;
    3 ?2 U6 w4 D5 ~# D! f2 mc=200 300 2 -1 4 0 0 5;   ^# {% ]8 w; S. N
    wplus=0 1 3 1; 1 {1 V9 D5 `2 L+ l" O
    wminus=1 1 3 0; 1 r" E$ n) k6 n7 Z9 p9 q* Q1 D
    enddata ! w+ G9 X0 d- j8 L, E) e
    min=@sum(level:p*z);
    9 X  W- a: V% ?p(ctr)=1;
    3 B6 m& c0 _" w* m. n8 J@for(level(i)|i#ne#ctr:p(i)=0); % ?; U7 S; b( b% N0 c# K
    @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)));
    : M2 ?- M. i! i. Hend 8 \% F- ~9 S" i3 o, D4 Q& F

    % u" h6 l7 A9 H, r2 {# F6 D+ |
    8 ^0 t# N7 y! U7 Q* C
    6 A6 @4 k7 Z0 b2 }5 Q% T6 j/ \; G0 ~" c+ B/ W* r6 Z

    5 t( N2 v# \1 z* \$ `0 F8 I4  多标规划的 Matlab 解法

    多目标规划可以归结为


    $ W9 ^0 ]4 B9 v) {$ a0 [& e8 T; q* C/ |4 C7 k
    * y9 E7 o. W; O, }" d( L! |* m
    [x,fval]= fgoalattain('fun',x0,goal,weight)           
    ! \! g5 f+ ^8 p4 S* F0 |[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           9 h6 i2 s  u' g9 t3 E
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    ; h  J4 {9 f. Q& I; n* S8 [[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
    : c$ K7 ]1 O  P3 h
    & z; o; w$ g8 a" r0 j! j( V/ n  q2 X# C
    要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
    # N) m9 F* B: Q) x7 M) S) }2 C 例 5  求解多目标线性规划问题 2 k2 F6 Q& O3 I8 ?' L# W/ S3 r
    : o( s2 m% b8 \% `0 ~0 o
    ( W- G1 {9 G9 L+ i

    / W" I% v4 |; q" e/ \+ k6 l8 E解  (i)编写 M 函数 Fun.m: ) D; f0 Z" f) A# t7 j* }- e
    ; v$ D; f$ q. }/ `8 k( @- C" Z( c
    function F=Fun(x); + b. l; |$ S1 x- k& H6 c, ], L
    0 `4 K6 i5 Z. s8 l. Z* P
    F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
    ( Z, p  T' W# {: F+ ~$ Q8 }! |) K6 |' Y- F4 K4 v' o
    F(2)=3*x(2)+2*x(4);
    ! _4 q: b" `0 Q$ {: U; l- Q
    3 ]0 v; I' m% b3 m  P! F  l(ii)编写 M 文件 ; [6 u" z7 }5 C% K! L
    6 L. U* E# x$ E( T; o8 Z$ t% x
    a=[-1 -1  0  0    - b1 s( T7 T1 N( |* e" a
       0  0  -1 -1   
    + c, j0 }# A8 d* K$ o7 ~. d   3  0   2  0   
    * F2 v& J- j, w  X" B7 R, L5 K   0  3   0  2]; ( R9 K1 w/ \. |4 i
    b=[-30 -30 120 48]'; 3 X. u; y6 I# D3 K" X) f9 A
    c1=[-100 -90 -80 -70];
    , H' F% p& }* T: j& e) w/ [0 Fc2=[0 3 0 2]; . m1 U+ ~. W4 z% p: B3 g7 [0 o0 w
    [x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值
    9 ^' B6 U! ^1 }4 |7 P9 Z7 P[x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值
    $ v. L4 P7 D+ w* z: S3 Fg3=[g1;g2]  %目标goal的值 . M( g7 I. G5 f+ e4 @
    [x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) / H3 M2 g0 B1 K3 d+ m5 s2 |
    %这里权重weight=目标goal的绝对值
    ' [2 }9 n. N, z" P( J7 c% s( L4 Q6 u& O( T1 ~

    就可求得问题的解。

    习题( w& N0 N3 _! G% k, M- {

    / I: ?( l! N0 u: U: @* c  J# ?) r. H$ U4 z2 p
    ————————————————$ f4 P  v( q# \/ @* B
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    ' B7 `/ o* v1 a1 r& q7 b1 h原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932/ z$ H# V+ Y: }5 h/ l5 f9 p

    ' v: a. Q+ B! }* e
    : e% }+ Y( w4 w7 s( `. z7 @
    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-30 05:53 , Processed in 0.432993 second(s), 51 queries .

    回顶部