随便发一个sudoku的gams代码。最主要的是请大家理解set 里面mapping 的写法。2 v w) c4 @2 V; {
Sets r rows / r1*r9 / ( }. D" m& \0 j0 U- x c columns / c1*c9 / " l& b5 m! q! m+ z+ [ b blocks / b1*b9 / ; G; e& b% B2 ? J v values / v1*v9 / " g1 b* h, W2 t2 E" O# V br(b,r) / b1*b3 .r1*r3, b4*b6 .r4*r6, b7*b9 .r7*r9 /) K5 ]6 K. a3 O
bc(b,c) / (b1,b4,b7).c1*c3, (b2,b5,b8).c4*c6, (b3,b6,b9).c7*c9 /9 ?2 d1 g: f5 e
brc(b,r,c) block definitions ; 2 ?& t! B* m2 e, ` x) H3 [ % `/ c U3 [6 ^( r Bbrc(b,r,c) = br(b,r)*bc(b,c);$ |8 S" i- J+ X& G# R7 t+ j! _
9 U8 ^: }$ k) ^' |Table problem(r,c) Hard problem with non-unique solution 9 G! [! c& W1 H5 k) k c1 c2 c3 c4 c5 c6 c7 c8 c94 v9 O1 R# p8 O# H
r1 2 6 7 1 c- N% @3 ]" Q6 dr2 6 2 3 }2 ~) T$ j# L3 b8 Xr3 4 8 12 F5 u+ ]" E! H( M! @* ?4 P/ ^
r4 5 9 3 4 O: J: }7 {2 F# ^2 d7 @& A2 nr5 3 5 ; r* c9 A3 [" J$ qr6 2 8 7 7 F8 t# p; @, t+ H, zr7 11 B0 K3 }9 g- l2 h
r8 7 8 69 r& p: x5 P4 A0 }
r9 5 3 8 ; / H5 Z' G0 a* L. D) R ( d9 K4 [% P# Y/ K6 P2 m8 C' p/ P! T1 h" a& L o; e7 u& a' g
Binary Variable X(r,c,v) assign value to cell (defined by row and column);) p5 @+ ^# h0 u; E' }
Variable W objectiv value - anything;8 t& z& V. F& H! v# x
- g1 F. O, w9 b! t, f; Y5 W( G' b7 Yequations eq1(r,c) exactly one value for each cell7 _/ ]# a6 ^" q! a/ q" F
eq2(c,v) column entries have to be unique& l) L, K% F9 P3 u4 A9 Y
eq3(r,v) row entries have to be unique7 s& [$ C& a9 i+ t9 ]0 B
eq4(b,v) block entries have to be unique' {, n8 u6 k" R/ |/ _) a
nobj definition of objective - anything;: ]! q* y& [0 s7 k% P
+ ~7 e( p, `5 v6 xX.fx(r,c,v)$(problem(r,c)=ord(v)) = 1;, @$ M$ k0 D" L' \: I. J' h. L
$ w: [ M4 \% r, H" I7 @& L
eq1(r,c).. sum(v, X(r,c,v)) =E= 1;* z% Y/ M! Y$ q$ c
eq2(c,v).. sum(r, X(r,c,v)) =E= 1; % k6 _4 f9 }- g% Neq3(r,v).. sum(c, X(r,c,v)) =E= 1;9 \; m0 p) c" N7 ]+ x" q5 D+ L
eq4(b,v).. sum(brc(b,r,c), X(r,c,v)) =E= 1;* G; T* j. U4 \6 a
nobj.. W =E= sum((r,c,v), X(r,c,v));' a$ }; T( Y/ A' ~
' j0 O- O" d* M# z- Q( Q9 O$ A
model sudoku / all /; ) p: c" o2 N8 D z* Y4 t 4 w7 ?: A3 s: T+ ~+ ?& d$ @$ ?" ~; p5 X9 z7 ~solve sudoku minimizing w using mip; # _ Y% m+ |1 a8 v4 R. r, q1 I% q最后说一句,其实这个模型不用求什么最大还是最小值,只要得到一个满足所有constraints的feasible solution 就可以了,所以nobj的注释写的"anything"。