| meeting.mos | 
| (!****************************************************************
   CP example problems
   ===================
   
   file meeting.mos
   ````````````````
   Introductory example.
   (c) 2008 Artelys S.A. and Fair Isaac Corporation
       
*****************************************************************!)
model "Meeting"
 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
 end-declarations
 forall(m in MEETINGS) setdomain(plan(m), TIME)
! 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
 | 
| 
 | 
| meeting2.mos | 
| (!****************************************************************
   CP example problems
   ===================
   
   file meeting2.mos
   `````````````````
   Introductory example.
   - Additional constraints. -
   (c) 2008 Artelys S.A. and Fair Isaac Corporation
       
*****************************************************************!)
model "Meeting (2)"
 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
 end-declarations
 forall(m in MEETINGS) do
  setdomain(plan(m), TIME)
  setname(plan(m), "plan"+m)
 end-do
 writeln("Original domains: ", plan)
 
 plan('B') <= 2                       ! Meeting B before day 3
 plan('D') <> 2                       ! Meeting D not on day 2
 plan('A') = 1                        ! Meeting A on day 1
 writeln("With constraints: ", 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
 | 
| 
 | 
| 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
 | 
| 
 | 
| meeting4.mos | 
| (!****************************************************************
   CP example problems
   ===================
   
   file meeting4.mos
   `````````````````
   Introductory example.
   - Explicit posting of constraints. -
   (c) 2008 Artelys S.A. and Fair Isaac Corporation
       
*****************************************************************!)
model "Meeting (4)"
 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)
 
! Retrieve result of posting constraints
 forall(i in 1..3) 
  if not cp_post(Ctr(i)) then 
   writeln("Constraint ", i, " makes problem infeasible")
   exit(1)
  end-if
 
 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
 | 
| 
 |