PDP-LNS
A Rust solver for the Pickup and Delivery Problem with Time Windows (PDPTW), focused on Li & Lim benchmark instances.
The project combines Large Neighborhood Search (LNS), Guided Ejection Search (GES), and local improvement operators to build high-quality feasible routes under time and capacity constraints.
Features
- Fast CLI solver for PDPTW instances
- Hybrid search pipeline with multiple neighborhood operators
- Benchmark automation script with optional BKS download and comparison
- Built-in feasibility checks and route-level reporting
Project Layout
src/: solver implementation (instance parsing, neighborhoods, local search, LNS/GES orchestration)instances/: benchmark instance files and best-known solutions tablessrc/bin/benchmark_lilim.rs: batch benchmark runner and summary generatorbenchmark_results/: optional local benchmark outputs (generated, not versioned)
Requirements
- Rust toolchain (stable, Rust 1.87+)
- Python 3.9+ (only for Python bindings)
Quick Start
Build release binary:
Run solver:
Arguments:
instance_file: path to Li & Lim instancetime_limit_secs: optional time limit in seconds (default:300)seed: optional RNG seed (default:42)initial_method: optional initial solution method:legacy(old behavior),lu2006(Lu&Dessouky 2006),ropke2006(Ropke&Pisinger 2006 sequential insertion),cluster2004(cluster-paper embedded insertion), orhosny2012(2012 PBQ best-request constructor), defaultlegacy
Example with Lu&Dessouky initial construction:
Runtime flags (environment variables):
BNB_REPAIR_ENABLE=0|1: disable/enable branch-and-bound repair inside LNS (default: enabled).
Python Package
Install locally:
Use with raw data (without instance files):
=
Benchmarking
Run a benchmark group in parallel:
Examples:
# Run all discovered instances
# Run selected instances only
# Fixed seed for all jobs
# Use Lu&Dessouky 2006 initial construction
Development
Useful local checks:
Release workflow checklist: see PUBLISHING.md.
Reproducibility Notes
- Results depend on time limit, machine, and seed.
- Benchmark script supports fixed seeds and offset seeds for parallel runs.
- The repository contains generated benchmark artifacts; refresh them when reporting new results.
License
This project is released under the MIT License. See LICENSE.
Community
- Contribution guide:
CONTRIBUTING.md - Code of conduct:
CODE_OF_CONDUCT.md - Security reporting:
SECURITY.md - Citation metadata:
CITATION.cff
Acknowledgments
- Li & Lim PDPTW benchmark instances
- SINTEF TOP PDPTW benchmark pages and best-known solutions