QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2430|回复: 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.线性规划的局限性* _! Y' u0 G: a& h
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
    " Z. O6 U9 ^; Y5 G9 k" h
    7 j* c! u( k) j3 x2 j" o2 I. h! { 2.实际决策中,衡量方案优劣考虑多个目标) s( X7 F+ U/ B$ y3 V
    这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
    % a. C! ?0 E1 z$ P" s9 |2 C; _& O8 r; [2 z
    3.目标规划(Goal Programming)
    # k, H0 r% @/ }4 a% k- O美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
    ' t( [& S1 O! P1 v/ f' L' x/ c: z8 e& Q7 u5 `
    4.求解思路
    ! M8 C; K  ^7 X2 N7 \. |) \(1)加权系数法3 b% y- O0 ~5 Q2 ?5 c) K
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。$ E& ~# `6 I6 z/ y. X

    8 x- L% c. @. Z+ j8 f8 j/ o9 L7 r(2)优先等级法$ @) L: i$ v6 P1 W# m; R
    将各目标按其重要程度不同的优先等级,转化为单目标模型。6 u! p% u+ G: e. ]# w2 G5 o" _# J
    / N( p+ |5 N' S  j
    (3)有效解法0 _: M! ^' i& c) Z
    寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。
    3 ~9 Y& e$ P/ `) [
    ' ~! u! W" U! [: a2 d( Y. t* i: D# O2  目标规划的数学模型, t  s1 s/ g6 u; A
    为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。
    0 Q/ t& v* R. z2 h
    ! o  e) W  ]6 Y7 _/ w" M7 B4 ~例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。& s2 w7 I6 y$ C8 x, x
    6 j$ v7 ]$ A+ n; t6 L: [' h

    4 j' O5 {5 ^8 R! ~6 s0 i! L$ M5 c5 [6 Q, h# q# T; U7 ?/ S
    解  这是一个单目标的规划问题,用线性规划模型表述为:
    7 F$ R% p- B' J, V! c$ \) F/ E6 D# ]/ P( ?- k

    ( j. C+ Z  z# a# W+ h' G1 R! V% W, p4 Y% H, ~3 h6 R
    但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如1 w7 L. O% }( f! q; Z/ m* G

    + {1 Y# y# Z$ c(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
    - f7 W& x+ a: p5 A: }( H2 r( Y& O# m
      g; `/ B( I# A' ?/ v; V4 V* g8 g(ii)超过计划供应的原材料,需要高价采购,这就使成本增加。. `( M+ A& C" ]- |% {
    : Y. e4 Q* j" ~
    (iii)应尽可能充分利用设备,但不希望加班。
    ; Y* j9 X- W0 @4 a# x; G4 N0 V' r9 `, E- b/ M
    (iv)应尽可能达到并超过计划利润指标 56 元。+ @/ B  }5 J" Z6 x/ o/ N$ U
    6 s& a: B! q& J5 b1 C( i; f; \
    这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。
    1 j7 S  U$ G2 |" r8 S
    / F  `# f) b5 v1. 正、负偏差变量
    8 L; I* t: f2 g# ?; a, c' L1 ?& J( ^: x6 M5 [/ P9 ?: A
    + ^) b* `5 i$ r
    $ {% J" f$ H% T" e+ _( W
    2. 绝对(刚性)约束和目标约束 ( a6 x0 i& ]# h$ |
    & p) H$ {3 ?- f7 H
    / y& J% D1 z+ u2 L  a4 [

    % ^5 E% Z! N0 ^% p) H9 I3. 优先因子(优先等级)与权系数 $ |% w( h- O, [6 J1 ^

    / S: D9 g! Q! O9 V* u$ P' V3 ]% q/ P8 m) d! }, g7 t
    : J1 p  l2 ]# X2 M2 }: X) J

    4 ~( `+ N& q+ i0 h1 T4. 目标规划的目标函数
    + [0 d- G) f) G5 h  s6 _* `- ]! C
    ! Q5 J# r+ p% v% M# r+ t: r* O  N3 R2 [
    9 S& l9 Z- ^& L
    对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。
    3 z( r+ Q$ h1 c* R% D
    5 n( f1 K5 E& r  ?例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  : s8 U4 `5 U) g/ @- @
    ( Y' E( C$ x7 j9 W$ W1 K% V
    ; Y. g: ^& ~* X  o& I7 A
    6 V& o$ h. A7 j# p9 v
    5.目标规划的一般数学模型0 \5 g  j! ^. t

    2 \+ `. r/ `! C1 A& ~) N* ]3 p9 L' n
    : B% y9 K# ^1 q  M
    % H6 O" |& G; n, D0 J3 Z8 E! n
    建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。   p8 T& |7 H- Z5 }- [$ w

    - G, }) P& K6 e# [1 |3 h3 a# v3  求解目标规划的序贯式算法
    6 ^" e' v+ T7 t; ?- @- j序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
    $ R' v  z" z! v0 ~$ q" e; d7 k7 ^' p2 S* Y+ f8 z: e

    " b9 z, z, e# P' p9 D7 t% W- W
    ( a/ a' A% _9 P- r7 d4 z. ?8 A/ a: k  {; a% X# c) m
    % C6 [" n; F4 o' b$ d
    注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。 & |! `0 k% X; R7 A: B3 Q
    : _- y# l2 z: g, R$ D% x
    例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:" K' j) w3 s4 }1 m) N/ l  L- `. x
    ' k1 F) S5 s3 _) V+ N8 H' G
    ' c  B5 Y& `1 B1 H& y* }, q+ m

    / t* N# D9 {( Q. x& H5 c, t; r- W(1)力求使利润指标不低于 1500 元;- @: C" ~- z( I; P+ s+ c
    ; U4 A- U8 E' G" _* _: ?' ]
    (2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;) p# E6 Z- Q/ ^/ p% e  d* x0 q2 U/ k

    & O4 I0 |; v7 n( b2 A# F(3)设备 A为贵重设备,严格禁止超时使用;: R, o6 d: w9 k2 h+ u! y

      I' l4 Z$ c5 k4 n(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。) J4 X  O  b& G  }4 p
    ) }8 l( }+ Q6 C2 J2 ]) Y$ p+ _! v
    建立相应的目标规划模型并求解。' k( Y. o8 T$ e- P# s( y: x
    , F" O  r9 Q$ Z# q" k
    解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。 9 v$ `( [7 O3 y3 c% w( |4 Y6 y) k
    1 f2 b4 V- Z! y& n4 \% A( |

    ; F3 o2 [  a- l1 ^6 y/ y3 |% D% p1 ^, Y$ H; x0 p( [! L, u
    序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下:
    : O4 m& V) E8 @" L4 a3 q' T* T6 A6 z. H" k- _% A. n: z- m
    model:
    0 T6 k' R9 ^8 J7 [sets:
    2 Y- p3 h2 Y( [/ Y) F2 ]* [variable/1..2/:x; 8 I% b1 Q" w4 a1 t* c/ O3 T/ c) z  P1 m& \
    S_Con_Num/1..4/:g,dplus,dminus;
    0 L# H; v8 ^( O, l- XS_con(S_Con_Num,Variable):c; ! {  i( W4 y$ F$ A5 M6 y
    endsets 9 ~6 }4 ~0 e6 p1 W
    data:
    ! e/ Z6 s4 c  _7 p% R6 W. r& n3 `+ c$ ig=1500 0 16 15; 4 Y$ W; y, e! ^8 }( z( r5 L* C
    c=200 300 2 -1 4 0 0 5; % j6 I5 Y% I( f( J5 E
    enddata
    + }# q+ u1 J: H* a. G6 j" k2 T& Z9 `  j. cmin=dminus(1);
    5 o" E+ I  k$ O2*x(1)+2*x(2)<12;
    " ^' m" m6 ?; w. B" p; x@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); 2 Z3 F" B; K" m- ]1 X
    end: n8 K* `0 q! N( V" T

    0 Q6 o3 U6 N/ j  j! f% o; K% d

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

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

    model:
    ( U" H- i7 H5 b9 Q, R. ssets: ( K1 D0 m5 i9 D
    variable/1..2/:x; ; r, ?" _! I  X! F; A
    S_Con_Num/1..4/:g,dplus,dminus; 5 |6 r) A0 o) V9 A! s
    S_con(S_Con_Num,Variable):c;
    # ~: O& ~* m" w1 u4 jendsets
    ; W; L6 h  g( j3 t8 F2 Z  y! qdata: # _6 L) C( G& x7 q
    g=1500 0 16 15; , W9 `7 `+ r2 B( O( _7 K& w
    c=200 300 2 -1 4 0 0 5;
    4 L: n$ M) w7 X, e: Q7 S0 ^enddata ) W6 u4 X( c+ c5 c) V- r2 V3 b
    min=dplus(2)+dminus(2);    !二级目标函数;
    ' z; e9 r2 q+ e/ y2*x(1)+2*x(2)<12;
    1 b; W* T0 W7 a4 k@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); 6 k) u* z+ x. M* l
    dminus(1)=0;!一级目标约束;
    # b7 M( I! N5 Q; j- g( W@for(variablegin(x)); , q2 t3 [$ D5 u+ j: N9 d
    end ' C2 l) p: y" U6 U+ E% ?; d3 _+ j1 k
    / ^% w7 a2 n7 I, m6 z  b( o% ]
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下: ( m. c/ m6 U/ z, p
    1 ^' s2 t1 m& t' f
    model:
    + W) }9 S- f2 i) V6 z! r6 ~sets: ) _. h  I! v, I7 N& o+ r
    variable/1..2/:x; " x7 m8 \* r+ i2 I
    S_Con_Num/1..4/:g,dplus,dminus; ( Z$ ?4 f1 L8 e4 \9 T5 L' m
    S_con(S_Con_Num,Variable):c; ; t, L% z2 X4 x  a( _+ u
    endsets
    # e/ k9 T/ j7 y  m2 z+ O4 bdata:
    7 B3 w- M. k: E* s* mg=1500 0 16 15;
    3 T! {# m7 F: A* Kc=200 300 2 -1 4 0 0 5; ! q/ d4 M; `* T3 P0 s
    enddata
    6 h& o4 y- Y$ y- r4 O5 Y# Vmin=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; $ {& X7 w; H# g# {8 }' O
    2*x(1)+2*x(2)<12;
    . E* A; U6 M* d @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));   g% [! `. g! I, @2 O4 `$ u
    dminus(1)=0;!一级目标约束; 8 F1 E. `; U0 }
    dplus(2)+dminus(2)=0;!二级目标约束; ) w  F9 R$ k3 T* U
    end2 S* m- h" s; ~/ X: N6 ^0 B
    ! g; X# @( H6 Q+ N' Q; w# @+ j
    目标函数的最优值为29,即第三级偏差为29。 ( ~* w6 G3 {* @9 k) {" e7 `
    * B! J5 \$ A( `( X
    分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。, b4 R  a( h, v2 O
    8 w+ l& h5 C/ {3 T  H6 Z) s9 R
    上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
    ( T3 l% l( m7 ?; x( H' Y# J6 ~; j, _% c
    例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。
    . u6 ], r" ~9 e( D
    , m) {* |& m) g; Z7 I; g6 h& ^3 Rmodel:
    ) J0 `. |2 q5 u' P/ gsets:
    # f8 \, p2 O+ g# a$ Z4 P, xlevel/1..3/:p,z,goal;
    3 M4 b: q: N) H8 }- G5 svariable/1..2/:x;
    % h  K: E6 }& jh_con_num/1..1/:b;
      K- l) o2 l( A. m: X2 S4 i. {s_con_num/1..4/:g,dplus,dminus;
    $ S" {4 w' P' Rh_con(h_con_num,variable):a;
    6 k; D: Z. Y9 Os_con(s_con_num,variable):c; ' O3 x3 K' I% K9 P0 k
    obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus; 0 n3 x9 R) l3 ?; O* T& \$ Q
    endsets
    " F# g. m1 ~5 d1 i; \9 m% udata: ; D5 `* F8 O$ b5 D6 G
    ctr=?; ' P9 j5 a/ S' Y2 m$ s  f  H& y: r
    goal=? ? 0;
    # H$ b9 @( Y) ~' T! D. Wb=12;
    # V# f! o0 |1 o$ Jg=1500 0 16 15;
    : T) c" [, K" N5 L4 @+ qa=2 2; ) x% ~0 x# d4 M3 l5 \
    c=200 300 2 -1 4 0 0 5; ( d' c+ z* x; E* V
    wplus=0 1 3 1; 2 I/ Q$ H8 t( C
    wminus=1 1 3 0; % v6 K: S& `& R: X5 ]
    enddata
    ) [0 C  u  U8 a: Cmin=@sum(level:p*z);
    ; S9 l! I' ~; B) |" C5 U  u5 Lp(ctr)=1; 3 q: r, [1 l2 ~1 N
    @for(level(i)|i#ne#ctr:p(i)=0);
      k) Y6 ]5 l' `@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))); & {* i, B9 s4 e1 m2 s+ w
    end
    % H9 H' s) x3 g# H" ?$ e, y
    ! D$ Q5 Y  t7 g( A4 Z$ ~0 r
    $ l1 c( q: ]& B' w' l/ M4 O$ N8 `) a* D% T
    : u: k6 s7 v9 K, w+ L9 D
    ' @  Y/ n0 t7 q! H
    4  多标规划的 Matlab 解法

    多目标规划可以归结为


    ) K; S* s9 W8 x5 b1 S6 g* ]$ q& T
    5 h+ k' Z' J  x7 p: Y3 `. {* Y9 b7 D7 d, F/ X
    [x,fval]= fgoalattain('fun',x0,goal,weight)           8 ]6 E8 B! Q8 a6 H
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           & K& M" F0 D. m/ |
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           : O* e  [- O2 y8 `4 N! `3 z6 a2 v
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) % D* m1 W) m7 n- k

    , T8 e! z5 L4 A! P$ R
    3 i) L6 |# C! f5 {$ S要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。  t. y$ [+ P% x* T
    例 5  求解多目标线性规划问题
    ) R" ?: a: g1 l+ i0 F5 k3 {# U3 X
    % @$ s( w8 K" s0 E6 N( X/ A- }* H
    % k9 D2 }2 ^* Y- ^& ?5 N5 ]# R" t- ]; f# m$ Q
    解  (i)编写 M 函数 Fun.m:
    $ ~# ?3 `- q$ ]4 p* F( k# ^' P9 N9 a% P
    function F=Fun(x);
    9 C6 o6 u- V1 O. e2 v% _; s/ n3 t, [
    F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
    / a% M* M) ?& t( C; B6 R6 E1 ], x* c% v/ T+ O2 z- \: S3 C, g
    F(2)=3*x(2)+2*x(4); 0 ]7 D3 d+ @, s" R- F; c- X: G  L  W' B
    & i6 S( f" z5 O! B( Z# _4 M
    (ii)编写 M 文件
    7 G: j8 f) X- T! X" P( C3 }* U+ K
    9 x  R6 Q, D! h+ u, v! Ea=[-1 -1  0  0    , ?; Q7 Q4 q5 m9 M
       0  0  -1 -1    * ]& {* _0 O! R# }! U* c
       3  0   2  0   
      h9 o) A3 D( v' b3 I% k0 X   0  3   0  2];
    8 w4 Q" s; X) L; o. d5 [b=[-30 -30 120 48]'; 2 a4 N, m/ x! J  M+ O) a
    c1=[-100 -90 -80 -70];
    & j+ x7 t1 m& t* C- Wc2=[0 3 0 2]; ) K( o9 L, B! B5 i+ S) z2 q6 V
    [x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值 % G/ l+ c8 U: p7 J. o2 `8 }
    [x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 - ]" l+ S$ M7 T  X! D
    g3=[g1;g2]  %目标goal的值
    3 V. f( @8 ?2 [[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) * v! q& Z+ H% o8 q( `& @
    %这里权重weight=目标goal的绝对值
    ( ]$ C9 B5 R5 ]. I- h" X% j4 h, E/ K9 `# }# t5 M

    就可求得问题的解。

    习题3 {. V* L' P1 ?9 z1 f+ L5 w

    4 V8 A; g) S7 {( b) E
    / N5 i0 N* n) Z1 \- o8 }————————————————% b( g$ I( o) I( |* \; m+ @3 w5 {6 A
    版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。. S3 Z: W2 J0 g9 J7 W4 R
    原文链接:https://blog.csdn.net/qq_29831163/article/details/894889329 p$ t* ^* K" |
    8 h  P. G2 X+ g/ y1 N% m5 l0 S

    + P3 n. }4 v2 B/ Y6 F
    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 09:48 , Processed in 0.806721 second(s), 50 queries .

    回顶部