数学建模社区-数学中国

标题: 【转载】SUDOKU 游戏的GAMS 版本 [打印本页]

作者: huashi3483    时间: 2009-11-14 05:19
标题: 【转载】SUDOKU 游戏的GAMS 版本
随便发一个sudoku的gams代码。最主要的是请大家理解set 里面mapping 的写法。
5 @4 b. A- i, f6 G; H$ mSets  r  rows    / r1*r9 /
- k6 ]6 H" ^1 O5 q% r      c  columns / c1*c9 /
5 s$ X) ^: W( F' Y0 `2 u      b  blocks  / b1*b9 /
1 p- O4 M4 l% m$ C3 b& V      v  values  / v1*v9 /
4 {$ J, A: D; V5 f! I, j      br(b,r)    /  b1*b3    .r1*r3,  b4*b6    .r4*r6,  b7*b9    .r7*r9 /3 y! Z1 K" k- R' j0 H6 q8 w& V1 s
      bc(b,c)    / (b1,b4,b7).c1*c3, (b2,b5,b8).c4*c6, (b3,b6,b9).c7*c9 /, z- p! S3 c% \& d# s3 W  @
      brc(b,r,c) block definitions ;4 [) D4 l) ^" L7 D9 K2 A
) N! _4 @. [3 G# i' A5 @% Y3 p
brc(b,r,c) = br(b,r)*bc(b,c);- l; ]' G# g9 g3 f  D( ~3 ?0 Y

# z! Z" F1 r- C3 \, x; \Table problem(r,c) Hard problem with non-unique solution0 n" m- G% _- v% P6 `4 w& s0 `
    c1   c2   c3   c4   c5   c6   c7   c8   c9' l% _: G& D# I0 d: ]& x
r1   2              6    7
; j4 k( V% A3 q. O  Rr2            6                    2
- d4 }  M: P, Nr3   4                             8         1  E2 F0 _( @6 a% I
r4   5                        9    37 K% Z0 C5 W9 T& R. ~; z
r5        3                             5
# p3 q& m- N, D" X" Nr6             2    8                        7# j$ C/ S5 y0 |1 w9 f
r7             1
8 B1 B% Z9 u3 H* m. Y+ p  v% o: e& Er8   7         8                   6: t( J9 E. m9 h0 [; B
r9                       5    3              8 ;" i8 g9 E( d6 n) L" ^2 _) C
: g# F' H. C8 S

9 M& K8 x- t& o+ j, N( d; fBinary Variable X(r,c,v) assign value to cell (defined by row and column);
1 M2 p+ c+ I6 l% d! lVariable        W        objectiv value - anything;1 B1 ?8 ]: f0 J! y! `! E& s

4 c. q% Y3 s, f6 J* P: o0 u+ hequations eq1(r,c) exactly one value for each cell
; s7 G% b0 j& }# h          eq2(c,v) column entries have to be unique
, l5 J' \& r* S" ~3 }          eq3(r,v) row entries have to be unique
5 y: A! {1 |# a  w6 ?; o          eq4(b,v) block entries have to be unique
$ y/ o  c# _* ?7 o( ~& }$ }* O8 I3 I6 H          nobj     definition of objective - anything;4 I# q6 B: K: _8 M

3 t# i6 O: y0 R# w$ lX.fx(r,c,v)$(problem(r,c)=ord(v)) = 1;* d; O) s9 T- x& Z; P2 Y

6 J5 `! ^$ ]1 M, q- }" X- n9 {' ]7 ueq1(r,c).. sum(v, X(r,c,v))          =E= 1;
1 ^4 ^: P, k- m. j4 o3 Yeq2(c,v).. sum(r, X(r,c,v))          =E= 1;
% L3 D1 [. Z$ neq3(r,v).. sum(c, X(r,c,v))          =E= 1;
5 ]9 s2 l( O. q- R5 [# t2 ~% u0 aeq4(b,v).. sum(brc(b,r,c), X(r,c,v)) =E= 1;, q0 B9 o$ Y# M$ `8 b; \' g* n
nobj..     W =E= sum((r,c,v), X(r,c,v));
) }4 r8 D6 d: @/ s/ u, d( ?
5 A5 c1 J. g: z9 S, `. w/ C7 ^. h6 }model sudoku / all /;
( }& I, p, ]# u! Z7 z7 [4 O# {. q3 O6 T6 N# }5 D7 m
solve sudoku minimizing w using mip;
0 a& Z: ^; X1 D) g  L5 P0 s' \最后说一句,其实这个模型不用求什么最大还是最小值,只要得到一个满足所有constraints的feasible solution 就可以了,所以nobj的注释写的"anything"。




欢迎光临 数学建模社区-数学中国 (http://www.madio.net/) Powered by Discuz! X2.5