# Flowty
Install with
```sh
pip install flowty
```
## Windows
Install the [64-bit version of python](https://docs.python.org/3/using/windows.html).
## Linux
Install [Fortran](https://gcc.gnu.org/fortran/) to work with the [BLAS](https://www.netlib.org/blas/) and [LAPACK](https://www.netlib.org/lapack/).
On `apt-get` compatible distributions do
```sh
apt-get update
apt-get install libgfortran5
```
## Quick Start
Let's solve [the vehicle routing problem with time windows](https://docs.flowty.ai/examples/vrptw/).
The objective is to minimize the total cost of routing vehicles from a central depot to a set of customers. Each customer must be visited exactly once within a specified time window to deliver their required demand, each customer has a service time it takes to unload the vehicle (modeled within the out-going travel time), and each vehicle has a maximum capacity of goods to deliver. If a vehicle arrives early it is allowed to wait for the customer's time window to start.
```python
# Vehicle Routing Problem with Time Windows
from flowty import Model, xsum
from flowty.datasets import vrp_rep
bunch = vrp_rep.fetch_vrp_rep("solomon-1987-r1", instance="R102_025")
name, n, es, c, d, Q, t, a, b, x, y = bunch["instance"]
m = Model()
# one graph, it is identical for all vehicles
g = m.addGraph(obj=c, edges=es, source=0, sink=n - 1, L=1, U=n - 2, type="B")
# adds resources variables to the graph.
# demand and capacity
m.addResourceDisposable(
graph=g, consumptionType="V", weight=d, boundsType="V", lb=0, ub=Q, name="d"
)
# travel time and customer time windows
m.addResourceDisposable(
graph=g, consumptionType="E", weight=t, boundsType="V", lb=a, ub=b, name="t"
)
# set partition constriants ensure customers are only visited once
for i in range(n)[1:-1]:
m += xsum(x * 1 for x in g.vars if i == x.source) == 1
# packing set - at most one of these variables can be set. Helps the algorithm
for i in range(n)[1:-1]:
m.addPackingSet([x for x in g.vars if i == x.source])
status = m.optimize()
print(f"ObjectiveValue {m.objectiveValue}")
# get the variable values
for var in m.vars:
if var.x > 0:
print(f"{var.name} = {var.x}")
```
Visit [docs.flowy.ai](https://docs.flowty.ai) to get to know more.
## License
The community license is a license to the general community which may have limited
features and additional restrictions. For an unlimited commercial, academic or trial
license contact Flowty at [info@flowty.ai](mailto:info@flowty.ai).
Raw data
{
"_id": null,
"home_page": "https://flowty.ai",
"name": "flowty",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.8",
"maintainer_email": "",
"keywords": "Optimization,Nework Optimization,Combinatorial Optimization,Linear Programming,Integer Programming,Operations Research,Mathematical Programming",
"author": "Flowty",
"author_email": "info@flowty.ai",
"download_url": "",
"platform": null,
"description": "# Flowty\n\nInstall with\n\n```sh\npip install flowty\n```\n\n## Windows\n\nInstall the [64-bit version of python](https://docs.python.org/3/using/windows.html).\n\n## Linux\n\nInstall [Fortran](https://gcc.gnu.org/fortran/) to work with the [BLAS](https://www.netlib.org/blas/) and [LAPACK](https://www.netlib.org/lapack/).\n\nOn `apt-get` compatible distributions do\n\n```sh\napt-get update\napt-get install libgfortran5\n```\n\n## Quick Start\n\nLet's solve [the vehicle routing problem with time windows](https://docs.flowty.ai/examples/vrptw/). \n\nThe objective is to minimize the total cost of routing vehicles from a central depot to a set of customers. Each customer must be visited exactly once within a specified time window to deliver their required demand, each customer has a service time it takes to unload the vehicle (modeled within the out-going travel time), and each vehicle has a maximum capacity of goods to deliver. If a vehicle arrives early it is allowed to wait for the customer's time window to start.\n\n```python\n# Vehicle Routing Problem with Time Windows\n\nfrom flowty import Model, xsum\nfrom flowty.datasets import vrp_rep\n\nbunch = vrp_rep.fetch_vrp_rep(\"solomon-1987-r1\", instance=\"R102_025\")\nname, n, es, c, d, Q, t, a, b, x, y = bunch[\"instance\"]\n\nm = Model()\n\n# one graph, it is identical for all vehicles\ng = m.addGraph(obj=c, edges=es, source=0, sink=n - 1, L=1, U=n - 2, type=\"B\")\n\n# adds resources variables to the graph.\n# demand and capacity\nm.addResourceDisposable(\n graph=g, consumptionType=\"V\", weight=d, boundsType=\"V\", lb=0, ub=Q, name=\"d\"\n)\n\n# travel time and customer time windows\nm.addResourceDisposable(\n graph=g, consumptionType=\"E\", weight=t, boundsType=\"V\", lb=a, ub=b, name=\"t\"\n)\n\n# set partition constriants ensure customers are only visited once\nfor i in range(n)[1:-1]:\n m += xsum(x * 1 for x in g.vars if i == x.source) == 1\n\n# packing set - at most one of these variables can be set. Helps the algorithm\nfor i in range(n)[1:-1]:\n m.addPackingSet([x for x in g.vars if i == x.source])\n\nstatus = m.optimize()\nprint(f\"ObjectiveValue {m.objectiveValue}\")\n\n# get the variable values\nfor var in m.vars:\n if var.x > 0:\n print(f\"{var.name} = {var.x}\")\n```\n\nVisit [docs.flowy.ai](https://docs.flowty.ai) to get to know more.\n\n## License\n\nThe community license is a license to the general community which may have limited\nfeatures and additional restrictions. For an unlimited commercial, academic or trial\nlicense contact Flowty at [info@flowty.ai](mailto:info@flowty.ai).\n",
"bugtrack_url": null,
"license": "",
"summary": "Flowty Network Optimization Solver",
"version": "1.5.1",
"project_urls": {
"Homepage": "https://flowty.ai"
},
"split_keywords": [
"optimization",
"nework optimization",
"combinatorial optimization",
"linear programming",
"integer programming",
"operations research",
"mathematical programming"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "9cf65c36f741cc6868a06eb37a9e836242358c91cded6624a4343b39f7c1f2ea",
"md5": "61a8a14b7bcb7672faf7fb617fc98e2b",
"sha256": "474dcfd718e34ccff7fcc699043df3110108b35c015569849fc267f0f728081b"
},
"downloads": -1,
"filename": "flowty-1.5.1-py3-none-any.whl",
"has_sig": false,
"md5_digest": "61a8a14b7bcb7672faf7fb617fc98e2b",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.8",
"size": 6406791,
"upload_time": "2023-08-03T08:47:11",
"upload_time_iso_8601": "2023-08-03T08:47:11.945080Z",
"url": "https://files.pythonhosted.org/packages/9c/f6/5c36f741cc6868a06eb37a9e836242358c91cded6624a4343b39f7c1f2ea/flowty-1.5.1-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-08-03 08:47:11",
"github": false,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"lcname": "flowty"
}