Column generation solves a hard problem by repeatedly asking a smaller one — the pricing subproblem — for the next promising column. In vehicle routing that subproblem is a shortest path with resource constraints, and it is where the solver spends almost all of its time. Everything downstream is bounded by how fast you can answer it.
Subset-row inequalities
Operations Research 56(2) · 2008
Closed 8 Solomon benchmark instances that had stood unsolved.
p∈P∑⌊k1i∈S∑aip⌋λp≤⌊k∣S∣⌋,S⊆R,0<k≤∣S∣ With Mads Jepsen, Bjørn Petersen and David Pisinger; 600+ citations. The cuts tighten the bound, but each active one adds a resource to the pricing problem — a better bound bought with a harder subproblem, which only pays if you can absorb the cost. We folded the cut contribution into the dominance criterion, so a label carrying cut state could still dominate one that did not.
In the paper's own assessment the result was “competitive and in most cases superior to earlier algorithms within this field”. The cuts are now a standard component of state-of-the-art solvers: the idea outlived our implementation of it, which is the outcome you want.
doi:10.1287/opre.1070.0449 →
Parallel pull labelling
arXiv · 2025
Around 18× over a baseline version of the same algorithm on hard instances, up to 274× at best, and 1.9–2.4× faster than an open implementation of the bucket-graph algorithm on the same hardware.
With Bjørn Petersen. Classical labelling pushes labels forward from each vertex, which makes it awkward to parallelise — the writes collide. Pulling instead, so that each bucket gathers the labels reaching it, turns the same computation into something that parallelises cleanly at the bucket level, with a dynamic bidirectional midpoint and a vectorised dominance check on top.
doi:10.48550/arXiv.2511.01397 →
Bucket-graph labelling
arXiv · 2026
1.3–2.35× faster than PathWyse, the main open-source comparator, in shifted geometric mean at an identical bound.
bucket-graph-spprc is a header-only C++23 library implementing the bucket-graph labelling algorithm of Sadykov, Uchoa and Pessoa — their algorithm, and the pricing algorithm behind VRPSolver. The design decision that matters is a compile-time resource concept: a new variant is added by implementing a fixed seven-function interface, and resources compose into a label state with no runtime dispatch. Rank-1 cuts ship as one of those resources, which is to say the 2008 cuts are a built-in feature of a library written eighteen years later.
doi:10.48550/arXiv.2606.30847 →GitHub →