|
Maximum of six watchmen can each see six cells. 1 0 1 0 0 0 0 0 1 0 0 0 0 1 1 1 Maximum of six watchmen can each see seven cells. 0 0 1 0 0 0 1 0 0 0 1 1 1 1 0 0 Xpress-Mosel Model
model 'evision'
! Description : Equal Vision
! Source : Poniachik, J. & L., (1998), Hard-to-solve Brainteasers, Sterling
! Date written : Xpress-MP 19/12/99, Mosel 19/4/03
! Written by : M J Chlond
uses 'mmxprs'
parameters
size = 4
cvis = 6
end-parameters
declarations
S = 1..size
C = 1..cvis
x: array(S,S) of mpvar ! x(i,j) = 0 if cell {i,j} occupied, 1 otherwise
n: array(S,S) of mpvar ! n(i,j) = number of vacant cells visible to watchman on cell {i,j}
end-declarations
minv:= sum(i in S,j in S) x(i,j) ! minimise vacant cells
forall(i in S,j in S) do
nsee(i,j):= sum(m in S | m <> i and m-i+j >= 1 and m-i+j <= size) x(m,m-i+j)+
sum(m in S | m <> i and i+j-m >= 1 and i+j-m <= size) x(m,i+j-m)+
sum(m in S | m <> i) x(m,j) + sum(m in S| m <> j) x(i,m) = n(i,j)
sca(i,j):= n(i,j) >= cvis-99*x(i,j)
scb(i,j):= n(i,j) <= cvis+99*x(i,j)
x(i,j) is_binary
n(i,j) is_integer
n(i,j) <= 4*size-4
end-do
minimise(minv)
forall(i in S) do
forall(j in S)
write(1-getsol(x(i,j)),' ')
writeln
end-do
end-model
|