number partitioning
Like subset sum
Recently featured in the Crystal Maze! Given a bag of numbers, can you partition this into 2 bags such that the sum of the integers in each bag is equal? Recently featured in the Crystal Maze! (Thanks Zoe!)
Try it!
4 5 3 2 1 8 7 3 5 9 Try that!
Try that?
Try that?
Can you think of a 1st test to carry out to determine if there is no partition?
Garey & Johnson “Computers and Intractability” Given a bag of numbers, can you partition this into 2 bags such that the sum of the integers in each bag is equal? Garey & Johnson “Computers and Intractability” [SP12] PARTITION INSTANCE: Finite set A and a size s(a) Z+ for each a A QUESTION: Is there a subset A’ A such that aA’ s(a) aA-A’ s(a)
How complex?
Who cares? Imagine you have 2 machines on the shop floor You have n activities, of varying durations Place the activities on the machines to minimise makespan
Why just 2-partition? Why not m-way partitioning? Is there an optimisation problem?
A number of constraint encodings
1st stab variables constraints Questions: What are the “decision variables” Can we be more efficient generate more propagation Bound or enumerated variables Is there a better model? What if it is insoluble?
How can I make an IntegerVariable with a domain that is a set of values, rather than a range? If I had L[i] {0,w[i]} and R[i] {0,w[i]} could I throw away D[i] and have R[i] ≠ L[i]? Laura?
Look! No D!
Value ordering … does it matter Questions, questions, questions Decision variables … does it matter? Heuristics? Value ordering … does it matter Bound versus enumerated variables … anyone? Symmetries Propagation: what will it do? Will it have an effect? Size of state space? How big is the model? How will search progress?
Symmetry If we are using a static variable ordering heuristic and If we are using the 0/1 decision variables D[i] Does it make any difference if we have D[0] = 0 or D[0] = 1 That is, can we half the search space?
Can we think of any “side constraints”? 1st stab Why use CP for numPart? Can we think of any “side constraints”? Actually, an important question: justify use of CP
We want to minimise the difference between the sum A 2nd stab We want to minimise the difference between the sum of the numbers on the left and the sum of the numbers on the right Right!?
An optimisation problem Minimise the difference between left and right A 2nd stab An optimisation problem Minimise the difference between left and right
Minimize imbalance
How do we optimise in CP? A sequence of decision problems Branch and bound
Demo of Optimize
Why is Optimize so slow?
When can this propagate?
Can we limit the search effort?
3d stab
Optimize is a wee bit “clunky” 3d stab Optimize is a wee bit “clunky” Can we do better? Put ½ the numbers on one side
1st stab variables constraints
Maximize the sum of Weights on the right As close to tot/2
Demo of OptimizeV2
Why was version 2 faster?
Could we Optimize without the decision variable D? I suppose so … could explore this Replace scalar with sum
So?
Three stabs! A fair bit to consider Has this all been easy? Is there a better way to do numPart?