6 d& z- t& V3 m; H. Y. g- O5 o; K% y1 `& M: ]
Binary Variable X(r,c,v) assign value to cell (defined by row and column); 7 p0 R& z7 W# O) B* T2 s$ pVariable W objectiv value - anything; 2 h2 G$ _1 D4 A" F ~; V# O/ z) d5 f, q0 @1 G) L3 L) ? w* w
equations eq1(r,c) exactly one value for each cell8 z' S, u0 c7 _$ r1 E
eq2(c,v) column entries have to be unique 4 @8 }" p3 k7 O eq3(r,v) row entries have to be unique; J+ Y6 D6 Q7 @" R: a4 `" X
eq4(b,v) block entries have to be unique 9 g* o* E' a q nobj definition of objective - anything;+ w5 ~+ [1 i# r* w+ e9 L
- r% Z* I6 _: `/ EX.fx(r,c,v)$(problem(r,c)=ord(v)) = 1;1 [2 y/ {' p) Q" A9 d
; d' U+ U @) Z$ H
eq1(r,c).. sum(v, X(r,c,v)) =E= 1; 1 ?! l; `! V! J! b; U7 |1 A& Oeq2(c,v).. sum(r, X(r,c,v)) =E= 1;& T, P$ X, y0 }$ N& N7 e" U
eq3(r,v).. sum(c, X(r,c,v)) =E= 1; 7 z' Y; s! f! B: F: Aeq4(b,v).. sum(brc(b,r,c), X(r,c,v)) =E= 1;8 G/ n i4 c+ k, u7 Z! C. t: g
nobj.. W =E= sum((r,c,v), X(r,c,v)); * G+ Q$ {$ j+ J. i5 K* B , m% i- v1 z& N* y8 imodel sudoku / all /; ( w; J7 L# C/ C5 c8 @* q6 L& I* e; B' O: x
solve sudoku minimizing w using mip;5 I6 M( V8 H- i7 n/ g; V/ ]/ X) {
最后说一句,其实这个模型不用求什么最大还是最小值,只要得到一个满足所有constraints的feasible solution 就可以了,所以nobj的注释写的"anything"。