数学建模社区-数学中国
标题:
【转载】SUDOKU 游戏的GAMS 版本
[打印本页]
作者:
huashi3483
时间:
2009-11-14 05:19
标题:
【转载】SUDOKU 游戏的GAMS 版本
随便发一个sudoku的gams代码。最主要的是请大家理解set 里面mapping 的写法。
" y0 v% q3 a1 s
Sets r rows / r1*r9 /
5 D1 L' {8 f L
c columns / c1*c9 /
- y/ i5 ^/ F& ^( H% o& |) [6 j3 M
b blocks / b1*b9 /
6 n+ s) |2 N, R. R, g# t8 E6 \/ n, X
v values / v1*v9 /
9 E4 ^* t' t* ^, B( m9 y4 o1 M" L7 r
br(b,r) / b1*b3 .r1*r3, b4*b6 .r4*r6, b7*b9 .r7*r9 /
6 e1 y# S5 U3 \6 v }( d
bc(b,c) / (b1,b4,b7).c1*c3, (b2,b5,b8).c4*c6, (b3,b6,b9).c7*c9 /
) l F: W8 c1 E( m" o
brc(b,r,c) block definitions ;
6 `$ R v+ m1 L3 A2 M, Q
- e( T7 W; M9 X9 T
brc(b,r,c) = br(b,r)*bc(b,c);
$ @9 I% ]7 p3 V/ F- X
1 C: B; _% j6 x/ s
Table problem(r,c) Hard problem with non-unique solution
. o- M( L9 G" ] _1 G# c
c1 c2 c3 c4 c5 c6 c7 c8 c9
4 K& u' @/ s) W, G N' h: w
r1 2 6 7
* @9 N3 p0 T" k' i# L5 }" `; y
r2 6 2
+ V( I" b8 q4 B4 u; h* m4 r
r3 4 8 1
) |& k1 b: U+ N: T& h2 n3 a/ B
r4 5 9 3
' ~* i' v- }" L6 {6 S
r5 3 5
5 `' F* Q( O* I
r6 2 8 7
+ [# }+ l0 ] O3 k% ?0 ], u* t
r7 1
: Y4 _) } M8 R$ C. o9 S
r8 7 8 6
2 c D1 @& g% k
r9 5 3 8 ;
9 H8 e4 ?& c2 c1 z
/ ^+ w2 Y: [3 w* |: _# u! V/ n
# I7 d. ]0 S( h( t( a, B
Binary Variable X(r,c,v) assign value to cell (defined by row and column);
9 p( X- ^. U% z, C, f5 z
Variable W objectiv value - anything;
0 H5 Q7 t4 d5 ^3 J. H4 Q1 d
8 B' k9 o, @/ [* A* c
equations eq1(r,c) exactly one value for each cell
7 k1 j! f8 `8 c6 T6 g1 |1 k
eq2(c,v) column entries have to be unique
, ?6 X* P: J) e: X, Z
eq3(r,v) row entries have to be unique
9 O- D* t& C, S6 Q) l$ c
eq4(b,v) block entries have to be unique
6 Q$ m* ]. C& M; E% a) _+ `
nobj definition of objective - anything;
9 }! T! ~( }# Y. O
& X" u& x! O" p
X.fx(r,c,v)$(problem(r,c)=ord(v)) = 1;
4 L) d$ J/ {. M. C5 j
9 i- X& q& I5 [: s+ Z* Q
eq1(r,c).. sum(v, X(r,c,v)) =E= 1;
, W3 [9 f9 ^, F7 C* S+ e
eq2(c,v).. sum(r, X(r,c,v)) =E= 1;
* C n) i3 p2 X/ l. i! v
eq3(r,v).. sum(c, X(r,c,v)) =E= 1;
# ?/ a) E5 m6 G
eq4(b,v).. sum(brc(b,r,c), X(r,c,v)) =E= 1;
5 r% v9 j6 e. s, B3 C& B q
nobj.. W =E= sum((r,c,v), X(r,c,v));
. E+ M+ ]3 ?$ b# F9 L. g
; q( j( g5 i" ^
model sudoku / all /;
# b, h: L1 f% ]8 X' I) ~
/ |1 B6 j2 X2 ?8 v# @
solve sudoku minimizing w using mip;
& q: @6 b t! i! j( @
最后说一句,其实这个模型不用求什么最大还是最小值,只要得到一个满足所有constraints的feasible solution 就可以了,所以nobj的注释写的"anything"。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5