A collection of algorithms for the (Resource) Constrained Shortest Path Problem
Project description
A collection of algorithms for the (resource) Constrained Shortest Path (CSP) problem.
The CSP problem was popularised by Inrich 2005. It was initially introduced as a subproblem for the bus driver scheduling problem, and has since then widely studied in a variety of different settings including: the vehicle routing problem with time windows (VRPTW), the technician routing and scheduling problem, the capacitated arc-routing problem, on-demand transportation systems, and, airport ground movement; among others.
More generally, in the applied column generation framework, particularly in the scheduling related literature, the CSP problem is commonly employed to generate columns.
Therefore, this library is of interest to the operational research community, students and academics alike, that wish to solve an instance of the CSP problem.
Algorithms
Currently, the algorithms implemented include:
Monodirectional forward labeling algorithm;
Monodirectional backward labeling algorithm;
Bidirectional labeling algorithm with static halfway point;
Bidirectional labeling algorithm with dynamic halfway point Tilk et al 2017;
Heuristic Tabu search;
Greedy elimination procedure;
Greedy Randomised Adaptive Search Procedure (GRASP). Adapted from Ferone et al 2019;
Particle Swarm Optimization with combined Local and Global Expanding Neighborhood Topology (PSOLGET) (Marinakis et al 2017).
Features
Generic resource extension functions (Inrich 2005) (not restricted to additive resources);
Generic resource consumptions (not restricted to non-negative values).
Prerequisites
Conceptual background and input formatting is discussed in the docs.
Usage Examples
Please see the individual algorithms API Documentation for specific examples and more details:
BiDirectional: Bidirectional and monodirectional algorithms
GreedyElim Greedy Elimination Procedure
GRASP GRASP
PSOLGENT PSOLGENT
Please see individual algorithm documentation for examples.
Contributing
Feel free to contribute to this project either by either working trough some of issues flagged as help wanted, or raise a new issue with any bugs/improvements.
If you have a question or need help, feel free to raise an issue explaining it.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.