Repository navigation
🧩 Constraint Solving POTD:Problem of the Day: Arc Routing Problem #70235
Closed
Replies: 1 comment
|
This discussion has been marked as outdated by Constraint Solving — Problem of the Day. A newer discussion is available at Discussion #70503. |
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
Problem of the Day: The Arc Routing Problem
Problem Statement
The Arc Routing Problem (ARP) asks: given a network (graph), find the minimum-cost tour that traverses every edge (or a required subset of edges) at least once. Unlike the Traveling Salesman Problem, which focuses on visiting nodes, arc routing emphasizes covering edges—think street sweeping, mail delivery, or inspecting pipelines.
Concrete Instance
Imagine a small village with 5 streets (edges) that a garbage truck must traverse:
A valid solution might traverse: A→B→C→D→B→A, covering all edges with total distance 30 km (including the repeated edge B–D used twice).
Input/Output Specification
Why It Matters
Street Maintenance & Cleaning: Cities use arc routing to plan road sweeping, snow plowing, and pothole inspection routes. Efficient routing saves fuel and labor costs.
Utility Inspection: Gas, water, and electrical companies must periodically inspect all pipeline/wire segments. Arc routing ensures complete coverage with minimal inspector travel time.
Postal & Last-Mile Delivery: Mail carriers and parcel couriers must visit every street on their assigned route; arc routing optimizes their daily rounds.
Network Maintenance: Telecom companies and fiber-optic providers need to inspect all links in their infrastructure network.
Modeling Approaches
Approach 1: Integer Linear Programming (ILP)
Model the problem as a flow-based MIP:
x_e∈ Z+ = number of times edge e is traversedx_e ≥ 1Trade-offs: Natural encoding, strong LP relaxations, but can be slow on large graphs; degree constraints scale quadratically.
Approach 2: Constraint Programming with Graph Algorithms
Decompose the problem:
Trade-offs: Leverages specialized CP propagation, can prune infeasible augmentations early, but requires custom global constraints for Eulerian path requirements.
Example Model (ILP Pseudo-code)
Key Techniques
1. Chinese Postman Relaxation
The CPP asks: "What's the minimum cost to add/repeat edges so the graph becomes Eulerian?" Solving CPP gives a lower bound for ARP and suggests which edges to traverse multiple times. Algorithms (e.g., matching on odd-degree vertices) run in polynomial time for undirected graphs.
2. Symmetry Breaking & Subtour Elimination
Arc routing solutions often have high symmetry (different orderings of the same edge traversals). Use degree-sequence constraints and break symmetries via canonical tours. For large instances, use lazy subtour-elimination callbacks in branch-and-cut rather than enumerating all upfront.
3. Cutting Planes & Separation Oracles
Strengthen the LP relaxation with comb inequalities and other cutting planes derived from the Eulerian structure. These tighten bounds in B&C, reducing search space and improving convergence.
Challenge Corner
Open Questions for Readers:
Capacity Augmentation: If the vehicle has a capacity limit (can traverse at most k edges before returning to the depot), how would you model this? What global constraints would help prune infeasible partial solutions?
Symmetry Breaking: The set of all solutions for a simple cycle is exponentially large (different starting points, directions). What symmetry-breaking constraints would reduce the search space while preserving optimality?
Real-World Extensions: In practice, traversal costs differ by direction (downhill vs. uphill, or traffic patterns). How would you extend the model to handle asymmetric costs? What new challenges arise?
References
Next Challenge: Can you solve this by hand for the 5-street instance? Try different Eulerian augmentations and compare total costs!
All reactions