model: 4 W; Z; D" l. j ^6 w
sets: 8 q! ^* w0 m p; r% Q" ~) K
variable/1..2/:x; 1 [9 c' c2 k3 d' i3 w/ U* n+ T1 {
S_Con_Num/1..4/:g,dplus,dminus; # L/ z! _; E# m& g% A0 O3 e
S_con(S_Con_Num,Variable):c; ; [) ?2 b& N0 ]9 A5 i* L
endsets 9 h+ I# N5 R( @ Q
data: # H& X, O/ o% ?- c7 G. [g=1500 0 16 15; - I6 Z& m& }3 l: }c=200 300 2 -1 4 0 0 5; ) D' w6 {" R# ~. Q d+ l
enddata % d7 f1 N7 T2 X- U. }min=dplus(2)+dminus(2); !二级目标函数; 1 N, m x7 b& V0 T/ d2*x(1)+2*x(2)<12; 1 L0 Y/ ~% ?0 d
@for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); ' p+ F' k( B8 A9 X5 W9 W' W
dminus(1)=0;!一级目标约束; + r* R# D$ R/ Q* O" m ?@for(variablegin(x)); # ?( p' ^/ X' _$ O+ hend 6 y7 w$ q, S2 u2 _
s5 @6 Q# ]0 X m
求得目标函数的最优值为 0,即第二级的偏差仍为 0。 求第三级目标,LINGO 程序如下: 3 K/ y \% b0 w8 o4 g9 h 0 w# d: C1 p6 J1 k' n/ M2 gmodel: & c& {" ?8 A3 k9 |$ p P. t% Usets: ! l) t( C! z2 @& qvariable/1..2/:x; ( j% _7 S* n; A. [1 N% \S_Con_Num/1..4/:g,dplus,dminus; % T+ f( M4 Q% p- g2 b. U5 @( `/ GS_con(S_Con_Num,Variable):c; # h+ y4 J+ F/ A G/ Y! q r) |
endsets : V7 g! ?; U2 J! e6 v5 ^( l
data: 7 X9 Q% v6 v& d0 x5 zg=1500 0 16 15; + m0 c5 u; G rc=200 300 2 -1 4 0 0 5; 0 x/ u3 t9 }5 g Q0 _enddata 3 r8 z# g6 p- k2 {: ~
min=3*dplus(3)+3*dminus(3)+dplus(4); !三级目标函数; + y7 z1 A- W0 P; C1 m5 Z) J- K# \& D9 j
2*x(1)+2*x(2)<12; 7 l( n% v9 M" R3 r# c @for(S_Con_Num(i)sum(Variable(j):c(i,j)*x(j))+dminus(i)-dplus(i )=g(i)); : H3 Z$ X; P& wdminus(1)=0;!一级目标约束; / v/ p0 B# D# h% Pdplus(2)+dminus(2)=0;!二级目标约束; 9 }9 l- K$ t1 \( ?0 m! I5 n2 oend + R. I* C% Q% ?0 i4 d0 Z( f5 v D1 f$ t/ k
目标函数的最优值为29,即第三级偏差为29。 k. N: H, `1 a! S/ ^ A4 p. t1 m' Q( z P* D8 D0 M$ J% h G
分析计算结果, ,因此,目标规划的最优解为 , 最优利润为1600。 2 W7 X. T6 j4 A * U: [, J% w& A! {上述过程虽然给出了目标规划问题的最优解,但需要连续编几个程序,这样在使 用时不方便,下面用 LINGO 软件,编写一个通用的程序,在程序中用到数据段未知数 据的编程方法。 ' i5 d7 ?( Z; l7 l: s2 E N# _8 P. U$ H- C6 T4 l" r( m例 4(续例 3) 按照序贯式算法,编写求解例 3 的通用 LINGO 程序。, `: h) u$ k$ X% e+ }2 C' I) V
4 ?2 A' t; A0 f& z) V' U
model: : F& Y/ B* M2 H- s) y0 c- N
sets: / R7 v p: T* W8 O2 r2 M
level/1..3/:p,z,goal; 8 O) e4 ?9 I+ Q Z/ [variable/1..2/:x; - } A' p1 B0 [, D+ g
h_con_num/1..1/:b; 7 q. n. Y. L/ D4 P0 y/ P- J4 N( js_con_num/1..4/:g,dplus,dminus; 2 I; b0 v( q, q
h_con(h_con_num,variable):a; & U% P/ F8 }! B
s_con(s_con_num,variable):c; 9 @, K5 }1 B" t; y7 `7 t& l4 Q
obj(level,s_con_num)/1 1,2 2,3 3,3 4/:wplus,wminus; $ y& g1 ~4 M* i6 c3 |/ Vendsets 3 ]- l* U% T6 s! }3 y% X7 R- f0 C
data: 0 ?: M, V" n+ t: u7 I; Q: a4 j; octr=?; 6 k S" J, q+ `2 n9 G$ fgoal=? ? 0; / O! n" p& H( d& F" @9 @- A
b=12; / i I0 {/ g. e2 t9 og=1500 0 16 15; * f6 D$ x! v4 }6 y3 g" P5 Ba=2 2; p2 `& j4 g+ T: X5 c$ j/ |4 J5 r0 Zc=200 300 2 -1 4 0 0 5; Z7 I! `/ ?! U/ l" S: j' Lwplus=0 1 3 1; " O" T" w) v6 g1 z5 awminus=1 1 3 0; # V) d- M& d/ X
enddata & G# e8 l% c6 Z& s. G% m5 G
min=@sum(level:p*z); 3 \, T/ O& R- r9 N7 |+ ?* I, i) Op(ctr)=1; 1 g5 {, m% ~7 i8 G/ Y@for(level(i)|i#ne#ctr:p(i)=0); + X6 D9 ]) o: |4 v( F9 W
@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))); & Y- \- D+ C. B7 Y& Y7 k+ F- D( D
end ( u( \9 K5 F5 L( P
8 w |: a3 G; ^+ ^3 E" j8 r" y$ C( p0 g
6 p! J( s1 a$ f. B F" c6 m7 J$ k4 l! s$ d* h+ n' Q
/ j3 t/ ~1 M5 l' d6 l) R; H5 c O4 多标规划的 Matlab 解法
多目标规划可以归结为
1 P& c( M4 h ]) x4 h, S0 e6 Q& f5 _1 v
! a7 z0 R& f. k0 W' i$ F# l( w[x,fval]= fgoalattain('fun',x0,goal,weight) - i( s2 T0 ]2 t# G! e
[x,fval]= fgoalattain('fun',x0,goal,weight,A,b) 1 z& Q, J: \, v) B( Q) F) S a7 u9 a. G/ ^4 A
[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq) 1 C$ \6 F% A8 M \9 M! X[x,fval]= fgoalattain('fun',x0,goal,weight,A,b,Aeq,beq,lb,ub,nonlcon) 8 d. w- o e, E
' v3 T F5 Z2 g t8 t4 v- I
5 h0 o: a7 |& l' t要完整掌握其用法,请用 help fgoalattain 或 type fgoalattain 查询相关的帮助。: ]$ N: ~; Z) B5 d( J+ c9 |
例 5 求解多目标线性规划问题 * M( J) v @7 c H9 s* @