数学建模社区-数学中国

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

作者: huashi3483    时间: 2009-11-14 05:19
标题: 【转载】SUDOKU 游戏的GAMS 版本
随便发一个sudoku的gams代码。最主要的是请大家理解set 里面mapping 的写法。
9 r8 I! g; u9 j5 nSets  r  rows    / r1*r9 /
5 p, P3 Q* u* A      c  columns / c1*c9 /
  z5 z6 e' b! k- c, r( O      b  blocks  / b1*b9 /0 y  i7 w, w! C4 b8 u) y
      v  values  / v1*v9 /) Y  s% d5 J4 C0 q
      br(b,r)    /  b1*b3    .r1*r3,  b4*b6    .r4*r6,  b7*b9    .r7*r9 /
9 f5 `# n6 X! M% `+ Y      bc(b,c)    / (b1,b4,b7).c1*c3, (b2,b5,b8).c4*c6, (b3,b6,b9).c7*c9 /; b/ |8 f+ X# T( A2 g
      brc(b,r,c) block definitions ;7 j' q( x- Q% f$ n
0 V4 `0 ?( {6 ^
brc(b,r,c) = br(b,r)*bc(b,c);5 R, z: y  M7 g
* i7 b- B7 w; S% j3 `
Table problem(r,c) Hard problem with non-unique solution
# G5 n$ M! j( [: E    c1   c2   c3   c4   c5   c6   c7   c8   c9
+ B* z' S! t& ~# e+ T# g# B, ir1   2              6    7
; Q$ n2 a4 ~6 ^( p# G9 Tr2            6                    2( o+ U$ x$ r% b* y5 ~8 @, L! ^1 K
r3   4                             8         1
+ _* j1 _4 s. Mr4   5                        9    3; d8 L1 M- y' G/ j
r5        3                             5
6 ^4 W! ?, k! Y& or6             2    8                        7
7 A  y3 H5 e2 w1 U6 J  {- d0 u! Dr7             12 ~/ z, B/ i0 o# B7 _3 g2 w, \6 Y
r8   7         8                   6' q+ E8 w( ]' y- D/ F: D, b! W
r9                       5    3              8 ;* o& e* a- q' ~  h

" a$ ~7 c: C* T& p7 ^& d  w* ?& P8 L! Z. D- {: O2 m
Binary Variable X(r,c,v) assign value to cell (defined by row and column);3 @* I' A2 L5 F+ ~$ Y
Variable        W        objectiv value - anything;- H6 }0 M0 o. v, e" b2 t3 L4 c& Z. }

' C* s, F; G6 r& l2 R3 tequations eq1(r,c) exactly one value for each cell
/ I) d  ~0 A! j6 X          eq2(c,v) column entries have to be unique
) T( s$ T; R# n$ F          eq3(r,v) row entries have to be unique3 s. D) Z# `1 n8 t: s5 @
          eq4(b,v) block entries have to be unique  o1 h; T0 w5 g& F2 B
          nobj     definition of objective - anything;6 f/ ~' u  Z. B: V* o8 `1 I/ n

+ b% V( a" g* H; H6 vX.fx(r,c,v)$(problem(r,c)=ord(v)) = 1;; C) `0 C0 m- T) r
: Z! k$ o: F! z' S1 t, H( A
eq1(r,c).. sum(v, X(r,c,v))          =E= 1;
+ w0 b4 a1 u# @3 `; e6 neq2(c,v).. sum(r, X(r,c,v))          =E= 1;
! O2 }: i" N) _& x; qeq3(r,v).. sum(c, X(r,c,v))          =E= 1;: R/ f. N! D9 S' u
eq4(b,v).. sum(brc(b,r,c), X(r,c,v)) =E= 1;
  L( G2 u* h3 P0 N7 s( t7 t" j) Bnobj..     W =E= sum((r,c,v), X(r,c,v));% s/ |, ?3 o5 J) W3 w

4 j1 g1 Z- W& F6 `model sudoku / all /;
3 @1 f$ n3 ~& G* G$ t, Q2 l7 y' q; A- u; W. X! n- i8 P. S8 N; H
solve sudoku minimizing w using mip;" J$ I* y/ @' E
最后说一句,其实这个模型不用求什么最大还是最小值,只要得到一个满足所有constraints的feasible solution 就可以了,所以nobj的注释写的"anything"。




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