Metadata-Version: 2.4
Name: optiwindnet
Version: 0.1.1
Summary: Tool for designing and optimizing the electrical cable network of offshore wind farms
Author-email: DTU Wind Energy <mikf@dtu.dk>, Mauricio Souza de Alencar <ma___@dtu.dk>, Amir Arasteh <am___@dtu.dk>
License-Expression: MIT
Project-URL: Homepage, https://gitlab.windenergy.dtu.dk/TOPFARM/OptiWindNet
Project-URL: Documentation, https://optiwindnet.readthedocs.io/
Project-URL: Download, https://optiwindnet.readthedocs.io/stable/setup.html#installation
Project-URL: Issue Tracker, https://github.com/DTUWindEnergy/OptiWindNet/issues
Project-URL: Release Notes, https://github.com/DTUWindEnergy/OptiWindNet/tags
Project-URL: Source, https://github.com/DTUWindEnergy/OptiWindNet
Keywords: optimization,wind farm,network,routing
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: Programming Language :: Python :: 3
Classifier: Operating System :: OS Independent
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Scientific/Engineering
Requires-Python: >=3.11
Description-Content-Type: text/markdown
License-File: LICENSE.txt
Requires-Dist: bidict>=0.23.1
Requires-Dist: bitarray>=3.4.2
Requires-Dist: condeltri>=0.0.3
Requires-Dist: darkdetect>=0.8.0
Requires-Dist: esy.osm.pbf>=0.1.1
Requires-Dist: hybgensea>=0.0.1
Requires-Dist: makefun>=1.15.6
Requires-Dist: matplotlib>=3.10.1
Requires-Dist: networkx>=3.5
Requires-Dist: numba>=0.62.1
Requires-Dist: numpy>=2.0
Requires-Dist: ortools>=9.12.4544
Requires-Dist: pony>=0.7.18
Requires-Dist: py>=1.11.0
Requires-Dist: Pyomo>=6.9.5
Requires-Dist: PyYAML>=6.0.2
Requires-Dist: scipy>=1.15.2
Requires-Dist: shapely>=2.0.7
Requires-Dist: svg.py>=1.6.0
Requires-Dist: utm>=0.7
Provides-Extra: solvers
Requires-Dist: cplex; extra == "solvers"
Requires-Dist: gurobipy; extra == "solvers"
Requires-Dist: highspy; extra == "solvers"
Provides-Extra: test
Requires-Dist: dill; extra == "test"
Requires-Dist: coverage; extra == "test"
Requires-Dist: pytest; extra == "test"
Requires-Dist: pytest-cov; extra == "test"
Requires-Dist: psutil; extra == "test"
Requires-Dist: memory_profiler; extra == "test"
Requires-Dist: line_profiler; extra == "test"
Requires-Dist: optiwindnet[solvers]; extra == "test"
Provides-Extra: docs
Requires-Dist: sphinx; extra == "docs"
Requires-Dist: nbsphinx; extra == "docs"
Requires-Dist: myst-parser; extra == "docs"
Requires-Dist: myst-nb; extra == "docs"
Requires-Dist: furo; extra == "docs"
Requires-Dist: sphinx-versioned-docs; extra == "docs"
Requires-Dist: sphinx-autoapi; extra == "docs"
Requires-Dist: sphinx_copybutton; extra == "docs"
Requires-Dist: sphinx_sitemap; extra == "docs"
Requires-Dist: pypandoc; extra == "docs"
Requires-Dist: setuptools-scm; extra == "docs"
Dynamic: license-file

[![pipeline status](https://gitlab.windenergy.dtu.dk/TOPFARM/OptiWindNet/badges/main/pipeline.svg)](https://gitlab.windenergy.dtu.dk/TOPFARM/OptiWindNet/commits/main)
[![PyPi](https://img.shields.io/pypi/v/optiwindnet)](https://pypi.org/project/optiwindnet/)
[![License](https://img.shields.io/pypi/l/optiwindnet)](https://gitlab.windenergy.dtu.dk/TOPFARM/OptiWindNet/blob/main/LICENSE)
[![coverage report](https://gitlab.windenergy.dtu.dk/TOPFARM/OptiWindNet/badges/main/coverage.svg)](https://gitlab.windenergy.dtu.dk/TOPFARM/OptiWindNet/commits/main)
<!---
[![DOI](https://zenodo.org/badge/164115313.svg)](https://zenodo.org/badge/latestdoi/164115313)
-->

![OptiWindNet](docs/_static/OptiWindNet.svg)

OptiWindNet
===========

Tool for designing and optimizing the electrical cable network of offshore wind farms.


|Documentation:<br>[optiwindnet.readthedocs.io][docs]||
|:--|:-:|
|<ul><li>[Quickstart][quick]</li><li>[Download the Jupyter notebooks][down] used in the documentation.</li><li>[Report an issue][issue] (at GitHub mirror)</li><li>[API Reference][api]</li><li>[How to Cite][cite]</li></ul>|![FancyWindFarm](docs/_static/OptiWindNet_windfarm.svg)|

[docs]: https://optiwindnet.readthedocs.io
[quick]: https://optiwindnet.readthedocs.io/stable/notebooks/quickstart_high.html
[down]: https://gitlab.windenergy.dtu.dk/TOPFARM/OptiWindNet/-/tree/main/docs/notebooks
[issue]: https://github.com/DTUWindEnergy/OptiWindNet/issues
[api]: https://optiwindnet.readthedocs.io/stable/autoapi/index.html
[cite]: https://optiwindnet.readthedocs.io/stable/index.html#how-to-cite

Installation
------------

```
pip install optiwindnet
```

Detailed instructions in [Installation](https://optiwindnet.readthedocs.io/stable/setup.html#installation).

Requirements
------------

Python 3.10+. The use of a Python virtual environment is recommended. OptiWindNet's dependencies will be installed automatically when using `pip install optiwindnet`.

One may pre-install the dependencies in a python environment by using either:
- [requirements.txt](https://gitlab.windenergy.dtu.dk/TOPFARM/OptiWindNet/-/raw/main/requirements.txt?ref_type=heads&inline=false): `pip install -r requirements.txt`
- [environment.yml](https://gitlab.windenergy.dtu.dk/TOPFARM/OptiWindNet/-/raw/main/environment.yml?ref_type=heads&inline=false): `conda env create -f environment.yml` (name: *optiwindnet_env*)

Paper
-----

The methodology implemented in *OptiWindNet* is described in the peer-reviewed scientific article:
- Mauricio Souza de Alencar, Tuhfe Göçmen, Nicolaos A. Cutululis,
_Flexible cable routing framework for wind farm collection system optimization_,
European Journal of Operational Research,
2025, ISSN 0377-2217, <https://doi.org/10.1016/j.ejor.2025.07.069>.

```{code-block} bib
@article{
    SOUZADEALENCAR2025,
    title = {Flexible cable routing framework for wind farm collection system optimization},
    journal = {European Journal of Operational Research},
    year = {2025},
    issn = {0377-2217},
    doi = {https://doi.org/10.1016/j.ejor.2025.07.069},
    url = {https://www.sciencedirect.com/science/article/pii/S0377221725005946},
    author = {Mauricio {Souza de Alencar} and Tuhfe Göçmen and Nicolaos A. Cutululis},
    keywords = {Combinatorial optimization, Network design, Collection system, Wind farm},
}
```

Acknowledgements
----------------

The heuristics implemented in this repository (release 0.0.1) are presented and analyzed in the MSc thesis [Optimization heuristics for offshore wind power plant collection systems design](https://fulltext-gateway.cvt.dk/oafilestore?oid=62dddf809a5e7116caf943f3&targetid=62dddf80a41ba354e4ed35bc) (DTU Wind - Technical University of Denmark, July 4, 2022)

The meta-heuristic used is [vidalt/HGS-CVRP: Modern implementation of the hybrid genetic search (HGS) algorithm specialized to the capacitated vehicle routing problem (CVRP). This code also includes an additional neighborhood called SWAP\*.](https://github.com/vidalt/HGS-CVRP) via its Python bindings [chkwon/PyHygese: A Python wrapper for the Hybrid Genetic Search algorithm for Capacitated Vehicle Routing Problems (HGS-CVRP)](https://github.com/chkwon/PyHygese).

The cable routing relies on a navigation mesh generated by the library [artem-ogre/CDT: Constrained Delaunay Triangulation (C++)](https://github.com/artem-ogre/CDT) via its Python bindings - [artem-ogre/PythonCDT: Constrained Delaunay Triangulation (Python)](https://github.com/artem-ogre/PythonCDT).
