数学建模社区-数学中国
标题:
【转载】SUDOKU 游戏的GAMS 版本
[打印本页]
作者:
huashi3483
时间:
2009-11-14 05:19
标题:
【转载】SUDOKU 游戏的GAMS 版本
随便发一个sudoku的gams代码。最主要的是请大家理解set 里面mapping 的写法。
2 x. X' \7 T3 Z" b4 n5 F
Sets r rows / r1*r9 /
, p" o7 z8 V: o* A% I+ A
c columns / c1*c9 /
q$ D! F5 V4 d+ P
b blocks / b1*b9 /
/ q Y4 h9 T6 m2 x" M) }
v values / v1*v9 /
7 |2 O- q2 W% }. E+ h! j, e
br(b,r) / b1*b3 .r1*r3, b4*b6 .r4*r6, b7*b9 .r7*r9 /
2 Q! t1 d2 q. ?0 F$ c) C- s7 ^" |* \
bc(b,c) / (b1,b4,b7).c1*c3, (b2,b5,b8).c4*c6, (b3,b6,b9).c7*c9 /
/ N% {& \3 B8 E9 R1 {. B! Y
brc(b,r,c) block definitions ;
' m( j1 Z" a0 n' V
0 e( \5 s" @* T7 U! C8 b5 N
brc(b,r,c) = br(b,r)*bc(b,c);
0 ?0 y" p7 s9 ?! Z
' G( B1 L9 I. m5 c7 Z- u+ m3 W5 G5 B
Table problem(r,c) Hard problem with non-unique solution
4 s& C; q" u% C) H7 v8 p
c1 c2 c3 c4 c5 c6 c7 c8 c9
0 I2 X4 y2 P/ A
r1 2 6 7
$ k! A1 Q4 G; J0 q5 P- ~2 j- F
r2 6 2
( P- n: ^' i; {$ l3 S) D# {9 k
r3 4 8 1
% X& H$ |- h- m4 v% z- S) {
r4 5 9 3
% S3 o- k3 [/ z1 @& x! g# b
r5 3 5
/ U4 j' L+ x& z. {6 B% D" f4 H
r6 2 8 7
7 G8 x- v' p+ M
r7 1
: k+ S5 F+ v) a9 V6 ]: ^/ z5 v- v6 Y
r8 7 8 6
, _2 V A% l/ I9 k
r9 5 3 8 ;
# q5 m6 l* R9 F+ d4 }
" f( N, A$ U" P" D: q
- k$ b" B* B$ ?; N- A4 @3 {: w
Binary Variable X(r,c,v) assign value to cell (defined by row and column);
. R( t9 i% H( S3 |
Variable W objectiv value - anything;
6 d5 F9 p. c* j7 Q5 }
7 ]: J! l l. z7 N1 g8 ]
equations eq1(r,c) exactly one value for each cell
% g5 N5 d: o3 r- U' O) x
eq2(c,v) column entries have to be unique
* g' M3 @/ \% p5 S
eq3(r,v) row entries have to be unique
1 v+ L- {7 J, Z* w0 Y5 E
eq4(b,v) block entries have to be unique
. M* S) z4 G9 F$ L
nobj definition of objective - anything;
5 n/ j% T2 T i+ B- C( z# I
& W# J% [% x8 X0 F$ e: e6 ]
X.fx(r,c,v)$(problem(r,c)=ord(v)) = 1;
( \, o7 v# s4 d$ J
! E8 s; |! J7 i; k4 o
eq1(r,c).. sum(v, X(r,c,v)) =E= 1;
& Y* C; U. Z, y) @7 o! V
eq2(c,v).. sum(r, X(r,c,v)) =E= 1;
3 p* [/ \ o! }$ Y x, K
eq3(r,v).. sum(c, X(r,c,v)) =E= 1;
; h" X# f9 X* ~7 U- a- E
eq4(b,v).. sum(brc(b,r,c), X(r,c,v)) =E= 1;
0 s( T1 Q H) O+ J0 c, M
nobj.. W =E= sum((r,c,v), X(r,c,v));
/ a: l! x4 @: _8 N0 ]' X# O
& o- w& B2 y- {' T; E' k
model sudoku / all /;
6 [; J6 {" r2 k& K! ?
9 w0 F* F" \" ^' {: ?' b# o
solve sudoku minimizing w using mip;
6 e+ F" P( c: U! [# a! e% d
最后说一句,其实这个模型不用求什么最大还是最小值,只要得到一个满足所有constraints的feasible solution 就可以了,所以nobj的注释写的"anything"。
欢迎光临 数学建模社区-数学中国 (http://www.madio.net/)
Powered by Discuz! X2.5