6 F R G7 W0 [! I% _Binary Variable X(r,c,v) assign value to cell (defined by row and column);$ s& t, W$ |; j# v
Variable W objectiv value - anything;0 G/ w$ d. ^# y. x- @6 U8 d
% [) }7 Y8 Z1 R* Q- @. b; p6 P Nequations eq1(r,c) exactly one value for each cell, y0 |5 L6 l: Y
eq2(c,v) column entries have to be unique3 W+ u5 C4 v8 W9 y" F8 o1 {5 h
eq3(r,v) row entries have to be unique $ x9 ~9 `$ d* E! E# Q eq4(b,v) block entries have to be unique# D9 p2 O' }4 D, P% }5 V0 ~5 ^
nobj definition of objective - anything; 9 U- }- y6 |6 R2 s% Y 0 _( B/ ^' f {+ a9 |% p- ?$ i6 GX.fx(r,c,v)$(problem(r,c)=ord(v)) = 1;1 E% ]6 v8 P3 o/ r; ~+ w
! E- N: A9 g* @8 m8 V; oeq1(r,c).. sum(v, X(r,c,v)) =E= 1;1 ? `& U S. C' n" z/ n/ |
eq2(c,v).. sum(r, X(r,c,v)) =E= 1;/ T7 e O. ?) n7 [8 s+ S* a; D
eq3(r,v).. sum(c, X(r,c,v)) =E= 1; 3 I- V$ z. |' E3 J2 r Req4(b,v).. sum(brc(b,r,c), X(r,c,v)) =E= 1;! r- l3 }: S* Z
nobj.. W =E= sum((r,c,v), X(r,c,v));9 P* T9 D9 h1 T7 }8 S7 V8 b
/ [% F+ x2 K7 W; z7 _model sudoku / all /;. e* a4 m. u, }& Z" T l
( K( ~; U! R$ q1 s1 r% {+ G
solve sudoku minimizing w using mip; l# d6 J# L, u" Y5 B最后说一句,其实这个模型不用求什么最大还是最小值,只要得到一个满足所有constraints的feasible solution 就可以了,所以nobj的注释写的"anything"。