QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2461|回复: 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.线性规划的局限性( |/ o* E0 O- n% V( k7 ^
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
    ( e2 k+ u  O* M3 I2 H
    / u+ g% n% b% D1 k% s 2.实际决策中,衡量方案优劣考虑多个目标
    6 l# G- L( j, r. T  f) [' G这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
    . D4 ^# p4 q: @" @" ]4 t  }
    6 V+ T( H' Y# c' q& [3.目标规划(Goal Programming)
    : u( B; U& |8 ^美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
    . R7 \0 S! b8 t$ H  C
    " u0 D0 h1 ?: I& @! ]$ N4.求解思路
    + ]; C7 {1 b* O/ G! J: d(1)加权系数法. q& p/ b6 A* G
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。/ F& l1 x& d& G9 h0 a  f8 @. J

    ; _9 F7 X: C  M6 L7 B, a6 z2 l5 U(2)优先等级法# E  R* A8 w) S: [& h+ m0 f$ k
    将各目标按其重要程度不同的优先等级,转化为单目标模型。
    " }4 G2 V0 g, ?; j' j6 r  K3 Q/ J" k# R$ c  o
    (3)有效解法# P% J' S% h5 m  b! H: i
    寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。 5 S# b+ s. x/ H/ ^0 B! Y
    ' y9 i% M: Y. \: A" n6 U0 v; m
    2  目标规划的数学模型5 F2 i; O' z* o. A& N  S4 }& [
    为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。" J6 E/ u( ~- X5 `7 Z2 ~
    8 }* N3 e, C6 _. ~$ W( {
    例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
    3 f( a, i: S& u. e. Y# _9 {' y! M- @3 g% T$ [8 b' B

    , W( [* Q9 N4 o: e+ z5 t: V% J
    ( P5 l5 A1 A5 Q; y解  这是一个单目标的规划问题,用线性规划模型表述为: * @  E) z1 Y. j1 ^+ u
    8 H4 a& i, R; D$ I
    ( X. N3 b/ k' p. l2 j# B

    $ L! r7 q0 O9 s% v) Z- l但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如; F8 ~2 m7 _2 s, ?& q0 x" R

    . T, ]7 j( L; g6 B- o$ p(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
    . B# i+ X* I3 i: G3 p' t" a$ Y. R4 Y, Q# e. w# Z
    (ii)超过计划供应的原材料,需要高价采购,这就使成本增加。5 `( n8 Y0 _. S8 E
    : t* ?% V& f5 d7 ]) k: T
    (iii)应尽可能充分利用设备,但不希望加班。 . i  |; T1 O; w

    , d4 q2 v5 f& ~/ n" {(iv)应尽可能达到并超过计划利润指标 56 元。2 C& x6 a  a" n' I7 C9 Q5 \# [

    2 _7 X# N8 N  S& W4 N% t这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
    6 \, Z( b' o- \8 E0 z# o' ?0 t+ }9 {: F' q+ u6 l% j' `; {
    1. 正、负偏差变量 0 V2 T/ i! `: `6 l& f5 z
      g0 {. [4 A; n/ |% n+ Q5 f- S

    1 l: F2 M$ b; j" g4 M2 x  S- Y) A' ]% T3 z" ]0 D) _' v& {; z
    2. 绝对(刚性)约束和目标约束 , s% i* h1 |- r# E$ C

    , G) k: }$ f! Q! q4 m& X
    5 {: N0 v( X- O: @/ a7 z
    6 U: y: z. V7 Q2 `% N, c$ X3. 优先因子(优先等级)与权系数
    8 b9 O  d9 f  L, T! W; s
    4 O- C" V$ _4 Y
    6 A% Y0 Y  g5 A# m" W
      i) U; t( a: G" Y! Z1 }
    7 `% Z3 b( M' V6 M3 B0 ]5 }) J4. 目标规划的目标函数 " T+ Z; l& D# a6 q& K3 C' {
    7 ?  c1 D  F/ @8 o- {3 N& N( }
    " J4 H' M% G# _" P2 d: a& M

    ' r: C8 b+ P0 V1 q0 [: {4 [对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 5 L: G5 ~% e* i: @$ F6 `4 v

    + O2 ]4 s! k. \4 A6 \例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  
    & O3 P) O' p; M1 Z+ x7 U' z/ f
    3 d& l* |% \3 q
    + Q) D! [. {# W- a3 ~0 M- _) q2 k, h) S( [
    5.目标规划的一般数学模型% H! p$ e7 s* G! u- H

    , M6 u3 d+ P0 e  N6 p2 @9 v1 l2 O
    & ]4 h( h- ?1 o# M7 H
    * L: I9 D2 K8 n' z: W2 D6 {; L, w. l* G: j* O
    建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。 0 l: t1 |/ a1 k: k. ]4 N

    5 D+ Q9 v) V! }; v3 C" u3  求解目标规划的序贯式算法
    4 {3 u5 Z, ~  K3 y& |1 W序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。 0 Q! w+ P6 d2 e' Y3 h  V( h

    ( {" i7 V; C4 }5 i" j) l2 J5 a7 k$ ~6 a; L+ Y$ `3 r) `

    5 S; b- i7 @& g( I5 r
    ! B. j( i. v& r: h- y: H
    8 f* E" ?% [. @2 D4 J, N$ X注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。 $ S6 c7 U3 N7 O" J: O! J. _) L  \) F
    ) |- |1 E: Z% N) j8 |! S8 C
    例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:
      K9 Y0 f8 Q4 s( g! Z" A; H
    1 O/ d9 @9 R3 B2 n- @/ l
    0 T/ _% K. G& h6 k) V! _) `' K( u& o7 M- @9 P5 v- i! f! I
    (1)力求使利润指标不低于 1500 元;
    + H& a; ?8 N# Y2 l" G
    5 G$ x4 G' \6 h3 N! o" i+ G(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;
    9 p3 v8 g7 n: @0 ?! W0 T
    2 u: M/ H3 K- R(3)设备 A为贵重设备,严格禁止超时使用;
    ) V" e+ g3 ?1 m, z! _
    $ O+ m% Q: _4 M1 k8 {(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
    - P" c" d! h& }, K9 m% m. u7 M5 d" d9 r1 F
    建立相应的目标规划模型并求解。
    * ~% y  e' c0 Q4 T8 [  q4 p$ W$ D2 U
    解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。
    ! v/ m5 X0 S" o8 ^2 j
    ' |) D3 S2 O/ W+ v; m
    # v- y' W' R: B1 `9 W3 e6 _+ Z! ^9 `
    序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下: 8 o- \0 }# W# N5 @- Z5 T

    7 y. z# J  F; h3 Tmodel: 2 k3 S! l# {# P* @! |+ t
    sets:
    + b- q- P  b( d( pvariable/1..2/:x; 6 a; A$ ?" {$ j* S6 Q! Z
    S_Con_Num/1..4/:g,dplus,dminus; - U# p5 W6 u7 B5 L/ X
    S_con(S_Con_Num,Variable):c;
    ' l. [/ ^9 \7 y. u! I  O$ lendsets
    " ]' O" K' I0 g7 Gdata: / ?0 G6 q, j8 c, t5 a% l
    g=1500 0 16 15; & f8 _9 P5 j" D, J  k& E4 E
    c=200 300 2 -1 4 0 0 5;
    $ d0 w0 J8 d: w8 z# genddata 9 Z- G4 b$ G0 u
    min=dminus(1);
    * e" f* ^( z0 f2*x(1)+2*x(2)<12;
    5 U- f& F& S% M- r+ ]@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); & C" U9 T0 J) w/ q- m. Q
    end: u: v2 ?1 z/ j

    3 Z2 @5 Q# l" M5 K8 `7 I

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

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

    model: + l- G) _& X4 _7 V+ F5 r
    sets:
    6 @# ^9 q# j4 V+ m4 V. _5 zvariable/1..2/:x; 7 U5 F( H$ Y" ~, I' n
    S_Con_Num/1..4/:g,dplus,dminus;
    6 ]- m8 W0 @' ]2 Q# o4 iS_con(S_Con_Num,Variable):c; 6 H2 a" {5 n% f$ l9 m4 m
    endsets
    ) V# h5 R9 y; U" E# W' q& Xdata:
    7 s" s1 l- |: x0 M3 y8 hg=1500 0 16 15; . ?4 Z/ E$ ~4 @0 G, p# Y- {
    c=200 300 2 -1 4 0 0 5;
    4 |. ^; h* X2 @# Renddata . }1 I% o3 W: b* c5 F
    min=dplus(2)+dminus(2);    !二级目标函数;
    2 U# b. [2 V1 H) z$ o2*x(1)+2*x(2)<12; * [2 ]( [+ N( G  `7 X9 Q! w
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));   F& g, j! \% A! I
    dminus(1)=0;!一级目标约束;
    1 Z: C" r1 m! r2 F3 `@for(variablegin(x)); 0 u1 g! q) g4 o% H( m- E* C
    end
    + l0 T# V+ P) K9 a8 h+ X, k. K' c0 E1 t6 p' w
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下:
    . V7 X6 Y2 X" G* @! B- P# A: E4 J- B3 ~2 R$ ^5 `: ]
    model:
    % Z( ?: B: A5 Y2 u5 rsets: - D/ D  M+ x1 l9 ?
    variable/1..2/:x;
    8 j! O9 R1 i% Z/ LS_Con_Num/1..4/:g,dplus,dminus; $ u7 b/ y. X$ _* s% f
    S_con(S_Con_Num,Variable):c; $ |5 \5 N- r1 W8 M( I7 n
    endsets # W. o6 o5 e4 D2 m$ Q
    data: , T2 e3 J  E7 Q% j
    g=1500 0 16 15;
    . g2 S8 ?" b4 Q7 V# R7 {( j, Pc=200 300 2 -1 4 0 0 5; ' N5 B# ?9 U+ N; c8 M
    enddata
    3 i( }% W7 l+ ~min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; / n" C& N7 A5 `
    2*x(1)+2*x(2)<12;) G$ ?/ w6 y  D) U. r3 }- ^
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    / j! G5 ?7 e; y$ w6 odminus(1)=0;!一级目标约束;
    9 E) b$ D, O5 p+ K5 V) E+ n2 Udplus(2)+dminus(2)=0;!二级目标约束; ; w2 P; F; W# X5 b7 m( P
    end8 }0 n4 b3 E, d8 R% ^. B. u

    # [  i3 C( K! o. m' w! g* [目标函数的最优值为29,即第三级偏差为29。 9 E5 s( d3 R7 E7 U' ]

    8 u: p+ A) {* T$ ?6 U+ u分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。0 D1 J0 g" l7 H0 L; H) [

    7 P- @& J! C1 i* t* L; C上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。4 x6 \4 p5 H" [' J& F/ f( W  P

    . i) K& U$ K* O% V& x# \: Z% O例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。" r3 H6 f' X; v: m
    8 _7 p0 X8 V. W, f) _
    model: % q5 k# x% c. R; n6 E+ p
    sets:   ?4 k' e; r6 h. p
    level/1..3/:p,z,goal; & P7 }- B/ s$ H! H9 |9 N0 g
    variable/1..2/:x; 3 r5 @  I! n, N# y
    h_con_num/1..1/:b;
    . m9 }! G! P  N6 gs_con_num/1..4/:g,dplus,dminus;
    5 O( e& ~! H, z* q6 Uh_con(h_con_num,variable):a;
    ( A/ e+ ^2 l' Ss_con(s_con_num,variable):c; - Q- b* s& K- E
    obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus; ' v; ^- y5 K/ v7 v
    endsets % Q4 V' R& h6 M: N" e& C' {7 w4 p
    data: 6 s6 w" i8 d3 s. b' L% ]
    ctr=?;
    8 ~  p/ M/ a, B. x  pgoal=? ? 0; : X7 E% q6 j' D0 C1 {
    b=12;
    . _  b! v" Y7 |7 Rg=1500 0 16 15; * O' C9 K# N( Q
    a=2 2; 1 s: o: a8 F, m, Q* k( C. r! u. ~
    c=200 300 2 -1 4 0 0 5;
    . B& x4 U. \8 Q; `wplus=0 1 3 1; - z- @3 k. W0 _3 {  w
    wminus=1 1 3 0;
    5 o( |6 k9 G# m# S5 senddata
    3 j, u4 u, I" Q& f% `: [% N1 Mmin=@sum(level:p*z);
    ! G% r7 W7 w8 `% h/ S( |/ kp(ctr)=1;   D1 c" f/ r- E) T" \  W
    @for(level(i)|i#ne#ctr:p(i)=0);
    4 u) ?3 p: I, I/ t) {1 {; {" I* q@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))); # T* M- m* Y; Z) l$ t
    end / x' C- l+ h* L4 j# t: ]* ~- z

    3 S/ E4 E$ S: W! n
    1 g$ |: j& {, _! r
    , i/ ?& k! Q/ e. J* A1 M$ z' Z* V, w1 Y

    ' u; x; P" F0 n1 B4  多标规划的 Matlab 解法

    多目标规划可以归结为


    & ^, l3 P0 T  N% p: A" y8 W5 m" @/ Y  c1 i* D8 S, `% v

    ( f7 d$ o+ T) W/ ?+ m[x,fval]= fgoalattain('fun',x0,goal,weight)           
    / _3 m# K) c, ?3 @[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           
    % _: e3 U8 V8 i6 s[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    5 ~5 _! s0 h: _6 D) _0 M  Y& W[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) 6 Q, S7 `* C8 w( f/ M0 Q* N
    ) b+ y) p( `8 K1 K* [4 l/ V. Z

    2 A. W: d; ~5 v7 i" x# Z要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。) q- x5 q, l" a
    例 5  求解多目标线性规划问题 2 \8 x* g) x$ |+ @" V0 P+ H+ ^% i& w

    # I7 v4 i7 v! E. B- L1 n
    ; R* V5 t8 N% p' v6 N2 g$ U: @) k( \
    解  (i)编写 M 函数 Fun.m: ( w) G3 k" N3 f/ U

    , ~. V/ [- q+ Y, f4 ofunction F=Fun(x);
    * s! N5 `& G2 P, s6 C
    6 y) z. u6 j6 E% G6 q  TF(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
    , C# d' j) d8 A* l0 x/ g) c
    3 \& z6 y+ S2 y2 ]3 O6 {5 m3 m4 xF(2)=3*x(2)+2*x(4); / q+ ]- Y" @( `( M. ^# L

    * L% F# q+ j% B$ Q(ii)编写 M 文件 " i6 J$ e+ p, n* C( L. I

    ' I- b* |% q( M/ Ka=[-1 -1  0  0    8 D) w1 i" _# ?8 q) E$ \
       0  0  -1 -1    ! v9 c, g+ v8 J3 M
       3  0   2  0   
    2 {6 N) P/ I' E/ V( j" L   0  3   0  2]; & {( `% d( {) `, N' h' @
    b=[-30 -30 120 48]';
      j- k9 R" W0 f$ Z' s1 K- Dc1=[-100 -90 -80 -70]; & H$ Z0 t& k$ w9 u
    c2=[0 3 0 2];
      s( O! k" J% T3 J- ]) k: q1 p1 |. Q6 N[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值 * k- {2 k+ ^5 H" Y$ M, |
    [x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 ' ~" t- t% P& Z' a
    g3=[g1;g2]  %目标goal的值 5 ]8 S" r) D4 r' ?7 s1 E: i8 m+ [; m
    [x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1))
    1 X! g2 U1 ~) V: \* N; f  U$ {4 M%这里权重weight=目标goal的绝对值
    $ Z' P* w# \$ k& h  u$ R+ H5 X5 P3 J- Y# f  W

    就可求得问题的解。

    习题( R% V' g) j) Y/ B7 u

    8 s* K7 B4 k, ?. }- r0 v6 ?# q  k8 a; \8 o
    ————————————————- J9 ~" B0 I* ~2 i4 M, z3 I7 ?7 m( {
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。1 C5 d# B0 B4 v( E3 T* t
    原文链接:https://blog.csdn.net/qq_29831163/article/details/894889328 p) {  k# F; u! E! T4 }9 z
    : i( R8 H0 H2 v1 w- |9 B# _

    : ]% q! d- q" U
    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-9-13 20:12 , Processed in 0.708521 second(s), 51 queries .

    回顶部