 FICO Xpress Optimization Examples Repository
 FICO Optimization Community FICO Xpress Optimization Home   Implication and equivalence constraints

Description
Defining logical constraints (implication, equivalence).

Further explanation of this example: 'Xpress Kalis Reference Manual'

Source Files

impequiv.mos

```(!****************************************************************
CP example problems
===================

file impequiv.mos
`````````````````
Logical constraints (implication, equivalence).

(c) 2008 Artelys S.A. and Fair Isaac Corporation
Creation: 2005, rev. Mar. 2013
*****************************************************************!)
model "Logical constraints"
uses "kalis"

! Default bounds for all variables
setparam("KALIS_DEFAULT_LB", 0); setparam("KALIS_DEFAULT_UB", 5)

declarations
A, B, C, D, E: cpctr
x,y,z,b: cpvar
end-declarations

setname(b, "b"); setname(x, "x")
setname(y, "y"); setname(z, "z")
b <= 1

! Definition of constraints (without posting)
A:= x >= y + 5 + z + b
B:= b = 1
C:= all_different({x, y, z})    ! Cannot be used with 'equiv'
D:= y <= z
E:= distance(y,z) <= 2

writeln("Original domains: ", b, " ", x, " ", y, " ", z)

! If x, y and z are all different then b equals 1 (C=>B),
! if b equals 1 then x, y and z are all different (B=>C).
implies(C, B)
implies(B, C)

! E<=>B: b equals 1 if and only if |y-z| <= 2
equiv(E, B)

! A<=>D: x >= y + 5 + z + b if and only if y <= z
equiv(A, D)

writeln("With constraints: ", b, " ", x, " ", y, " ", z)

while (cp_find_next_sol)
writeln("Solution: ", b, " ", x, " ", y, " ", z)

end-model

```   