QQ登录

只需要一步,快速开始

 注册地址  找回密码
查看: 2427|回复: 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.线性规划的局限性
    : ?( Z( M$ I( W只能解决一组线性约束条件下,某一目标只能是一个目标的最大或最小值的问题。
    / |; o7 t  H2 F2 P% S
    4 s: l* T, g5 G$ T) {, c5 C 2.实际决策中,衡量方案优劣考虑多个目标+ R8 a# z( S1 n$ Q  O
    这些目标中,有主要的,也有次要的;有最大值的,也有最小值的;有定量的, 也有定性的;有相互补充的,也有相互对立的,LP 则无能为力。* M# K' q9 |8 M0 ?
    ( ~7 j, Y- i1 n% c# J
    3.目标规划(Goal Programming)
    % ]$ P3 T. x7 T美国经济学家查恩斯(A. Charnes)和库柏(W. W. Cooper)在 1961 年出版的《管理模型及线性规划的工业应用》一书中,首先提出的。
    8 i1 h3 S" }- P
    9 _' y# g6 `) |1 ^/ c' o0 Z" p" \4.求解思路  T5 \; n% e5 p' i/ F6 ?0 R* |
    (1)加权系数法
    $ g3 y: @$ X+ g! A, k! w为每一目标赋一个权系数,把多目标模型转化成单一目标的模型。但困难是要确 定合理的权系数,以反映不同目标之间的重要程度。8 a4 B2 h6 r- C2 |5 e
    4 p. |: W1 e- ?/ p$ c, u
    (2)优先等级法
    9 K0 x9 B* |0 z, q- R将各目标按其重要程度不同的优先等级,转化为单目标模型。0 b' J, C% E( g
    % ?  F( o  L% l' f! w" j
    (3)有效解法% u& ^/ @% e" B3 F( _" t7 W/ e# R
    寻求能够照顾到各个目标,并使决策者感到满意的解。由决策者来确定选取哪一个 解,即得到一个满意解。但有效解的数目太多而难以将其一一求出。 / y- K, F/ v( p
    ! b/ g! y+ z$ M! r. t* z5 G
    2  目标规划的数学模型
    / |7 ^0 z( m3 u8 n/ H为了具体说明目标规划与线性规划在处理问题的方法上的区别,先通过例子来介绍 目标规划的有关概念及数学模型。  R3 ^/ k0 M9 e) p' h
    ; a0 {' H! Q- _, \
    例1  某工厂生产 I,II 两种产品,已知有关数据见下表 ,试求获利最大的生产方案。9 n1 ^# S5 Q' |# a2 V/ Y

    5 L/ y( n* ?& [0 G2 b; a* X% @& E5 l) k/ z

    , v$ p, S0 L( S3 N解  这是一个单目标的规划问题,用线性规划模型表述为: * m# O! y1 s- g9 R$ n5 `: T7 U" C
    6 @) V$ @% `  r! p4 v

    : Q" _* u5 D6 M' C4 b* A" s. \6 k2 \' {: t! E
    但实际上工厂在作决策方案时,要考虑市场等一系列其它条件。如
    + w+ B) C' Y% N! {: T& s
    , s8 k) }/ R+ S9 x- ~4 k' a(i)根据市场信息,产品 I 的销售量有下降的趋势,故考虑产品 I 的产量不大于 产品 II。
    0 b& p# D7 S! b7 A" d
    8 Z" e) S  a" r$ D) a( n$ T(ii)超过计划供应的原材料,需要高价采购,这就使成本增加。, g. r1 Q, ]! z5 N: m* l

    6 i. b' h: o3 L2 v' J% U% \' S' Z0 @(iii)应尽可能充分利用设备,但不希望加班。 / h9 ?* I" u. ?' |

    / _* D- D0 N8 q" M. m( c(iv)应尽可能达到并超过计划利润指标 56 元。
    1 \( `5 C. k' `  Y6 \# h/ \8 U# v* J8 J& Z. I4 o+ u
    这样在考虑产品决策时,便为多目标决策问题。目标规划方法是解决这类决策问题 的方法之一。下面引入与建立目标规划数学模型有关的概念。 . V4 a6 v# i! ]0 C

    / o$ ~) M6 J) ~- E3 Q0 O1. 正、负偏差变量 : n/ H/ Q. T5 @$ P3 b+ {' s

    & D6 w1 ^4 y2 R6 h, M% J4 G
    . I2 s0 L# t2 B7 _2 G5 N( Q1 u, t7 R  @$ P+ m
    2. 绝对(刚性)约束和目标约束 $ Z  I. l' c/ F/ x& C* M! d
    % r% Z- b4 ]- M
    7 r# g; x- b) t: r1 k

    3 g- T, g- w: G1 |  Z3. 优先因子(优先等级)与权系数
    7 w5 i2 S% X5 R$ q1 K
    ; g" U  V" s% ^' z1 @' `5 c, Z6 A: b
    ! f( Z" c- ~( P! F$ a

    8 n, H/ r3 A4 G* x4. 目标规划的目标函数
    * Z0 c+ D7 ]1 F7 L% [) }0 Q. a: T( x; I

    , @% r! O/ u  T. J
    9 r- s* n5 w" @3 i; Y3 P( x对每一个具体目标规划问题,可根据决策者的要求和赋于各目标的优先因子来构造目标 函数,以下用例子说明。 . h& @9 U: C" s- h% m4 }( ]1 @
    : ~9 G/ Y7 D8 U( m
    例 2 : 例 1 的决策者在原材料供应受严格限制的基础上考虑:首先是产品 II 的产 量不低于产品 I 的产量;其次是充分利用设备有效台时,不加班;再次是利润额不小于 56 元。求决策方案。 解  按决策者所要求的,分别赋于这三个目标  优先因子。这问题的数学模型是  
    9 j, ^1 m8 g% Q8 n+ c- y" E; r0 [$ I1 W6 T* X

    % S5 e5 C# |, A2 ]1 H: ~3 J- z- }+ a; _
    5.目标规划的一般数学模型
    ; o: G- P9 i& l5 x' a9 l
    . o) v5 I% z: |0 h# W2 v9 R% `3 c0 v, |& F- Y
    6 p. r+ H# |$ |: ~9 V

    % f5 T' Z9 `9 [) p) b7 ~: Z建立目标规划的数学模型时,需要确定目标值、优先等级、权系数等,它都具有一 定的主观性和模糊性,可以用专家评定法给以量化。
      o: K( d/ R0 m
    # Q0 N& m/ f* _9 Z: R8 h- O, c3  求解目标规划的序贯式算法
    - r- j8 B& {5 Y" n: U, ~0 }序贯式算法是求解目标规划的一种早期算法,其核心是根据优先级的先后次序, 将目标规划问题分解成一系列的单目标规划问题,然后再依次求解。
    ( A+ b8 W7 J5 g7 f. F: [: ~- f
    ( M% H9 @1 P  B7 f0 ?6 Q2 `; u- _1 i. R/ \
    # d6 l! U. H  Q* M% h5 ~& {' _1 y, V
    4 F' @  L) i3 N# r& T) h) n& m

    # B  ?+ t+ Y; {注  此时最优解的概念与线性规划最优解的概念已有所不同,但为方便起见,仍 称为最优解。
    ( D2 J' C4 y. Q' R  t. R) b
    ) S% R$ ~# K& ^! Q4 O例 3  某企业生产甲、乙两种产品,需要用到 A ,B ,C 三种设备,关于产品的赢利 与使用设备的工时及限制如下表所示。问该企业应如何安排生产,才能达到下列目标:) p8 r5 {. _3 q) |$ n
    / t5 B1 ~  z7 o  `
    ) [9 C6 q3 F1 X
    ) Q( C  r7 |; V# s& G( L
    (1)力求使利润指标不低于 1500 元;
    4 J+ r" W" y/ @7 m- g
      y* l) Q; m' g6 P(2)考虑到市场需求,甲、乙两种产品的产量比应尽量保持 1:2;% E7 u5 o" }% a" R' ?5 c

    ( S. ?* F1 F: Q9 Q  ^9 R(3)设备 A为贵重设备,严格禁止超时使用;+ v4 H; ^8 ~+ l1 b3 i3 j$ p6 B

    " v* e) |2 E' }# B0 }; _: K0 b(4)设备 C 可以适当加班,但要控制;设备B 既要求充分利用,又尽可能不加班。 在重要性上,设备B 是设备C 的 3 倍。3 K$ o' u% ?( [1 i" c2 X( k% S% A
    7 d, G" I4 c5 @* u
    建立相应的目标规划模型并求解。+ X) C0 x: Q% |% q* Q% ]/ T

    ( p5 ?# r# u/ m; M解  设备 A是刚性约束,其余是柔性约束。首先,最重要的指标是企业的利润, 因此,将它的优先级列为第一级;其次,甲、乙两种产品的产量保持 1:2 的比例,列为 第二级;再次,设备 B C, 的工作时间要有所控制,列为第三级。在第三级中,设备B 的 重要性是设备C 的三倍,因此,它们的权重不一样,设备B 前的系数是设备C 前系数 的 3 倍。由此得到相应的目标规划模型。
    , f) y1 G- f0 h$ I9 f# k& m+ P. j. q1 Q$ O: H* K4 d6 x# D

    - U* {, w6 m, n! G0 F7 B& a4 q" T# e( |$ h* i6 E
    序贯算法中每个单目标问题都是一个线性规划问题,可以使用 LINGO 软件进行求 解。 求第一级目标。LINGO 程序如下:
    2 s6 ]7 j* p8 |$ _: n( O2 B- g. O2 F
    model:
    . x5 X- f; z! _2 N. O/ B! L6 W$ X% F( ]sets:
    # y8 C3 {0 I1 svariable/1..2/:x; ' ?# U7 O8 G5 B/ I9 s" ?; n3 [
    S_Con_Num/1..4/:g,dplus,dminus;
    5 J: Q: Q4 C" }5 u% |/ k) [; KS_con(S_Con_Num,Variable):c;
    0 U5 [: f; b+ w( C. ]6 [endsets 8 `$ v$ @. G7 w7 N5 b* ^9 B% o
    data:
    4 K, b/ D/ X) R; W8 t9 ng=1500 0 16 15;
    ' @5 t. [3 c' V. z  s& F4 l. Pc=200 300 2 -1 4 0 0 5;
    4 ^$ f3 V, [' e$ {enddata
    " v9 b( }: C1 \$ \' N- b, xmin=dminus(1);
    6 e3 s3 p2 @( d1 a1 j, V/ R2*x(1)+2*x(2)<12;
    $ g8 {6 f/ o3 R: Z/ w- ?# i% ]9 J( g* G@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); ; C: t; v: X  J# _3 o, D% r
    end
    8 Y# s! j5 R% h$ [# S/ q$ S  P8 ^

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

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

    model:
    + a! H# t4 Q! w) c- O9 a. ~sets:
    ; b0 G5 @0 x; L6 V6 T6 Yvariable/1..2/:x; 3 S, d& i7 ]5 C; w+ q
    S_Con_Num/1..4/:g,dplus,dminus; 6 {& Y' v, h3 h0 ?
    S_con(S_Con_Num,Variable):c;
    8 _+ I/ ^  t, e* `. Y! Qendsets
    ) B, {7 a( l$ m( a: f, [+ Sdata:
    ) O( s7 T6 [8 C, l) w+ p, Lg=1500 0 16 15;
    9 W9 c. c+ Z6 Y9 M8 N) rc=200 300 2 -1 4 0 0 5; : \$ f: z& ?5 ?9 t6 }
    enddata , U2 H; M1 \3 z1 y4 l
    min=dplus(2)+dminus(2);    !二级目标函数;
      |$ u' a" A+ p' q6 f2*x(1)+2*x(2)<12; ) T8 j+ P2 u1 \
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); ( [- Z8 \% B, K( ^& Q+ z# O
    dminus(1)=0;!一级目标约束;
    - N0 J6 V# B) V/ `9 Y@for(variablegin(x)); " F9 B3 N: P+ {
    end
    ; F/ d% i2 {# m& c; p
    ! `2 `' u# Q2 M) u8 m4 J* C求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下: 9 k8 {! R$ r" }4 z  H! {7 A5 \

    # g3 o. @$ X' H# q( rmodel:
      O% {  t# e$ H! _$ _# f  P# K/ Xsets: 1 U" ^  W7 `" b+ f
    variable/1..2/:x; & e: ~& P' y! i
    S_Con_Num/1..4/:g,dplus,dminus;
    4 T1 ]7 e+ l7 ^+ U8 ?0 uS_con(S_Con_Num,Variable):c; " ~1 p1 ?  G  ~7 P/ p2 g  c
    endsets
    ! ~8 k' d: }; o4 g( ^- ?data: % f  \$ X: L: S/ K
    g=1500 0 16 15; . w4 [9 a) e0 U, l& C# E
    c=200 300 2 -1 4 0 0 5; % U/ n% M& t8 p$ Z
    enddata + a5 m$ L# X- ^# G* m5 k
    min=3*dplus(3)+3*dminus(3)+dplus(4);    !三级目标函数; : f* u0 w. u' K/ t. M- s5 G
    2*x(1)+2*x(2)<12;: Q- G9 a2 b/ D2 ]5 l1 c* Y& A
    @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i));
    7 r3 `8 E3 ^. p- f+ n. K: idminus(1)=0;!一级目标约束;
    9 h8 u+ X- r- C# u$ W" {9 Bdplus(2)+dminus(2)=0;!二级目标约束;   h& ?- y, ^. z9 r
    end- m. Z& q7 |: f0 ?& I

    / i) e4 u  P. G  n6 ?7 @目标函数的最优值为29,即第三级偏差为29。
    . a  G( J! T) N
    : a4 ^$ P# T# V! T- O+ W3 I分析计算结果,  ,因此,目标规划的最优解为   , 最优利润为1600。
    , @$ |' L+ w% U+ s; w0 z7 o# h! ~  \  t; {( n# V* @2 h
    上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。& ?. A$ {6 F& ?/ T& R

    4 H+ I6 Z; ]+ k; ]6 X: r1 a1 `- P0 ?例 4(续例 3)  按照序贯式算法,编写求解例 3 的通用 LINGO 程序。! f. Z* P! q  r/ I# M) Z- |
    & u4 X- n! O3 T
    model:
    ( I& t/ G. d$ l8 C: P2 \sets: ! |$ _! y, z  K7 l; l& J; q
    level/1..3/:p,z,goal; ' K) I/ E1 E! |
    variable/1..2/:x;
    . Z. Z' I& j% I" U- u" kh_con_num/1..1/:b;
    8 l, p0 q6 J8 r* l, Ns_con_num/1..4/:g,dplus,dminus;
    : m) Q: w7 N/ U! j" @h_con(h_con_num,variable):a; ; p: O, M5 J# b( g6 e* x7 f
    s_con(s_con_num,variable):c; 0 K- K6 q( f( C: }! ^
    obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus;
    ' a2 x. y1 V2 i% z9 `endsets
    * D6 N/ X, p, M  `: qdata: : i6 `, E8 ~7 [: _) E) x5 c$ N2 h
    ctr=?;
    6 z2 x! e, X' o! egoal=? ? 0;
    5 F. @9 \; `2 H) \. N0 Rb=12; ) y& v. P" K% N3 y8 c
    g=1500 0 16 15;
    5 ~* E0 h: g+ w2 u. m$ x1 Xa=2 2;
    0 z" v; m* ^/ j6 Xc=200 300 2 -1 4 0 0 5;
    ( r8 ?6 T- m+ X/ h9 R/ ywplus=0 1 3 1; - d* U) g- L0 {/ ?  Q% e
    wminus=1 1 3 0;
    : {# l7 G  i" T$ P% Y: wenddata
    : E5 S: ?; K; y& y! K$ pmin=@sum(level:p*z);
    * x* t& S5 j+ q# U3 @. yp(ctr)=1;
    ) Q, h" s; [" b7 h( e  \* r@for(level(i)|i#ne#ctr:p(i)=0);
    2 S7 A+ J0 }- }/ g@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))); $ `6 B+ Q  L! J4 Y
    end 6 L5 c7 ^7 A6 b! q0 G5 ]$ N
    ; }1 H1 [, w2 R+ X
    0 P. I# w7 s3 d
    2 x" E& r& z5 N% T: c
    ' e" J' k1 l+ Z  J, |; m( T) p
    $ p* {6 K! n+ n& n
    4  多标规划的 Matlab 解法

    多目标规划可以归结为


    * ~" T) L3 z# u
    " w$ _+ l$ _, @5 |. e4 c2 {% r8 M5 G" e5 @6 Y* N5 u
    [x,fval]= fgoalattain('fun',x0,goal,weight)           
    8 t: ~2 n! ?( s. m4 R6 z$ G[x,fval]= fgoalattain('fun',x0,goal,weight,A,b)           . z) S! x) T6 b% N$ C( F" }" X
    [x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq)           
    6 n6 y; L. z" H6 A[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon)
    . d) z+ \9 N1 k8 }* ^, w
    ( o2 Q& ]  t: R5 e" B. f- U
    & p# z4 x! B  p+ Y; ^4 B# i! y要完整掌握其用法,请用 help  fgoalattain 或 type  fgoalattain 查询相关的帮助。
    5 ]  \3 Z. x% e9 s  Y3 s 例 5  求解多目标线性规划问题 9 P7 O# C) |/ J$ u

    ; i' w: P( z4 g" {7 N" }! `- v; D1 m7 m. k5 M
    $ t& _; p" T3 N! `+ S
    解  (i)编写 M 函数 Fun.m: , _* R+ i# v; [# k* S" F$ Y+ \
    " W& Z) i# g& h' F5 f
    function F=Fun(x); / I7 ^( D8 G& [1 C9 E7 }: n7 |
    2 N' g9 e; Z# C+ I* O! l2 H
    F(1)=-100*x(1)-90*x(2)-80*x(2)-70*x(4);
    4 H3 u4 Z- E, l# D6 G% v' |* A- {% v/ w
    F(2)=3*x(2)+2*x(4);
    " _, Z9 t7 I' K! c, B( Q9 n5 `: e' T
    8 m$ Y2 Q# n5 A, i7 Y(ii)编写 M 文件 9 J0 F9 y. U8 ?& x" H5 m

    3 A' E# p/ Z  `7 I9 Y) v* Q" \1 H# la=[-1 -1  0  0    & T2 C2 J  K8 k$ c( ^6 q) H4 u
       0  0  -1 -1   
    + S' F+ K% t0 @* [( ?4 e; f+ q   3  0   2  0   
    1 M8 Q  |* _% [8 }   0  3   0  2]; % k/ j* f) P) {# T3 W
    b=[-30 -30 120 48]'; . w2 [& H/ f2 {
    c1=[-100 -90 -80 -70]; 1 g# X! A8 r* B8 {
    c2=[0 3 0 2]; " e( d. K3 y9 o4 n5 ^. |) m
    [x1,g1]=linprog(c1,a,b,[],[],zeros(4,1))  %求第一个目标函数的目标值 " t- I' W5 `3 C1 d4 N8 O
    [x2,g2]=linprog(c2,a,b,[],[],zeros(4,1))  %求第二个目标函数的目标值
    " s3 P& T  B/ u% ?7 gg3=[g1;g2]  %目标goal的值
    8 S, t7 x) t" {9 D5 ?, `[x,fval]=fgoalattain('Fun',rand(4,1),g3,abs(g3),a,b,[],[],zeros(4 ,1)) 5 J# A+ g" n1 m* |- u
    %这里权重weight=目标goal的绝对值
    . k$ d1 e: `& k7 g. Q. Q, ?
    $ k+ @( o7 x7 P% h$ _

    就可求得问题的解。

    习题
    & h( t2 U& z& O; v9 t& K7 n) U" q- \8 b4 s
    # Y( A" b% W% y( H8 D& V1 _) Y
    ————————————————
    2 f) F5 C% u7 w3 d( X- I  ?版权声明:本文为CSDN博主「wamg潇潇」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。  e: y4 ?  i% z
    原文链接:https://blog.csdn.net/qq_29831163/article/details/89488932' c- f5 x  T) [" ?8 o

    6 p9 }$ M# r; J; s4 R6 m. F9 s9 @1 x. G* w
    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 04:54 , Processed in 0.530703 second(s), 51 queries .

    回顶部