OptiWindNet Documentation¶
OptiWindNet = Optimize Windfarm Network
(distributed under the MIT License)
Python Package Index (PyPI) |
|
Source code repository |
|
Issue tracker |
|
Jupyter notebooks used in this manual |
https://gitlab.windenergy.dtu.dk/TOPFARM/OptiWindNet/-/tree/main/docs/notebooks |
About OptiWindNet¶
OptiWindNet is an electrical network design tool for offshore wind farms developed at the Technical University of Denmark – DTU. The package offers a framework to obtain optimal or near-optimal cable routes for a given turbine layout within the cable-laying boundaries. It provides high-level access to heuristic, meta-heuristic and mathematical optimization approaches to the problem.
The tool is distributed as an open-source Python package that is suitable for use within an interactive Python session (e.g. Jupyter notebook). Alternatively, OptiWindNet’s API can be invoked directly from another application.
What can OptiWindNet do?¶
Optimize the network of array cables;
Route the cables so as to avoid crossings;
Assign cable types and calculate network costs;
Use different optimization approaches according to the preferred time/quality trade-off;
Employ user-provided models and objective functions within the mathematical optimization approach.
Getting Started¶
Setup your Python environment and check the Quickstart to begin using OptiWindNet.
How to Cite¶
A peer-reviewed scientific article explaining the OptiWindNet framework and benchmarking it against state-of-the art methods is available (open-access) at:
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.
@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},
}
The OptiWindNet software package can be cited as:
Mauricio Souza de Alencar, Amir Arasteh and Mikkel Friis-Møller. OptiWindNet: An open-source wind farm electrical network optimization tool, DTU Wind and Energy Systems, Technical University of Denmark (2025, March), url: https://gitlab.windenergy.dtu.dk/TOPFARM/OptiWindNet
@article{
optiwindnet_2025,
title={OptiWindNet: Tool for designing and optimizing the electrical cable network of offshore wind farms},
author={Mauricio {Souza de Alencar} and Amir Arasteh and Mikkel Friis-Møller},
url="https://gitlab.windenergy.dtu.dk/TOPFARM/OptiWindNet",
publisher={DTU Wind and Energy Systems, Technical University of Denmark},
year={2025},
month={4}
}
- Setup
- 🚀 Quick Start
- Network/Router vs Advanced API
- Network/Router API
- Basic usage
- Inputting Data
- WindFarmNetwork/Router
- Load Location Data Repositories
- Plotting
- Debugging
- Borders, Obstacles & Buffering
- Gradient
- ModelOptions vs SolverOptions
- A Large and Complex Wind Farm
- IEA Wind Task 55
- Router examples
- Topfarm integration
- Basic usage
- Advanced API
- Overview
- Quickstart
- Data Input
- Included locations
- Example – Taylor 2023
- Example – IEA Wind 740-10-MW
- Plotting
- Hybrid Genetic Search meta-heuristic example
- Esau-Williams Presolver example
- Crossing-Preventing Esau-Williams (CPEW) example
- Obstacle-Bypassing Esau-Williams (OBEW) example
- Non-Branching Esau-Williams (NBEW) example
- Lin-Kernighan-Helsgaun meta-heuristic example
- OR-Tools example
- Gurobi example
- CPLEX example
- HiGHS example
- SCIP example
- CBC example
- Theory
- Paper
- 3.1 Sparsified vs. complete graphs as search space
- 3.2 Comparison with MILP model from literature
- 3.3/4/5 Impact/Comparison/Dealing
- 3.6.1 Yi et at 2019
- 3.6.2 Cazzaro and Pisinger 2022 Fig. 6
- 3.6.2 Cazzaro and Pisinger 2022 G-140 and G-210
- 3.6.3 Taylor et al 2023
- API Reference
- optiwindnet
- Submodules
- optiwindnet.MILP
- optiwindnet.api
- Module Contents
loggerRouterWindFarmNetworkWindFarmNetwork.nameWindFarmNetwork.handleWindFarmNetwork.routerWindFarmNetwork.cablesWindFarmNetwork.verboseWindFarmNetwork.LWindFarmNetwork.polygonWindFarmNetwork.PWindFarmNetwork.AWindFarmNetwork.SWindFarmNetwork.GWindFarmNetwork.buffer_distWindFarmNetwork.cost()WindFarmNetwork.length()WindFarmNetwork.plot_original_vs_buffered()WindFarmNetwork.from_yaml()WindFarmNetwork.from_pbf()WindFarmNetwork.from_windIO()WindFarmNetwork.plot()WindFarmNetwork.plot_location()WindFarmNetwork.plot_available_links()WindFarmNetwork.plot_navigation_mesh()WindFarmNetwork.plot_selected_links()WindFarmNetwork.terse_links()WindFarmNetwork.update_from_terse_links()WindFarmNetwork.get_network()WindFarmNetwork.map_detour_vertex()WindFarmNetwork.merge_obstacles_into_border()WindFarmNetwork.add_buffer()WindFarmNetwork.gradient()WindFarmNetwork.optimize()WindFarmNetwork.solution_info()
EWRouterHGSRouterMILPRouter
- Module Contents
- optiwindnet.augmentation
- optiwindnet.baselines
- optiwindnet.clustering
- optiwindnet.crossings
- optiwindnet.db
- optiwindnet.geometric
- Module Contents
triangle_AR()point_d2line()is_same_side()any_pairs_opposite_edge()rotate()angle_numpy()angle()angle_helpers()angle_oracles_factory()find_edges_bbox_overlaps()is_crossing_numpy()is_crossing_no_bbox()is_crossing()is_bunch_split_by_corner()is_triangle_pair_a_convex_quadrilateral()perimeter()assign_root()get_crossings_map()complete_graph()minimum_spanning_forest()rotation_checkers_factory()rotating_calipers()area_from_polygon_vertices()add_link_cosines()
- Module Contents
- optiwindnet.heuristics
- optiwindnet.importer
- optiwindnet.interarraylib
- Module Contents
assign_cables()describe_G()pathdist()count_diagonals()bfs_subtree_loads()calcload()site_fingerprint()fun_fingerprint()L_from_site()G_from_S()S_from_G()L_from_G()S_from_terse_links()terse_links_from_S()as_single_root()as_normalized()as_rescaled()as_undetoured()as_hooked_to_nearest()as_hooked_to_head()as_stratified_vertices()make_remap()scaffolded()
- Module Contents
- optiwindnet.mesh
- optiwindnet.pathfinding
- Module Contents
PathFinderPathFinder.iterations_limitPathFinder.traversals_limitPathFinder.promising_marginPathFinder.bad_streak_limitPathFinder.iterationsPathFinder.STPathFinder.fnTPathFinder.d2rootsPathFinder.d2rootsRankPathFinder.predetour_lengthPathFinder.branchedPathFinder.hooks2checkPathFinder.num_revisitsPathFinder.adv_counterPathFinder.get_best_path()PathFinder.best_paths_overlay()PathFinder.scaffolded()PathFinder.create_detours()
- Module Contents
- optiwindnet.plotting
- optiwindnet.repair
- optiwindnet.svg
- optiwindnet.synthetic
- optiwindnet.themes
- optiwindnet.version
- Package Contents
- Submodules
- optiwindnet