QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2347|回复: 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.线性规划的局限性+ V# b( o2 P. Y, K
    只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
    2 `" M! X0 ~/ H9 b( r) {2 t0 f6 I8 W! T
    2.实际决策中,衡量方案优劣考虑多个目标
    1 t; ?4 N; V! r8 t: `5 ~这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。
    ; f8 l% W. P' d3 M4 P& i$ U6 w* @
    : G! F* o/ u" F) I" r- {3.目标规划(Goal Programming)
    . A1 p- K. P0 z- V9 R( E0 `美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。1 O, n+ h( U7 E0 ~

    . ]- \. v2 I1 y( }( M4.求解思路
    ( Y  k! W7 }+ i' e! t, C% L(1)加权系数法2 p  S. w" R7 e& x& u5 i
    为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。$ @5 V8 C* e8 [3 @6 t5 n( d

    + ]. ]' {# K! E: [- r0 ~# X(2)优先等级法
    3 |! S3 O! P- D将各目标按其重要程度不同的优先等级,转化为单目标模型。
    3 x6 ?+ F1 ~  [8 J
    1 K; ^/ A5 w& a3 \' ]  |; C. k(3)有效解法0 A5 N3 Q+ J) t; [, B' F, s4 u3 k
    寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。
    . c. U- v7 {6 [2 h* W. ?9 k
    8 q, G8 `2 H: V0 `2  目标规划的数学模型) ]1 x4 {0 v, ~. |# o
    为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。
    1 B( ?/ t, ?* `# J: R1 V
    " F; e1 m% X- o9 t9 l2 `3 Y例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。
    ) y3 o6 [0 x. u8 l3 x, p0 J" x
    7 G1 E5 g9 m, v  t, d! O& m& X) @2 |+ R  F4 U  U+ ?
    1 I, ~. L6 J+ U! C3 r6 Y6 ^
    解  这是一个单目标的规划问题,用线性规划模型表述为: + d* u" N9 J+ F+ Z8 `

    ; b; ?4 }- |! h# u
    : _. C- o3 R$ n; i  M8 A3 G8 Z/ B0 T1 G/ O) S& K* Y8 {: i
    但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
    9 o" S4 p# ]+ _
    : x5 j' r  ]6 J4 U8 o/ R2 S(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
    & }6 N* j( a  m# Y) q
    1 w* @8 W6 M+ \" J; L(ii)超过计划供应的原材料,需要高价采购,这就使成本增加。+ }( R& ]' S' }& T: i8 V$ D

    7 ?- t/ ~2 o- Z- s1 [3 ^) d(iii)应尽可能充分利用设备,但不希望加班。   h- c+ r+ }. l, W! O, _5 |% m  p
    . {1 x7 I8 Q9 o$ H6 i: e6 y
    (iv)应尽可能达到并超过计划利润指标 56 元。6 W* a( W/ V% R9 g; R1 [

    8 Z8 [1 s; T% [5 t! O& K. n5 v& H这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。 9 u9 f/ U2 N6 M0 w4 a9 z0 j6 Z

    * G6 C/ y+ \8 J+ ^9 L9 M% y1. 正、负偏差变量 8 Z0 V( f2 y8 t! r0 b5 X" Q
    " ~3 q; ~& L$ b/ Y( i1 `) e
    ( w* [9 }" x7 x* G, I2 E

    * D5 `: `3 h# G' O) j' e2. 绝对(刚性)约束和目标约束 ( a9 C* t0 k: X/ c! N5 _- q

    , c; u1 {. Q, e% _  S" y$ d  G% k* z& C% P, ]5 x
    ' V# x5 t6 X2 G- U5 b
    3. 优先因子(优先等级)与权系数
    % J4 d- _% Q( V* E; p
    " M% C6 E. {, A' ?1 N9 E+ D* T$ @3 ^  C  ?0 z- o
    1 v" u7 i$ K! D, [3 j7 j" _

    5 \7 M: h6 v- I6 j4. 目标规划的目标函数
    6 n, J1 P7 ]: c) e9 p2 d4 q1 {" W/ v+ v# O: _0 l4 |

    1 b- U- g- T3 S6 ]% I0 x
    $ h: a: }: Z' x0 m, Z对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。
    ( h. _" }5 p$ D$ e" a6 Q  K5 A
    ! A" Z8 C" p# o  H# e1 I例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  ! c1 u/ `8 Y. \2 z- v) O& O
    2 J1 u: d4 r+ y( m

    + s: d) T# D% L$ o
    6 M3 u, ~2 p" ~: p% k5.目标规划的一般数学模型8 j0 X7 m2 m5 M. ^

    % g. h$ u; ^2 j& z7 W0 G0 C1 ]! `- R! J+ }' r

    5 }- W# }. N7 X5 y+ v( M3 I0 O1 `4 k2 @6 S4 Z! R) P0 M) D! s
    建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。 & X( e; S0 ~# k2 v7 r

    # C% u  w! G4 ?3 |5 v$ p, \  r1 R3  求解目标规划的序贯式算法
    - w. F9 \7 ~8 ~5 m序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。 . m/ E6 f8 E+ c4 g8 N, d

    # `6 T& A! ?- S$ X5 {7 P3 R! ~# e( |: q- o. N, M$ |
    , P- Y* [- K* S* k- L

    * @0 I3 ~( N/ W! p+ r# y5 N8 Z' g9 h$ N
    注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
    5 |( M- P8 p# n3 o. z
    ; I; [& I+ P& T8 \5 B例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:
    ) x7 b" J' x% _! f
    2 E9 u# e* j* r5 b  Y- `4 L& D/ O- t' l& H$ m4 i

    9 e" l" \! n4 i1 _: `(1)力求使利润指标不低于 1500 元;( e. y% N; t* E) J* v, R$ X
    + W" C: B  \5 T% k! v( U3 ^' t
    (2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;& L6 Y- t; B- R% [) [, c, p
    ) U% E5 _+ V! Y+ t3 h
    (3)设备 A为贵重设备,严格禁止超时使用;5 N+ _0 W. E4 P: z

    % _1 r' \/ L; o$ A4 _9 T' b. n(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。
    8 A' K0 J) J  g8 V/ e% V5 a3 V+ k4 |% e$ y0 w8 C
    建立相应的目标规划模型并求解。
    9 {( p, B! P+ y" Z2 ]" O
    1 z, S2 a, \) u/ h+ c3 n/ y解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。
    ; E' x$ _. K0 ]' {9 K; C( _8 i9 [/ g+ Q3 K, b+ {2 C4 `3 a8 w
    ; w! q6 S3 J) _- ?' ~. @
    ; E1 F  D0 n) y; @. l, |+ s
    序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下:
    . V3 V4 N0 \8 g2 [7 j& m' U. {+ A% |# s
    model: % z, M4 w5 i3 P8 t1 H
    sets: 6 W  o$ Z9 }- H  l8 ~
    variable/1..2/:x; 5 b8 Z( c! \. {+ b) Z
    S_Con_Num/1..4/:g,dplus,dminus; . T! f; a; d$ d1 O* q2 h3 q4 }+ Y
    S_con(S_Con_Num,Variable):c;
    9 Z* |9 V, j' Z$ r# e2 C6 Xendsets $ u5 f0 A+ s1 G
    data:
    0 `- Y) G+ [, N# W# x$ wg=1500 0 16 15; & M# W$ S1 A" l6 M
    c=200 300 2 -1 4 0 0 5; $ O  Q# k. `' L1 g
    enddata
    9 L- e4 c. L5 `: e. K& nmin=dminus(1); 7 b& d  A% P  ?* g7 Z5 _6 K  }( N
    2*x(1)+2*x(2)<12; + T  y4 a/ G0 B+ R$ M* g  r- Q& ]
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    7 ?. O/ |2 Z/ G* z$ p1 Y& xend
    $ G" w7 C6 U: t& L; g% d" L- c9 d0 F

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

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

    model: ' ?' r4 Z7 j$ t2 r
    sets:
    ; x) r) A% s6 W9 [; O7 o, Dvariable/1..2/:x;
    $ ]) H1 J& s% D% O$ {1 eS_Con_Num/1..4/:g,dplus,dminus; & U; }8 ~4 Z7 C
    S_con(S_Con_Num,Variable):c; ( C$ J/ L* q4 J0 Z8 l
    endsets
    # g6 p8 ?7 g7 Pdata:
    4 M7 ^4 R/ c  r( zg=1500 0 16 15; 1 x% V7 P, i  ]! c1 a8 J  j( j
    c=200 300 2 -1 4 0 0 5; 1 j* q6 A& c. I* ?2 A; J$ q9 d
    enddata 8 f) u4 F( Z2 e4 R) d
    min=dplus(2)+dminus(2);    !二级目标函数;
    " k. A7 `. Z+ \1 W; W* O4 T2*x(1)+2*x(2)<12;
    ( b" N$ @) _% a1 Y6 r@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); * d4 D/ @8 p) }/ R
    dminus(1)=0;!一级目标约束;
    2 h0 T* x1 i7 \7 O8 i@for(variablegin(x)); ( }/ [  Y+ u3 V
    end
    * [/ f; d  r: A+ t6 q9 c7 o" S0 I6 S4 j8 _; ?3 B! ^+ O
    求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下: 9 t) K. A: w9 v/ w* `0 e
    ) a) i8 _& A: m. F1 c, _
    model:
    / a2 l1 k  C7 r9 Ysets: + C: l. J# L- a
    variable/1..2/:x; 9 j% Z! p$ \8 l/ k7 o# [
    S_Con_Num/1..4/:g,dplus,dminus; 9 m; y% U0 o: g
    S_con(S_Con_Num,Variable):c;
    6 \! r- J: p8 |% G/ S6 O$ jendsets ' G. |! ^/ r7 k: a  E
    data:
    9 o" W) N# l# f4 F' U: fg=1500 0 16 15; 6 y, h0 a8 Q) y
    c=200 300 2 -1 4 0 0 5;
    + N# M- x2 O) f% Jenddata
      M5 \* f7 v/ G( W5 Q8 _min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; ) C0 {" k' N9 n# v
    2*x(1)+2*x(2)<12;7 i9 T" Y9 P$ p; {5 m& s% E* l
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); 6 R% s  x# F; ~9 Z7 r7 _) Y4 f
    dminus(1)=0;!一级目标约束; " s$ ^3 J4 T/ i5 z  O9 {7 v
    dplus(2)+dminus(2)=0;!二级目标约束;
    . N' u& y# S7 h2 xend
    8 ]- U. K* c5 [) }& q8 l; ?7 m" {+ p% F& F$ p
    目标函数的最优值为29,即第三级偏差为29。
    - k: c& ^. z1 b3 N0 A
    # u' T& Z# A( z分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。4 [8 Z' [+ O8 `( ]
    1 ^7 r' Y! a+ W; ^" e
    上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。
    , u  R: _; g, w
      \# p' k; O* g+ _- v3 N2 }: [例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。) T+ D+ p3 G* O9 X; @
    2 W- L% C/ k! c: i: `5 A7 }
    model:   S. p: p9 B+ d& t* F' J
    sets: . H* ?/ Q) i2 B% {% B4 Z8 S
    level/1..3/:p,z,goal;
      h9 r5 @8 ]# @variable/1..2/:x;
    ' f9 Y% H. }) L! wh_con_num/1..1/:b; & y, i! `% m0 U6 J& N! K" Y; I. [
    s_con_num/1..4/:g,dplus,dminus; 5 M) @" I; K) {
    h_con(h_con_num,variable):a;
    6 _7 \/ h8 g# x! r* Qs_con(s_con_num,variable):c; 5 l& h* o% Z6 J4 G
    obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus; 5 d3 ]2 Q2 h) ^- g% F/ Z/ Q
    endsets
      j% l" U& B! `+ |7 U2 u. Ddata: 5 t1 [( g  G5 K6 X# z/ _9 Z% N
    ctr=?;
    . Y! A* O! I4 C5 E* i; F# a/ }goal=? ? 0;
    2 ?, o5 Z* ^% y6 Gb=12;
    - T8 T5 k4 o8 S; o0 tg=1500 0 16 15; 9 t: n+ J/ }& }( t8 M$ P
    a=2 2; 2 B! j' q8 s" @! t4 a1 J; |1 U
    c=200 300 2 -1 4 0 0 5; ) l' Y+ w5 D+ T. C& B5 I% P
    wplus=0 1 3 1; 4 Q% g: U5 q% _3 ^+ c& L8 p$ G% ~
    wminus=1 1 3 0;
    1 z3 ~7 K: L2 \4 ?) t8 ~6 t  fenddata
    - a( ^7 B' n/ B% {& x* ?min=@sum(level:p*z); 0 \2 o) m; K4 g! m* c
    p(ctr)=1;
    3 e5 l6 i1 w" O1 P$ E, D@for(level(i)|i#ne#ctr:p(i)=0);
    2 z1 A! S- C8 g8 E( Q' h@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)));
    / V0 r' c4 A8 |end * b' e4 J; l4 U" Y
    3 E+ b  l, ~  l( o% {

    3 s. _: j/ F% O5 m) v8 Q3 |
    + Y1 I8 |5 A; i' G. i
    . {6 y' K3 N. |4 D1 A/ a; I* A& Y* P
    4  多标规划的 Matlab 解法

    多目标规划可以归结为

    ( t2 q, ]& e0 W% d- u

    7 L' d- d3 l$ }1 M1 f: u$ a- j$ }/ b6 z
    [x,fval]= fgoalattain('fun',x0,goal,weight)           : g+ s; U8 ]) [6 C& e' F% u% @
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           
    ' H/ D7 ?7 H7 u[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    . \& o3 c/ \, ^+ h[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) # p) A( @' d" Y+ k7 I0 }* Y: h

    ( w* V; p) ?" D4 h; g1 {6 t
    9 p" J& W9 m3 w- t- s要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。0 C# P2 ?0 e! z6 A' B" h3 Y
    例 5  求解多目标线性规划问题
    . \) N) O( E* W8 ]" J/ Y" P+ l* W$ z# B$ F+ k, X' }

    5 D! ]4 D3 f" h
    & h% ~# L3 ^( d& P解  (i)编写 M 函数 Fun.m: . \; B5 x; d" K" j& V9 g
    / G3 d2 Z: [# M( Q# h% D7 M: H
    function F=Fun(x); 4 n7 ~4 @" o! w! d

    4 A" W# n, T) Q' O& v) YF(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4); 5 |, c+ B0 D* _  U! x7 D

    8 c: E& E/ ]1 I; V! h( oF(2)=3*x(2)+2*x(4);
    % G( e/ ]; V* ~& W# W
    ' M  H* A( N" _8 U(ii)编写 M 文件 " a- y; d' U, U

    ! X- R+ d- N  e1 _$ ha=[-1 -1  0  0   
    - `; M2 P( v2 i) v) O   0  0  -1 -1    " }+ N" z) R. H2 I2 R; J
       3  0   2  0   
    8 g& c5 e2 C. g) L+ ~$ m4 }   0  3   0  2]; ! R0 U  m3 F/ l/ G
    b=[-30 -30 120 48]'; ' {- m7 \& B! z  _; o
    c1=[-100 -90 -80 -70];
    5 \) H% c$ d" k/ N2 t2 }, }c2=[0 3 0 2];
    - X; K; ?4 S5 f0 ~[x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值 , j% ~/ p0 P# X7 W
    [x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值 : H9 B$ s8 n! S9 A
    g3=[g1;g2]  %目标goal的值
    . F3 P6 U  M! H1 s9 `: [[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1))
    ( |6 `1 Y2 B" E8 N9 g* c%这里权重weight=目标goal的绝对值
    - |- g4 b9 @; P' Z- F
    , Y' F# ~; o: T: N& P) O( H0 C$ k- ]

    就可求得问题的解。

    习题- O2 L) _7 |" D9 ]' s) T

    ! ]. c. v! e; ]: A$ h& ~8 h
    4 `* I9 E/ v5 K5 i3 \, X————————————————
    ) g& c: P5 y5 k5 n, h/ `版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    # m0 \( G& k% ?  y. X8 x原文链接:https://blog.csdn.net/qq_29831163/article/details/894889322 K6 r2 K* c# s2 C! w6 `

    ' p5 V( ?4 R6 L2 {( `8 b' [$ }# B( l- ~; o& e  U; 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-4-15 17:52 , Processed in 0.632165 second(s), 51 queries .

    回顶部