QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2389|回复: 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: \) z6 d6 h+ h3 Z% L
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
    * K: @/ V% K6 f0 p7 H5 m6 ~) \, w7 R3 N$ B  m) I3 I
    2.实际决策中,衡量方案优劣考虑多个目标4 E0 L1 Y3 b# H+ X- g* Q% g# G
    这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。! k4 A- j% N) g3 C0 u
    % B; {" E/ m2 {1 a% o* s* S
    3.目标规划(Goal Programming)
    4 H, U+ s6 R3 {/ |) W0 c: f+ C美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
    , S1 [$ R/ u8 {$ j
    & \5 ], v* Q9 V9 G3 a4.求解思路: |; I7 N  R- f+ W. c5 L
    (1)加权系数法
    ; W: P+ H$ j7 d* \* R/ N5 C+ v9 n为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。0 z2 `; O0 R$ ]
    9 `: Y) b! l$ m5 u% G
    (2)优先等级法7 n) [' V0 Q) }* p: u
    将各目标按其重要程度不同的优先等级,转化为单目标模型。
    , R" r4 s# j+ j& }$ F. l0 u4 o6 X5 {1 M, p
    (3)有效解法* B- y- H0 E% f& v
    寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。 0 s4 K3 W3 o9 ~: i

    $ F! ?/ i& G1 B  x2  目标规划的数学模型" S# X/ N" M- B2 d: C6 l9 k
    为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。7 `3 o0 O8 h) }3 M3 j  y8 ~0 w
    8 J" V$ u) k) t9 ]1 ~
    例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。5 y- z7 R! n( P# K2 F" a

    & s$ Q/ q1 Q( K* {+ G
    , y$ l2 q) c4 ~# t+ z) R! |8 j% ^/ _1 S+ k) K! |
    解  这是一个单目标的规划问题,用线性规划模型表述为: ! D& s/ ^% C% T
      p$ u6 |) g! q3 J

    6 k2 g5 L5 X+ Q1 d6 s' {* C. \5 ^! x2 v/ b! I$ v
    但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如, g0 \7 g3 f7 y* q

    2 h, X* a$ g- M& g% S$ k(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。9 g* R( h" S+ T; X; e
    9 n- d( p* o# \: A7 X  ^
    (ii)超过计划供应的原材料,需要高价采购,这就使成本增加。
    9 I! Q4 ?" Z4 S; _+ H: o
    # `( p$ B' ~+ r( {(iii)应尽可能充分利用设备,但不希望加班。
    ' K- T" d  b" k# G' K* f! n2 N& q) O5 `; u
    (iv)应尽可能达到并超过计划利润指标 56 元。% U) u& ~  L4 i9 I3 K- j
    * d; R( ^( i8 G
    这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
    7 e% X0 Z. y; o8 E3 o$ T% I. I3 T) Q. Y/ W: `4 z2 k! f
    1. 正、负偏差变量 - ?& q7 S8 v0 i0 g% o0 f* D( V! P
    6 T7 I" C, o' g4 `  B1 ~) y

      _9 m  f% y# H) b0 M7 m5 L
    # p" [6 X- [/ O9 ~0 C2. 绝对(刚性)约束和目标约束 ) w6 P+ q7 P- y
    . {6 ~  A& s5 h2 j$ |1 x
    3 }# R. Q8 u9 C" t0 B

    6 b1 x* |1 i' `& e4 h6 S3. 优先因子(优先等级)与权系数 . c: `& m- v1 \- r- _" g

    8 U  E! C5 B6 W
    , L0 Y% `! e' }" w
    / o1 x4 U$ R5 L  M; w5 z
    9 F' R( _/ f, ~# b) z  a4. 目标规划的目标函数 5 d) q$ y1 h1 b2 E0 Q* P

    3 X) t" D- X/ n& ~9 M4 [: j8 x$ ?9 ^+ z; e% u$ c$ i/ e

    ' H2 K( Q' g+ |. ^1 x( ?: b) G对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。
    ) \0 W2 N6 w6 y' X, {/ F/ F6 ?0 j& A/ Q* c- V7 W
    例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  9 `2 k# j0 t4 [: G$ c

    ( r& d8 c8 P5 r8 N8 J
    0 r  s! c2 ]* n2 P6 [3 D6 h; U$ L6 i
    5.目标规划的一般数学模型* m  p" E' C; a# g/ R, E% o
    / {2 ]5 z# x8 Y! p( u4 ]
    ; e6 w: a+ ^/ y4 G) h+ J4 E9 M. S

    # F& K: G8 G, D. [
    / Q6 k: c' j8 _# P! G; a建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
    9 o; x. y0 y& q/ d+ x2 b: a) P& Y7 a% [- W
    3  求解目标规划的序贯式算法5 e% a0 j! d- D% K
    序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。 / @3 m+ ]; H) y* w' P% q2 E5 ]
    " H7 l6 ]1 F3 Q

    ) V; N& {/ R1 r( A& C) B5 ]# e# ?4 J7 v; s  x$ i! H, N
    ) F8 g3 h, ]/ q

    8 k' m5 z7 `6 S* H* V$ ~注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
    0 q  f% W  C2 H
    " J# B2 F" f+ J例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:" I0 b5 W' J  u, G
    % H3 e+ b( V' @/ Q9 _  B, f! a8 r
    7 u/ v9 N' w$ D: L( M, Q
    ' w  a3 o; I& k, ^
    (1)力求使利润指标不低于 1500 元;
    . ]1 U5 t; r) B9 s' X" e! l! @: W# _  S8 t, `6 C8 n
    (2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;
    $ I' r2 H4 r6 M& s' g! m  o, m1 C4 h. F6 N
    (3)设备 A为贵重设备,严格禁止超时使用;
    # U$ d+ J) z8 w; _( b' f5 ?9 u3 l( m; A
    (4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。6 ]3 C$ G6 b0 R* V

    ' h& i) j4 `/ Z* t' ?( r/ I建立相应的目标规划模型并求解。3 ?; ?  I  [, @) ]9 Y

      a8 [' L8 m  R; a, X& j# g- q解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。 9 P& P. P$ {( U2 `$ b5 J$ E

      {! `+ y* L6 Z7 j9 r) F% Q
    # h- `; Z  i1 ?3 A+ {8 f1 p4 \6 p/ p! l- x% R+ R! h! C. j
    序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下:
    + i/ Y5 s1 d, ], X/ c9 `
    5 j1 v. K$ C) m( C2 x% Bmodel:
    $ z& N4 k3 S4 W% X$ F# Ssets:
    ) P' ^% x9 u5 j( R' n, Z6 cvariable/1..2/:x;
    " ]7 k' {, S/ C7 K- c4 RS_Con_Num/1..4/:g,dplus,dminus; ( W3 T4 D2 l9 Q) i
    S_con(S_Con_Num,Variable):c;
    " D9 D  I0 l. V3 p7 F% g. @/ Fendsets   Z, d% K5 S' z1 H0 U
    data: . y! k8 q& m( }/ ?( h9 b- a7 R
    g=1500 0 16 15; 8 D. u7 O. l# a! Y2 [
    c=200 300 2 -1 4 0 0 5;   F3 p; i1 W! ]& S1 D
    enddata 8 H& \- L) c& B- ]  J
    min=dminus(1);
    % \5 c( i+ h- u# T2*x(1)+2*x(2)<12;
    * M. T) J1 V: C& @2 ]@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); " z( M7 H) B3 J" x
    end
    5 g+ v% t3 o8 x' Y
    $ u) M' {# b# k$ ]1 O( m; U

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

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

    model:
    7 z' P& h9 O9 L; Csets:
    1 a' `0 _% X* X  Jvariable/1..2/:x;
    + M5 ~1 _: D) [- ~0 }6 i/ sS_Con_Num/1..4/:g,dplus,dminus; / P8 u" G" W4 ]# w5 F2 Y, r
    S_con(S_Con_Num,Variable):c;
    1 t+ {0 k5 S$ eendsets
    $ W& o+ N# D* Z: m2 Z2 ndata:
    ' r5 A& z" {. d* I% X# cg=1500 0 16 15;
    & |. h" Q1 N- s4 G; V8 _: [c=200 300 2 -1 4 0 0 5; ' }, j, K. P( F# V
    enddata 2 H. _9 _4 F, z' f/ b( X! D! C5 V* n5 c
    min=dplus(2)+dminus(2);    !二级目标函数;
    2 E8 B( z2 Q) B4 C- ]% T2 N2*x(1)+2*x(2)<12; ' R9 g7 M" [! F, r: ?+ K' X2 \
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); & i/ m2 `& u1 ^- p8 c
    dminus(1)=0;!一级目标约束;
      W( [8 u2 l# F1 {@for(variablegin(x));
    # u, {' a/ ^: w7 M! Z! oend
    / D9 J$ |- I7 h! x! x- A9 t; ~1 h. m8 Q) o
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下: ! J1 @  O1 ?: t3 ^! g, ]* @
    - j. ~/ x. S/ `9 n. C
    model: & X! y8 A5 y# @/ X
    sets:
      E5 e& u1 f5 J& Q( h9 g" uvariable/1..2/:x; " k9 z: p7 m; `% M
    S_Con_Num/1..4/:g,dplus,dminus; 8 w4 B$ o2 E, S- t0 v1 u) T; ^
    S_con(S_Con_Num,Variable):c; , d+ m2 o' t( q+ B
    endsets & }0 @; O4 M2 {: F6 m) v
    data: ! p6 v+ ~0 [% S
    g=1500 0 16 15; 6 S1 |0 g" H, [- \! G
    c=200 300 2 -1 4 0 0 5; 1 W0 ~. H! l# L0 u5 y" L5 c
    enddata
    ; x1 Q4 X# C! c' pmin=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数;
    . q! C3 @: K5 @2*x(1)+2*x(2)<12;
    2 e6 R4 P/ j6 \7 c/ P6 L! N @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); & ?# n3 b, l, P6 M
    dminus(1)=0;!一级目标约束; 2 `# Q! M; _- Q" ]/ c6 b
    dplus(2)+dminus(2)=0;!二级目标约束;   a& W' w, ]6 l) Z5 r7 b+ }
    end
    4 D0 X' t! T* q3 D, L
    3 E  u8 m) j" @7 @: A目标函数的最优值为29,即第三级偏差为29。
    ; J: P, b; v; {( [: L
    . r9 [; z* F3 E2 A; t8 A9 V: J分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。  Z  G3 g0 D6 ?" x4 B* l
    5 i* _3 s% z0 J* i$ l
    上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
    % @; _$ X) ~5 W5 _5 z
    ) b4 ?( V; [  i. c% ]8 h, M; i/ U2 W例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。, G5 I+ G+ b$ @: t" L5 @
    / K& J# L1 u0 T$ G/ U
    model: $ D) F$ y+ b  Q& ]
    sets:
    ; P% _/ N2 D# f4 i: x# [6 G+ a: tlevel/1..3/:p,z,goal; 6 {" E. ?$ E2 h" q* ~9 e  B
    variable/1..2/:x; ' h, H1 ?3 x, y# q7 W0 k: q
    h_con_num/1..1/:b; , Q- W  F, r9 V$ \8 d
    s_con_num/1..4/:g,dplus,dminus; & _5 Y; v! C* r. j4 I# t& M% D
    h_con(h_con_num,variable):a; * A5 R2 {, [8 T! S" n9 f- i$ F
    s_con(s_con_num,variable):c;
    0 y' z( Z5 f/ h* I0 S3 eobj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
    ( x, u2 A# A$ G$ Z5 ]8 X: c5 vendsets 6 D4 b7 X7 e: r8 h  C7 K& q& F
    data: $ O) N! Q4 ?: e: |8 s; h( z
    ctr=?;
    ; R3 G" f( i1 _9 Igoal=? ? 0; * u. F$ S7 h2 V$ V
    b=12;
    3 _# }: Z! |+ B! r* ?- L5 Rg=1500 0 16 15; 5 ]; ^% I+ K6 D+ Z1 \9 x
    a=2 2; , K) u2 H  [+ ?1 C9 \: j' I: u. \- [. C
    c=200 300 2 -1 4 0 0 5;
    ! E' v5 j# t& L6 z! T1 Lwplus=0 1 3 1;
    , k. ?' |. l3 ]4 _% T4 g: ^wminus=1 1 3 0; 5 y3 U- l6 q, S- |2 ?3 x
    enddata 0 l7 c7 w0 f8 P* F" H7 W9 ?- J' x
    min=@sum(level:p*z); % \0 U, N7 f/ k/ H2 H
    p(ctr)=1; & ?" y( C- V; n; L/ d2 _& `8 E& m
    @for(level(i)|i#ne#ctr:p(i)=0);
    7 N/ ?+ L2 C1 A( z; `7 v0 t  X@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)));
    % E. Z" ~1 g) ]* J: W- s4 Iend ' P# }: I4 q( u) V: @

    : p/ F/ K! T( [6 Q. |4 n4 E0 H8 ], ]8 N6 L/ z
    ) t- M! v+ B# v6 i4 g$ q! g

    6 t2 m) s* [% d1 ^8 B* u( ^; l- y; m) w0 c1 h& l) E
    4  多标规划的 Matlab 解法

    多目标规划可以归结为


    ! T; t' j/ y  T7 _7 b) ~. K* h6 b/ v0 w: B3 f! N8 k
    9 J$ H: G6 _. l8 f0 a6 e
    [x,fval]= fgoalattain('fun',x0,goal,weight)           # ]6 I7 F0 Y2 n, P7 J
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           
    2 i+ v2 \3 @% m" p" I# R( ~[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           & F! Q1 ~7 v' t& J# d, Z, ~9 w
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
    , N: `) D" X: A7 S2 X
    1 |: ^1 F* T$ r9 \, d( I5 l, Y
    7 [! y& y/ t" K. @/ p' L要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
    2 j6 L0 A4 f/ _ 例 5  求解多目标线性规划问题
    ' v! O! ~! x: ~/ o$ k! v, n5 T7 q% F

    4 ?* `0 r. X. x+ a; @8 b* q! P# ]& D/ {7 v
    解  (i)编写 M 函数 Fun.m:
    - Y0 d1 t' b" D7 R) P! \" [$ n6 u8 `5 }, [* C+ K7 E) Q/ w
    function F=Fun(x); 0 n+ j' ?$ E! s2 C- p6 ^' K

    5 d2 F* T' {1 X! I1 d; bF(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4); ' B/ `: s  q' N. S

    . @- S: W5 e% t; `F(2)=3*x(2)+2*x(4); ; [5 p5 h  \2 H) d6 T8 J1 X
    ' X2 j% m# c# j* t
    (ii)编写 M 文件 6 o8 B" y9 S  M9 m& L

    0 m& D$ n$ O$ ~, }  s' L1 Ba=[-1 -1  0  0    9 @7 G5 }- A' z) b2 T. [' O6 ]
       0  0  -1 -1    $ q: x; d! b# R. U( Y  o
       3  0   2  0    7 {9 [# f& m, x' m; p  k8 o
       0  3   0  2]; 3 R8 g% O% N# Q% P4 _
    b=[-30 -30 120 48]'; ! }7 l4 x7 [& m, U/ l
    c1=[-100 -90 -80 -70];
    & G/ \# Y4 A. t1 r/ z. ]6 ac2=[0 3 0 2];
    3 g/ f$ u" r( F# \- s- T- H[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值 * `( \2 T. C/ X
    [x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 ' x& x3 S5 F/ N9 \( g
    g3=[g1;g2]  %目标goal的值 % I/ ^2 M1 ^9 J5 ?' g! }
    [x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1))
    0 i* U5 H# n( B0 h%这里权重weight=目标goal的绝对值
    - R/ h+ l( ^8 a, W1 o* O% n" J" I4 g( K5 o( M4 Z  c

    就可求得问题的解。

    习题
    ! C# x5 a2 q6 j3 f5 M( o5 r: ^$ V- ?4 J7 C3 T3 u" v8 k
    % K8 n$ J& X& ?. H
    ————————————————  @1 Z% m4 ~" ]1 P
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    . J9 a4 t0 t, V/ L, z原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932
    . U! b2 P. a, J) P+ w! o, q
    ' K/ B  v" e' g5 n. q2 L
    + v4 E6 Y, a3 a  Q! Z
    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-14 05:56 , Processed in 0.429173 second(s), 51 queries .

    回顶部