Skip to content

Commit 7510841

Browse files
Updated readme
1 parent 4cdc67c commit 7510841

File tree

4 files changed

+12
-19
lines changed

4 files changed

+12
-19
lines changed

README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55

66
# The _flowpaths_ Python Package
77

8-
This package implements solvers for decomposing weighted directed graphs into weighted paths or walks, based on (Mixed) Integer Linear Programming ((M)ILP) formulations. It supports both acyclic graphs (DAGs, decomposed into paths) and general graphs with cycles (decomposed into walks), and makes it easy to create new decomposition models.
8+
This package implements fast solvers for decomposing weighted directed graphs into weighted paths or walks, based on (Mixed) Integer Linear Programming ((M)ILP) formulations. It supports both acyclic graphs (DAGs, decomposed into paths) and general graphs with cycles (decomposed into walks), and makes it easy to create new decomposition models.
99

1010
![Overview](https://raw.githubusercontent.com/algbio/flowpaths/main/docs/overview.png)
1111

@@ -83,7 +83,7 @@ if mfd_solver.is_solved():
8383

8484
You can inherit from these classes to add weights and model-specific constraints/objectives. See [a basic example](examples/inexact_flow_solver.py). These abstract classes interface with a wrapper for popular MILP solvers, so you don't need to worry about solver-specific details.
8585

86-
4. **Fast**: Having solvers implemented using `AbstractPathModelDAG` or `AbstractWalkModelDiGraph` means that any optimization to the path-/walk-finding mechanisms benefits **all** solvers that inherit from these classes. We implement some "safety optimizations" described in [this paper](https://doi.org/10.4230/LIPIcs.ESA.2025.55) (for DAGs) and [this paper](http://arxiv.org/abs/2511.19153) (for general graphs), based on ideas first introduced in [this paper](https://doi.org/10.4230/LIPIcs.SEA.2024.14). These can provide up to **1000x speedups**, depending on the graph instance, while preserving global optimality (under some simple assumptions).
86+
4. **Fast**: Having solvers implemented using `AbstractPathModelDAG` or `AbstractWalkModelDiGraph` means that any optimization to the path-/walk-finding mechanisms benefits **all** solvers that inherit from these classes. In particular, in these abstract classes we implement "safety optimizations" described in [this paper](https://doi.org/10.4230/LIPIcs.ESA.2025.55) (for DAGs) and [this paper](http://arxiv.org/abs/2511.19153) (for general graphs), based on ideas first introduced in [this paper](https://doi.org/10.4230/LIPIcs.SEA.2024.14). These can provide up to **1000x speedups**, depending on the graph instance, while preserving global optimality (under some simple assumptions).
8787

8888
5. **Flexible inputs**: The models support graphs with flows/weights on either edges or nodes, and additional real use-case input features, such as [subpathconstraints](https://algbio.github.io/flowpaths/subpath-constraints.html) or [subset constraints](https://algbio.github.io/flowpaths/subset-constraints.html).
8989

@@ -97,7 +97,7 @@ if mfd_solver.is_solved():
9797
- The error of each edge (defined as in $k$-Least Absolute Errors above) is at most the sum of the slacks of the paths / walks going through the edge, and
9898
- The sum of path / walk slacks is minimized.
9999

100-
- [**Minimum Path Cover**](https://algbio.github.io/flowpaths/minimum-path-cover.html): Given a graph and node sets _S_ and _T_, find a minimum number of _S-T_ paths (if the graph is acyclic) or _S-T_ walks (if the graph has cycles) such that every edge appears in in at least one path or walk.
100+
- [**Minimum Path Cover**](https://algbio.github.io/flowpaths/minimum-path-cover.html): Given a graph and node sets _S_ and _T_, find a minimum number of _S-T_ paths (if the graph is acyclic) or _S-T_ walks (if the graph has cycles) such that every edge appears in at least one path or walk.
101101

102102
### Contributing
103103

docs/contributing.md

Lines changed: 0 additions & 9 deletions
This file was deleted.

docs/index.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# ![](flowpaths-logo.svg){: style="height:30px"} _flowpaths_ Python Package
22

3-
This package implements solvers for decomposing weighted directed graphs into weighted paths or walks, based on (Mixed) Integer Linear Programming ((M)ILP) formulations. It supports both acyclic graphs (DAGs, decomposed into paths) and general graphs with cycles (decomposed into walks), and makes it easy to create new decomposition models.
3+
This package implements fast solvers for decomposing weighted directed graphs into weighted paths or walks, based on (Mixed) Integer Linear Programming ((M)ILP) formulations. It supports both acyclic graphs (DAGs, decomposed into paths) and general graphs with cycles (decomposed into walks), and makes it easy to create new decomposition models.
44

55
![Overview](https://raw.githubusercontent.com/algbio/flowpaths/main/docs/overview.png)
66

@@ -74,19 +74,22 @@ if mfd_solver.is_solved():
7474

7575
You can inherit from these classes to add weights and model-specific constraints/objectives. See [a basic example](https://github.com/algbio/flowpaths/blob/main/examples/inexact_flow_solver.py). These abstract classes interface with a wrapper for popular MILP solvers, so you don't need to worry about solver-specific details.
7676

77-
4. **Fast**: Having solvers implemented using `AbstractPathModelDAG` means that any optimization to the path-finding mechanisms benefits **all** solvers that inherit from this class. We implement some "safety optimizations" described in [this paper](https://doi.org/10.4230/LIPIcs.ESA.2025.55), based on ideas first introduced in [this paper](https://doi.org/10.4230/LIPIcs.SEA.2024.14), which can provide up to **1000x speedups**, depending on the graph instance, while preserving global optimality (under some simple assumptions).
77+
4. **Fast**: Having solvers implemented using `AbstractPathModelDAG` or `AbstractWalkModelDiGraph` means that any optimization to the path-/walk-finding mechanisms benefits **all** solvers that inherit from these classes. In particular, in these abstract classes we implement "safety optimizations" described in [this paper](https://doi.org/10.4230/LIPIcs.ESA.2025.55) (for DAGs) and [this paper](http://arxiv.org/abs/2511.19153) (for general graphs), based on ideas first introduced in [this paper](https://doi.org/10.4230/LIPIcs.SEA.2024.14). These can provide up to **1000x speedups**, depending on the graph instance, while preserving global optimality (under some simple assumptions).
7878

79-
5. **Flexible inputs**: The models support graphs with flows/weights on either edges or nodes, and additional real use-case input features, such as subpath or subset constraints.
79+
5. **Flexible inputs**: The models support graphs with flows/weights on either edges or nodes, and additional real use-case input features, such as [subpathconstraints](https://algbio.github.io/flowpaths/subpath-constraints.html) or [subset constraints](https://algbio.github.io/flowpaths/subset-constraints.html).
8080

8181
### Models currently implemented
8282
- [**Minimum Flow Decomposition**](https://algbio.github.io/flowpaths/minimum-flow-decomposition.html): Given a graph with flow values on its edges (i.e. at every node different from source or sink the flow entering the node is equal to the flow exiting the node), find the minimum number of weighted paths / walks such that, for every edge, the sum of the weights of the paths going through the edge equals the flow value of the edge.
8383

84-
- [**$k$-Least Absolute Errors**](https://algbio.github.io/flowpaths/k-least-absolute-errors.html): Given a graph with weights on its edges, and a number $k$, find $k$ weighted paths / walks such that the sum of the absolute errors of each edge is minimized.
84+
- [**_k_-Least Absolute Errors**](https://algbio.github.io/flowpaths/k-least-absolute-errors.html): Given a graph with weights on its edges, and a number $k$, find $k$ weighted paths / walks such that the sum of the absolute errors of each edge is minimized.
8585
- The *error of an edge* is defined as the weight of the edge minus the sum of the weights of the paths / walks going through it.
86-
- [**$k$-Minimum Path Error**](https://algbio.github.io/flowpaths/k-min-path-error.html): Given a graph with weights on its edges, and a number $k$, find $k$ weighted paths / walks, with associated *slack* values, such that:
86+
87+
- [**_k_-Minimum Path Error**](https://algbio.github.io/flowpaths/k-min-path-error.html): Given a graph with weights on its edges, and a number $k$, find $k$ weighted paths / walks, with associated *slack* values, such that:
8788
- The error of each edge (defined as in $k$-Least Absolute Errors above) is at most the sum of the slacks of the paths / walks going through the edge, and
8889
- The sum of path / walk slacks is minimized.
90+
91+
- [**Minimum Path Cover**](https://algbio.github.io/flowpaths/minimum-path-cover.html): Given a graph and node sets _S_ and _T_, find a minimum number of _S-T_ paths (if the graph is acyclic) or _S-T_ walks (if the graph has cycles) such that every edge appears in at least one path or walk.
8992

9093
### Contributing
9194

92-
Contributions are welcome! Please read the [CONTRIBUTING.md](contributing.md) guide for how to set up a dev environment, run tests locally, and build/preview the documentation with MkDocs.
95+
Contributions are welcome! Please read the [CONTRIBUTING.md](https://github.com/algbio/flowpaths/blob/main/CONTRIBUTING.md) guide for how to set up a dev environment, run tests locally, and build/preview the documentation with [Material for MkDocs](https://squidfunk.github.io/mkdocs-material/).

mkdocs.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ nav:
66
- About: index.md
77
- FAQ: faq.md
88
- References: references.md
9-
- Contributing: contributing.md
109
- Acyclic Decomposition Models:
1110
- Minimum Flow Decomposition: minimum-flow-decomposition.md
1211
- $k$-Flow Decomposition: k-flow-decomposition.md

0 commit comments

Comments
 (0)