Car Sequencing Problem
Assessed exercise 2
15%
27/11/09
representing the CSP as a csp
Line 1: 10 cars, 5 options (sunRoof, airCon, elecWin, 2TonePaint, alloys) 6 classes (subsets of options)Line 2: Number of cars with an option allowed in a block (pi)Line 3: Size of block, measured as cars (qi)Line 4: class# #cars option1 (0/1) option2 (0/1) … option5 (0/1)…Line 9: class# #cars option1 (0/1) option2 (0/1) … option5 (0/1)
ii qlength ofblock ain carspmost at Produce/ ii qp
Also called r out of s in AIJ58
]5][[]][5[][
]2][[]][2[][
]1][[]][1[][
icarOptionjoptionjicar
icarOptionjoptionjicar
icarOptionjoptionjicar
allDiff(cars)
Some thoughts/sketch
Need “sliding” p/q constraint on each rowconstrained integer variables
data read in (constants)
Find a time/position for each car
10
9
8
7
6
5
4
3
2
1
54321option\time
]5][[]][5[][
]2][[]][2[][
]1][[]][1[][
icarOptionjoptionjicar
icarOptionjoptionjicar
icarOptionjoptionjicar
allDiff(cars)
Some thoughts/sketch
Decision variables?Need “sliding” p/q constraint on each row
Symmetries?
Heuristics?
Value ordering?
How does search proceed?
Bound v enumerated domains?
Find a time/position for each car
10
9
8
7
6
5
4
3
2
1
54321option\time
½ baked!
Alternative model?
slots Time
Values for time slots are “classes” of cars
Constraints between time slots and the 2D array of 0/1 variablesrepresenting options over time
Occurrence constraints on classes
Due to AIJ58
What class of car do we make in a time slot/position?
10
9
8
7
6
5
4
3
2
1
54321option\time
variablesAIJ , pages 139 to 151
c is number of classes of carsm is number of optionsn is number of cars to produce
opt[i][j] = 1 class i requires option j (read in as input)
SlotsArray of constrained integer variables S[n] S[i] {0..c-1} S[i] = j a car of class j is in slot i
OptionsArray of constrained 0/1 integer variables O[n][m] O[i][j] = 1 S[i] = x opt[x][j] = 1 O[i][j] = 0 S[i] = x opt[x][j] = 0 A car of class x is in slot i and requires option j alternatively option j produced at time i
variables
Decision variables
c is number of classes of carsm is number of optionsn is number of cars to produce
opt[i][j] = 1 class i requires option j (read in as input)
SlotsArray of constrained integer variables S[n] S[i] {0..c-1} S[i] = j a car of class j is in slot i
OptionsArray of constrained 0/1 integer variables O[n][m] O[i][j] = 1 S[i] = x opt[x][j] = 1 O[i][j] = 0 S[i] = x opt[x][j] = 0 A car of class x is in slot i and requires option j alternatively option j produced at time i
variables
c = 6m = 5n = 10
5
S
9
8
7
6
5
4
000113
2
1
0
43210O
constraintsDemand constraint
d[i] is demand (number of cars) for class iFor all i: occurrence of i in S is d[i]
spelling!
constraintsCapacity, p/q, constraint
p[j] is the number of cars with option j that can beproduced in a block of length q[j]
O[0][j] + … + O[q[j]-1][j] ≤ p[i]O[1][j] + … + O[q[j]][j] ≤ p[i]...More generallyO[i][j] +…+ O[i+q[j]-1][j] ≤ p[i] 1 ≤ i ≤ n-q[j]+1
Uses constraints sum and leq
Do this for all options j
r outof s in AIJ58
constraintsThe link constraint (page 144)
If a car of class j is being produced in time slot i and that class of car requires an option xthen option x is required in time i
S[i] = 2 O[i][0] = 0 O[i][1] = 1 O[i][2] = 0 O[i][3] = 0 O[i][4] = 1
Do this for all times/positions 0 ≤ i < n and all classes 0 ≤ j < c
If a car of class j is being produced in time slot i and that class of car requires an option xthen option x is required in time i
constraintsThe link constraint
S[i] {0,4,5} O[i][0] = 1 S[i] {2,3,5} O[i][1] = 1S[i] {0,4} O[i][2] = 1S[i] {0,1,3} O[i][3] = 1S[i] {2} O[i][4] = 1
Do this for all time slots and all options
This maintains arc-consistency
Turn it around by 90 degrees
This gets more propagation
constraintsThe link constraint
Are these the same i.e. logically and wrt propagation?
S[i] {0,4} O[i][2] = 1
S[i] = 0 S[i] = 4 O[i][2] = 1
S[i] ≠ 1 S[i] ≠ 2 S[i] ≠ 3 O[i][2] = 1
S[i] {0,4,5} O[i][0] = 1 S[i] {2,3,5} O[i][1] = 1S[i] {0,4} O[i][2] = 1S[i] {0,1,3} O[i][3] = 1S[i] {2} O[i][4] = 1
S[i] ≠ 0 S[i] ≠ 4 O[i][2] = 0
I wonder if this oneproduces most propagation
constraintsThe redundant constraint (page 146)
Let d[i] be the demand for option i
Example: d[3] = 1 + 1 + 0 + 2.1 + 0 + 0 = 4 p[3]/q[3] = 2/5
O[0][3] + O[1][3] + O[2][3] + O[3][3] + O[4][3] ≥ d[3] – 2
Another example
options
demand
The ReasoningThe demand for option 3 is 4 cars (d[3] = 4). In the last 5 slots we can make at most 2 cars with this optionConsequently in the previous 5 slots we MUST make at least 2 cars
constraintsThe redundant constraint
Example: d[0] = 1 + 0 + 0 + 0 + 2 + 2 = 5 p[0]/q[0] = 1/2
O[0][0] + + O[7][0] ≥ d[0] – 1 O[0][0] + + O[5][0] ≥ d[0] – 2 O[0][0] + + O[3][0] ≥ d[0] – 3 O[0][0] + O[1][0] ≥ d[0] – 4
This constraint makes a BIG difference
heuristicsVariable ordering
What are the decision variables?Dynamic Variable Ordering: sdf?
AIJ58 Page 146 to 150
This slide intentionally left blank
heuristicsValue ordering
What is value ordering in this context?
heuristicsValue ordering
Having selected a vacant slot to consider,what class of car should we place in that slot?
Suggestions?
Software reuseHave a look at CSPCertificate
Could this be used to produce a loader?
How do you know your solutio
n is correct?
My code
So?
Encode a model for car sequencing problem using toolkit primitives
Incorporate “redundant” constraint identified by PvHUse heuristics of your choiceCertify your solutionsPerform small empirical study
and …
Write a short report, no more than 2 pagesdescribing your models and how they go
Email me this along with code that I can run and verifyMake sure you give instructions on how to runMake sure output is verifiable (standard)
You must read this
And so on ….
You should read PvH’s paper
Looking at both sides
Interchanging variables with values
- to make things all different? - a permutation?