|
Door 1 - tiger
Door 2 - lady
Xpress-Mosel Model
model 'trial6'
! Description : The Sixth Trial
! Source : Smullyan, R., (1991), The Lady or The Tiger, Oxford University Press
! Date written : Xpress-MP 16/12/99, Mosel 19/4/03
! Written by : M J Chlond
uses 'mmxprs'
parameters
door = 2
prize = 2 ! 1 = Lady, 2 = Tiger
end-parameters
declarations
D = 1..door
P = 1..prize
x: array(D,P) of mpvar ! x(i,j) = 1 if door i hides prize j, else 0
t: array(D) of mpvar ! t(i) = 1 if statement on door i is true, else 0
d: array(1..2) of mpvar ! dummy variables
end-declarations
any:= x(1,1)
! each door hides 1 prize
forall(i in D)
pca(i):= sum(j in P) x(i,j) = 1
! if door i hides prize i then statement i is true else false
forall(i in D)
lca(i):= x(i,i) = t(i)
! if statement on door 1 is true (i.e. x(1,1)=x(2,1)) then set t(1) = 1, else t(1) = 0
lcb1:= x(1,1)-x(2,1)-2*d(1) <= -1
lcb2:= x(1,1)-x(2,1)-d(1) >= -1
lcb3:= x(1,1)-x(2,1)+2*d(2) >= 1
lcb4:= x(1,1)-x(2,1)+2*d(2) <= 2
lcb5:= d(1)+d(2)-t(1) <= 1
lcb6:=d(1)+d(2)-2*t(1) >= 0
! if statement on door 2 is true then set t(2) = 1, else t(2) = 0
lcc:= x(1,1) = t(2)
forall(i in D,j in P)
x(i,j) is_binary
forall(i in D)
t(i) is_binary
forall(i in 1..2)
d(i) is_binary
minimise(any)
forall(i in D) do
forall(j in P)
write(getsol(x(i,j)),' ')
writeln
end-do
forall(i in D) do
write(getsol(t(i)))
writeln
end-do
end-model
|