FICO Xpress Optimization Examples Repository
 FICO Optimization Community FICO Xpress Optimization Home

Introductory example: constraint handling

Description
Introductory example: scheduling meetings, stated using disequality constraints; default enumeration.
• meeting.mos: basic version, stating disequality constraints
• meeting2.mos: Additional constraints, immediate posting of (unnamed) constraints
• meeting3.mos: Named constraints posted without control of result
• meeting4.mos: Explicit posting of constraints with 'cp_post' to retrieve the result
Further explanation of this example: 'Xpress Kalis Mosel User Guide', Sections 2.1 A first model and 3.1 Constraint handling

Source Files
By clicking on a file name, a preview is opened at the bottom of this page.

meeting3.mos

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

file meeting3.mos

Introductory example.
- Named constraints. -

(c) 2008 Artelys S.A. and Fair Isaac Corporation

*****************************************************************!)

model "Meeting (3)"
uses "kalis"

declarations
MEETINGS = {'A','B','C','D'}        ! Set of meetings
TIME = 1..3                         ! Set of time slots
plan: array(MEETINGS) of cpvar      ! Time slot per meeting
Ctr: array(range) of cpctr
end-declarations

forall(m in MEETINGS) do
setdomain(plan(m), TIME)
setname(plan(m), "plan"+m)
end-do
writeln("Original domains: ", plan)

Ctr(1):= plan('B') <= 2              ! Meeting B before day 3
Ctr(2):= plan('D') <> 2              ! Meeting D not on day 2
Ctr(3):= plan('A') = 1               ! Meeting A on day 1
writeln("After definition of constraints:\n ", plan)

forall(i in 1..3) Ctr(i)
writeln("After posting of constraints:\n ", plan)

! Respect incompatibilities
plan('A') <> plan('B')
plan('A') <> plan('D')
plan('B') <> plan('C')
plan('B') <> plan('D')

! Solve the problem
if not cp_find_next_sol then
writeln("Problem is infeasible")
exit(1)
end-if

! Solution printing
forall(m in MEETINGS) writeln("Meeting ", m, ": ", getsol(plan(m)))

end-model

`