【转载】SUDOKU 游戏的GAMS 版本
随便发一个sudoku的gams代码。最主要的是请大家理解set 里面mapping 的写法。Sets r rows / r1*r9 /
c columns / c1*c9 /
b blocks / b1*b9 /
v values / v1*v9 /
br(b,r) / b1*b3 .r1*r3, b4*b6 .r4*r6, b7*b9 .r7*r9 /
bc(b,c) / (b1,b4,b7).c1*c3, (b2,b5,b8).c4*c6, (b3,b6,b9).c7*c9 /
brc(b,r,c) block definitions ;
brc(b,r,c) = br(b,r)*bc(b,c);
Table problem(r,c) Hard problem with non-unique solution
c1 c2 c3 c4 c5 c6 c7 c8 c9
r1 2 6 7
r2 6 2
r3 4 8 1
r4 5 9 3
r5 3 5
r6 2 8 7
r7 1
r8 7 8 6
r9 5 3 8 ;
Binary Variable X(r,c,v) assign value to cell (defined by row and column);
Variable W objectiv value - anything;
equations eq1(r,c) exactly one value for each cell
eq2(c,v) column entries have to be unique
eq3(r,v) row entries have to be unique
eq4(b,v) block entries have to be unique
nobj definition of objective - anything;
X.fx(r,c,v)$(problem(r,c)=ord(v)) = 1;
eq1(r,c).. sum(v, X(r,c,v)) =E= 1;
eq2(c,v).. sum(r, X(r,c,v)) =E= 1;
eq3(r,v).. sum(c, X(r,c,v)) =E= 1;
eq4(b,v).. sum(brc(b,r,c), X(r,c,v)) =E= 1;
nobj.. W =E= sum((r,c,v), X(r,c,v));
model sudoku / all /;
solve sudoku minimizing w using mip;
最后说一句,其实这个模型不用求什么最大还是最小值,只要得到一个满足所有constraints的feasible solution 就可以了,所以nobj的注释写的"anything"。
页:
[1]