9 @, {0 h$ k6 W, ] o q2 w- t% d! n9 R9 I! r
Binary Variable X(r,c,v) assign value to cell (defined by row and column); 6 F0 @ N6 m7 s% C& _+ pVariable W objectiv value - anything; 2 Y' \7 @* Q2 l: p6 ` A- F4 F" s; @4 i/ O
equations eq1(r,c) exactly one value for each cell4 S4 n( V, K1 g" y8 {8 q q; N
eq2(c,v) column entries have to be unique : R' x j( ]1 u eq3(r,v) row entries have to be unique5 O& l1 V9 c2 g
eq4(b,v) block entries have to be unique6 R" F7 y3 u. ~1 a5 Y6 `
nobj definition of objective - anything; ! w4 N8 Z( a+ @( W& ^5 u( E1 ^% E: |# L
X.fx(r,c,v)$(problem(r,c)=ord(v)) = 1;& A8 k. S8 X5 k+ j
7 B5 M! j' a8 ]4 g, Deq1(r,c).. sum(v, X(r,c,v)) =E= 1;2 l, J! z$ d" _4 n3 d3 F+ C
eq2(c,v).. sum(r, X(r,c,v)) =E= 1;+ K* U! E# x2 v4 w. c) _5 R
eq3(r,v).. sum(c, X(r,c,v)) =E= 1;# f5 V# m7 H5 `. b" ]
eq4(b,v).. sum(brc(b,r,c), X(r,c,v)) =E= 1;, L, o& ~7 L2 X* A% L! p% V3 V" G; c
nobj.. W =E= sum((r,c,v), X(r,c,v));6 b0 S# a$ G! O( s3 i, L( A
( ?' J! }+ Q# f! J7 f6 `model sudoku / all /;1 ^, k7 d4 f$ L6 s
/ U, \" `0 k% K2 I+ W- K8 M
solve sudoku minimizing w using mip; % t* F0 B! V% B6 _4 b2 J+ ^最后说一句,其实这个模型不用求什么最大还是最小值,只要得到一个满足所有constraints的feasible solution 就可以了,所以nobj的注释写的"anything"。