#sudoku puzzle------------------------------------ param q; # q = 2,3,4 param p := q*q; # p = 4,9,16 set S:={1..p}; set T:={1..q}; var x{S,S,S} binary; #=1 if cell (i,j) takes value k, (i,j,k) in SxSxS minimize profit: 0; # sudoku is just a feasibility problem Sij{i in S,j in S}:sum{k in S}x[i,j,k]=1; Sik{i in S,k in S}:sum{j in S}x[i,j,k]=1; Sjk{j in S,k in S}:sum{i in S}x[i,j,k]=1; Tkmn{m in T,n in T,k in S}:sum{i in q*m-(q-1)..q*m,j in q*m-(q-1)..q*m}x[i,j,k]=1; data; param q:=2; # 4x4 grid with 2x2 subgrid #param q:=3; # 9x9 grid with 3x3 subgrid option solver cplex; solve; display x; for{i in S} { for{j in S} printf "%d ", sum{k in S} k*x[i,j,k]; printf "\n"; }