# ConstrainedShortestPaths.jl

Documentation for ConstrainedShortestPaths.

This package implements algorithms for solving **Generalized Constrained Shortest Paths** problems. It implements a simplified version of the framework from Parmentier 2017, restricted to acyclic directed graphs.

If you have any question/suggestion, feel free to create an issue or contact me.

## Overview

This package supports the following setting:

- Let $D=(V, A)$ an
**acyclic directed graph**. - Let $o, d\in V$
**origin**and**destination**vertices. - Let $\mathcal{P} \subset \mathcal{P}_{od}$ a subset of $o-d$ paths in $D$.
- Let $c$ a
**cost function**you want to minimize on $\mathcal{P}$.

The `generalized_constrained_shortest_path`

algorithm is able to solve the following shortest path problem:

\[\begin{aligned} \arg\min\quad & c(P)\\ \text{s.t.}\quad & P\in \mathcal{P} \end{aligned}\]

## Installation

To install this package, open a julia REPL and run the following command in pkg mode:

`add ConstrainedShortestPaths`

## Basic usage

Currently, this package implements three applications examples ready to use:

- The Usual shortest path problem (
`basic_shortest_path`

). - The Shortest path with linear resource constraints resource constraints (
`resource_shortest_path`

). - The Stochastic Vehicle Scheduling subproblem for the column generation formulation (
`stochastic_routing_shortest_path`

).

## Advanced usage

If your shortest path problem is not one of those listed in the Basic usage section, it is still possible to solve it with this package. To do this, first read the Mathematical background section, then follow the Implement a custom problem tutorial.