(!****************************************************************
CP example problems
===================
file distribute.mos
```````````````````
Distribute and occurrence constraints.
A movie theatre director has to decide in which location each
of his 8 employees should be posted. Each of the four locations
has a given personnel requirement.
(c) 2008 Artelys S.A. and Fair Isaac Corporation
Creation: 2005, rev. 2007
*****************************************************************!)
model "Distribute example"
uses "kalis"
declarations
PERS = {"David","Andrew","Leslie","Jason","Oliver","Michael",
"Jane","Marilyn"} ! Set of personnel
LOC = 1..4 ! Set of locations
REQ: array(LOC) of integer ! No. of pers. req. per loc.
place: array(PERS) of cpvar ! Workplace for each peson
end-declarations
! Initialize data
REQ:: [3, 2, 2, 1]
! Each variable has a lower bound of 1 (Ticket office) and
! an upper bound of 4 (Cloakroom)
forall(p in PERS) do
setname(place(p), "workplace("+p+")")
1 <= place(p); place(p) <= 4
end-do
! Creation of a resource constraint of for every location
forall(d in LOC) occurrence(d, place) = REQ(d)
! Elegant way to declare theses constraints,
! moreover achieving stronger prunning (using global
! cardinality constraint)
distribute(place, LOC, REQ)
! Solve the problem
if not(cp_find_next_sol) then
writeln("Problem is infeasible")
exit(1)
end-if
! Solution printout
writeln(place)
end-model
|
(!****************************************************************
CP example problems
===================
file occurrence.mos
```````````````````
Cardinality (=occurrence) constraints.
(c) 2008 Artelys S.A. and Fair Isaac Corporation
Creation: 2005, rev. Mar. 2013
*****************************************************************!)
model "Cardinality"
uses "kalis"
setparam("KALIS_DEFAULT_LB", 0)
declarations
R = 1..6
S = 1..10
x: array(R) of cpvar
y: array(S) of cpvar
a,b,c: cpvar
Card: cpctr
Vlist: cpvarlist
end-declarations
forall(i in R) setname(x(i), "x"+i)
forall(i in 1..3) x(i) = 1
forall(i in 4..6) x(i) <= 10
setname(c, "c")
c <= 15
writeln("Initial domains:\n ", x, " ", c)
! Explicit posting of an occurrence constraint
Card:= occurrence(1, x) = c
if cp_post(Card) then
writeln("With occurrence constraint:\n ", x, " ", c)
else exit(1)
end-if
c = 6
writeln("Fixing occurrence to 6:\n ", x, " ", c)
forall(i in S) do
setname(y(i), "y"+i)
i <= y(i); y(i) <= i*2
end-do
setname(a, "a"); setname(b,"b")
writeln("Initial domains:\n ", y, " ", a, " ", b)
! Occurrence constraint on an array of variables
occurrence(4, y) <= 2
! Occurrence constraint on a list of variables
Vlist += y(1); Vlist += y(2); Vlist += y(4)
occurrence(2, Vlist) = 0
! Occurrence constraint on a set of variables
occurrence(9, {y(6), y(7), y(9)}) >= 3
! Occurrences bounded by variables
occurrence(5, y) >= a
occurrence(8, {y(4), y(5), y(6), y(7), y(8)}) <= b
writeln("With all constraints:\n ", y, " ", a, " ", b)
if cp_find_next_sol then
writeln("A solution:\n ", y, " ", a, " ", b)
end-if
end-model
|