Tags give the ability to mark specific points in history as being important
-
-
v0.3.2
protectedcfbc2ce1 · ·[Commit history since v0.3.1](https://gitlab.windenergy.dtu.dk/TOPFARM/OptiWindNet/-/compare/v0.3.1...v0.3.2) ## Breaking Changes ### Network–Router API - **Feeder counts below the minimum:** `HGSRouter(feeder_limit)` and `hgs_cvrp(vehicles)` below the minimum raise `ValueError` instead of clamping to it with a warning. a7516eaa 28bb367e ### Advanced API - **MILP solver details & attributes:** solutions record count bounds in `solver_details` instead of `max_feeders`, and `Solver` instances store `constraints` and `bounds` instead of `model_options`. fbe7dd15 ## Deprecations (removal in v0.4.0) - **Router options:** `HGSRouter(feeder_limit, feeder_exact, balanced, ringed)`, `EWRouter(feeder_route)`, and `MILPRouter(model_options)` are deprecated in favour of `NetworkConstraints`. a7516eaa - **`ModelOptions`:** deprecated in favour of `NetworkConstraints`; `ModelOptions.to_constraints()` translates existing instances. fbe7dd15 c2b7e4ce - **Advanced API options:** count and topology arguments to `Solver.set_problem()`, `make_min_length_model()`, `hgs_cvrp()`, and `lkh3()` are deprecated in favour of `constraints` or `bounds`, and `clusterize(capacity)` in favour of `group_capacity`. fbe7dd15 709f315c 1867e9ef ## Features & Improvements - **Network constraints:** `NetworkConstraints` unifies topology, feeder routing, counts, substation limits, and balance across all routers (`WindFarmNetwork(constraints=...)`); validated via `resolve()`. 1ee37bf8 a7516eaa 709f315c - **`EWRouter` method:** defaults to `'rootlust'` for branched networks (previously `'biased_EW'`), and verifies that a chosen method produces the requested network topology. a7516eaa - **Multi-substation balanced subtrees:** `HGSRouter` and `hgs_cvrp()` balance loads across the whole wind farm under `balanced=True`, matching MILP models. 5987f7eb - **Substation limits in solvers:** MILP models and HGS-CVRP (`hgs_cvrp()`, `clusterize()`) enforce per-substation feeder counts and load bounds. fbe7dd15 5987f7eb - **Maximum link length:** `NetworkConstraints(max_link_length=...)` caps individual cable section lengths, including feeders. f6347308 928bc3c8 aebdc158 - **Network constraints in LKH-3:** `lkh3(constraints=...)` enforces network constraints, including exact counts, balance, and feeder hard caps. 1867e9ef - **LKH-3 rings:** searches rings with `SPECIAL` moves for shorter routes free of rogue links. 1867e9ef - **HGS-CVRP warm starts:** `hgs_cvrp(warmstart=S)` and `HGSRouter` support warm-starting from previous solution topologies (requires `hybgensea >= 0.2.0`). 30ef21b6 5bbcddb8 - **MILP solution pool:** pool entries that `PathFinder` cannot detour are skipped with a warning. f7f19a93 - **Topologist:** `python -m optiwindnet.topologist` interactive editor for drawing network topologies and exporting `TerseLinks`. 29834609 - **Substation-bound detours:** `PathFinder(allow_root_change=False)` keeps every subtree on its assigned substation. 145e17a5 ## Bug Fixes - **LKH-3 short time limits:** `lkh3()` raises `ValueError` instead of hanging when `time_limit` is shorter than LKH-3 preprocessing. d48e364a - **LKH-3 invalid solutions:** `lkh3()` raises `ValueError` on rogue links or unserved substations instead of returning corrupt topologies or failing assertions. 1867e9ef - **LKH-3 warm starts:** `lkh3(warmstart=S)` starts from individual routes rather than packing all turbines into a single route. 1867e9ef - **Concurrent SCIP crash:** freeing concurrent SCIP models no longer crashes the interpreter. a997f136 - **PathFinder paths:** detours avoid unnecessary bends at clear vertices, and wall traversals no longer drop promising paths prematurely. 02f72313 3ee49ef7 - **Feeder touches:** crossing checks detect feeders touching nodes off-line by numerical rounding errors. ef511861 - **Rogue links:** warns when a solution contains links absent from the mesh or when routed feeders cross them. f6f7b359 ## Refactoring & Maintenance - **Dependencies:** replace `condeltri` with `pythoncdt >=2.0.0` for constrained Delaunay triangulation.
-
v0.3.1
protected4f812d90 · ·[Commit history since v0.3.0](https://gitlab.windenergy.dtu.dk/TOPFARM/OptiWindNet/-/compare/v0.3.0...HEAD) - **Automatic MILP warm starts:** `MILPRouter` builds a warm start for a fresh solve by default. `warmup=False` disables both construction and reuse; `warmup_time` sets the construction budget (default 0.2 s). 29ab4cd - **Ringed feeder limits:** `HGSRouter.feeder_limit` counts substation connections, so it allows half as many rings as before. Odd limits raise `ValueError`. f8d0c13 - **Power units:** with `power_unit` supplied, turbine powers and cable capacities are nominal power in that unit. Without it, they must be integer inflow; existing power declarations on the location are discarded. efa6d5b - **Cable reassignment:** assigning cables too small for the existing solution invalidates it instead of raising `ValueError`; call `optimize()` again. A solution that fits is retained and its cable types reassigned. efa6d5b - **HiGHS options:** `'highs'` uses native `highspy` and accepts native HiGHS option names only. Use `'pyomo.highs'` for the previous backend and its appsi configuration. c92d28e - **Buffered-location plots:** `plot_original_vs_buffered()` returns SVG by default, matching the other plot methods. Pass `ax` for Matplotlib. 6ce61fc - **Keyword-only problem setup:** all `Solver.set_problem()` arguments after `P, A`, including `capacity` and `model_options`, must be named. e4e8783 - **Terminal demand:** integer solver demand is stored as `'inflow'`, defaulting to one; `'power'` denotes nominal physical power. Rename integer-demand attributes or declare nominal power with `loads.set_terminal_power()`. 85bfaf3 dd6d90a - **Mixed-power solves:** sites declaring unequal power require `capacity_nominal`, including in `TerseLinks` decoders. `EWRouter`/`constructor()` reject nonunitary inflow; HGS and LKH support it only for unbalanced, single-substation radial solves. MILP rejects nonunitary ringed models and feeder limits `'minimum'`/`'min_plus1/2/3'`. b627575 17d2c20 54904b2 - **Imported power:** YAML and OSM importers, and `load_repository()`, read declared turbine power by default. Pass `read_powers=False` for turbine-count inputs; bundled Borssele and Walney Extension declare unequal powers. 05519b1 - **Persistence:** `pack_G()` and `store_G()` reject routesets with unequal power or nonunitary inflow because the storage schema has no terminal-power field. Equal-power attributes remain storable. dd6d90a - **Enum options:** direct `make_min_length_model()` calls require enum values for `topology`, `feeder_route`, and `feeder_limit`; strings raise `TypeError`. `ModelOptions` still accepts strings. 7aeda31 - **LKH balancing:** `lkh3(balanced=True)` raises `NotImplementedError` because LKH did not enforce it. Use `hgs_cvrp(balanced=True)`. ce3df91 - **Incumbent access:** `Solver.get_incumbent_topology()` is removed. Use `get_solution()` for routed results, or `S_from_linkbits(solver.incumbent_linkbits, A)` followed by `calcload()` or `split_rings_and_calc_loads()` for an unrouted topology. 531dcf0 - **Crossing diagnostics:** `crossings.describe_crossings()` is removed; use `validate_routeset()` for geometric validation. c123ed2 - **Ring helpers:** `add_ring_to_S()` and `rings_from_S()` are private implementation details and no longer public exports. fd27af0 c4c8486 - **Baseline utilities:** `optiwindnet.baselines.utils` and its distance-matrix utilities are removed. d0c5e88 - **Deprecated imports:** relocated `interarraylib` functions and classes remain available through aliases that emit `DeprecationWarning`, scheduled for removal in v0.4.0. Import from `converting`, `loads`, `terse`, `transforming`, `validating`, or `presenting`; `fingerprint` similarly delegates to `identity`. 6bc0212 c123ed2 - **Method identities:** HGS and LKH record `balanced`, `ringed`, `repair`, and `max_retries` in `method_options`. Their stored method digests change even for settings identical to earlier runs. 7708d17 - **Warm-start validation:** infeasible starts consistently raise `OWNWarmupFailed` at the solver boundary; `MILPRouter` handles replacement or cold-solve fallback. 56e3ba6 c92d28e - **Buffering helpers:** `buffer_border_obs()` returns only the location graph; `plot_org_buff()` is removed in favor of the standard plotting paths. 6ce61fc - **Diagonal maps:** mesh diagonals use `utils.BiMap`; mutate the forward mapping, not its `inv` dictionary. Previously stored `bidict` mappings remain supported. bd2eff7 - **Native solver conflicts:** `solver_factory()` rejects loading incompatible native solver packages in one interpreter with `RuntimeError`. be72526 - **Mixed turbine powers:** `WindFarmNetwork` accepts nominal powers and cable capacities in an explicit unit, quantizes demands per solve with `power_rtol` (default 0.01), and exports network loads in nominal units. efa6d5b dd6d90a b627575 - **Power declarations and quantization:** `set_terminal_power()` stores exact nominal ratings; `quantize_for_capacity()` preserves which turbine combinations fit a cable. `calcload(nominal=True)` and `assign_cables()` support nominal loads and capacities. dd6d90a - **Power import:** YAML supports turbine-model blocks or label prefixes; OSM reads `generator:output:electricity`. 05519b1 - **Demand-aware loads:** load calculation and topology conversion preserve terminal inflow and verify coverage independently of its magnitude. f1166ed 85bfaf3 - **Demand-aware MILP bounds:** flow bounds account for each terminal's inflow, tightening the model for unequal demands. 6d1b96f 17d2c20 - **Demand-aware baselines:** HGS and LKH pass supported nonunitary inflows as customer demands; LKH checks route loads when retrying capacity violations. 68bfd13 95db911 - **Exact ring counts:** balanced `hgs_cvrp(ringed=True, vehicles_exact=True)` pins the ring count, up to `T // 2`; `HGSRouter(feeder_exact=True)` exposes this through feeder counts. 7df0a6e - **Broader MILP warm starts:** construction covers more balanced and feeder-limited models, derives counts from the model's bounds, and respects the heuristic's inflow support. 29ab4cd b6848b7 7df0a6e - **Native HiGHS:** the `highspy` backend ranks saved improving solutions by routed length. `'pyomo.highs'` remains available, and `'pyomo.cbc'` explicitly names the existing `'cbc'` backend. c92d28e - **CBCbox:** `'ortools.cbcbox'` builds with MathOpt and uses the CBC executable supplied by `cbcbox`, with warm-start support and DINS enabled by default. 7e3d9db b5f888b - **Complete-graph baselines:** HGS and LKH consistently support complete solves, explicitly or through edgeless input graphs; mesh-based repair is rejected for these solves. d0c5e88 - **Canonical link bits:** candidate links have a shared order across producers; solutions carry a compact, solver-independent link representation. b781c12 56a2443 - **Solution identities:** `topology_id()` and `linkset_id()` identify topologies and their candidate-link sets; `SolutionInfo` exposes `topology_id`. 4f8e55b 2c5d8d2 1c8ee72 - **Topology reconstruction:** `S_from_linkbits()` decodes a solution against its available-links graph. 9152a5f - **Solution summaries:** `SolutionInfo` has a column-aligned summary, and `SvgRepr` reports solution properties alongside configuration. 7140040 e125fde - **Power-aware plots:** turbine symbols and legends distinguish ratings; `node_tag='power'` and `'load_nominal'` label nominal values. a143825 - **Tight SVG plots:** `tight=True` trims the viewBox; legends wrap to fit, and opaque backgrounds cover the final bounds. ddacdbb - **Pre-buffer boundaries:** location plots overlay the original border and obstacles on their buffered versions. 6ce61fc - **Warm-start recovery:** failed construction falls back to a cold MILP solve; SCIP permits repeated solves on an already-solved model. 56e3ba6 - **PathFinder robustness:** searches converge more reliably on open layouts and bend at collinear turbines instead of routing directly over them. c61a217 - **Straight feeders over turbines:** MILP models let a straight feeder pass over a turbine whose links stay on one side. a25dde4 9ccfdae - **Ring geometry:** route decomposition covers each ring edge once, and crossing checks accept root closures and corridors shared by ring arms. c82c057 - **Validation:** topology and routeset checks cover stored loads, connectivity, capacity, orientation, and geometry, including self-intersections and branch splits. 6f1c125 - **Corridor foldbacks:** geometric validation accepts noncrossing retraces and detects crossings at shared-run exits more accurately. ad6fa98 - **Repair crossings:** conflict checks avoid false rejections, missed crossings, and `KeyError` on remapped diagonals. 822c5cb - **Nearly straight quadrilaterals:** convexity tests reject spurious diagonals over collinear turbines. Rebuilt meshes can therefore omit links present in older stored routesets. 654360a - **Rehooked loads:** `as_hooked_to_nearest()` clears stale loads on clone vertices before recalculation. d4bf19d - **Solver options:** Gurobi and CPLEX instances no longer share mutable option dictionaries. 31fb1c2 - **OR-Tools HiGHS options:** options reach the correctly typed HiGHS parameter maps. 146c5e9 - **Verbose output:** HGSRouter forwards its verbose flag, OR-Tools log forwarding recognizes the backend family, and CBCbox prints output when requested. 6c4e778 56e3ba6 76a6ff1 - **Rootless SVG plots:** graphs containing only borders and obstacles can be drawn without substation-slice errors. 97be6b3 - **Multi-substation MILP models:** only each terminal's feeder to its closest substation, by contour-adjusted distance, remains available. c2c680f - **MILP search:** flow-variable integrality is implied instead of branched on; CBC defaults are retuned for that formulation. db5a83a 9e043b0 - **Deferred topology decoding:** MILP searches retain incumbent link bits and decode topologies only when retrieving or ranking solutions. 531dcf0 - **Mesh construction:** triangulation uses CDT's NumPy array API, and contour detours use a lean A* search. 26014fe 8dfe558 - **Geometric tests:** root visibility uses a Numba kernel with Shapely fallback; quadrilateral tests avoid repeated NumPy indexing and dispatch. 9256daa c49317d - **PathFinder inner loops:** list-based coordinates, direct adjacency access, and guarded debug calls reduce overhead. 4efefee f580ad1 a1b7c0b - **Diagonal maps:** dict-based `BiMap` speeds map construction and crossing lookups. bd2eff7 - **Load calculation:** iterative traversal avoids graph-view overhead and recursion-depth limits. 8dd0763 - **API imports:** Matplotlib loads only when a Matplotlib plot is requested. 6ce61fc - **Module organization:** `interarraylib` is split into `identity`, `loads`, `converting`, `transforming`, and `validating`, with text rendering in `presenting` and encodings in `terse`. Shared problem setup lives in the base `Solver`. 2c5d8d2 c123ed2 e4e8783 - **Path annotations:** YAML constructors explicitly accept `Path` as well as `str`, matching existing runtime behavior. 628faf1 - **Regression identities:** mesh and solver tests use canonical link-set and topology identities. ce5c9b6 97173ce - **Sweep harness:** resumable A/B experiments record code state, metrics, and reconstructible solutions. bb3932d - **Code checks:** linting, formatting, and type checking are enforced in CI, with declared tooling and stub dependencies. 9ce1a11 e63eb9b 9db83cf - **Dependencies:** minimum versions rise to `condeltri 0.0.6` and `peewee 3.17.9`; `xxhash` supplies in-memory identities. 26014fe 76947c9 4f8e55b - **Manual and guides:** reorganized navigation, paired API tutorials, and expanded solver, power, validation, and warm-start references. b310495 d066b24 c7e0b24 - **Notebook results:** stochastic examples specify seeds, solution summaries replace routine solver logs, and published outputs are refreshed. 6e5ccc4 9fe41cb
-
vault/complete-graph_linkset_arithmetic_encoder
protected4198fcc1 · ·functional code, but not worth using at the time
-
v0.3.0
protected30d385f4 · ·[Commit history since v0.2.3](https://gitlab.windenergy.dtu.dk/TOPFARM/OptiWindNet/-/compare/v0.2.3...v0.3.0) This release adds library-wide support for **ringed** cable networks (those with cable cycles or "loops") – check the documentation for details. - New `topology=` alternative: `'ringed'` or `Topology.RINGED`. - Solution graphs now carry a mandatory `topology` attribute. The new `Topology`, `ModelOptions`, and self-describing `TerseLinks` types make solver configuration, warm starts, and solution exchange topology-aware. - MILP users can now retrieve an incumbent topology skipping `PathFinder` calls with `.get_incumbent_topology()`. - Multi-root clustering was rewritten to keep turbines closer to their substations without adding feeders. HGS and LKH-3 now handle empty clusters. - Validation now reports topology, load, capacity, and crossing violations without modifying the graph. `validate_routeset()` moved from `optiwindnet.crossings` to `optiwindnet.interarraylib` and now returns `list[str]`; `clusterize()` now returns only the cluster list. - Planar-embedding generation is about 1.5 times faster, and Poisson-disc site generation avoids more unnecessary border and obstacle checks. - Solver recovery and retry handling was improved for SCIP and FiberSCIP, including concurrent SCIP use on Windows. Documentation now includes dedicated guides for topology choices, ringed networks, and multi-substation clustering. - The legacy EW implementations (`ClassicEW`, `CPEW`, `NBEW`, `OBEW`, `EW_presolver`) and `optiwindnet.interface` were removed; use `heuristics.constructor()` or the `WindFarmNetwork` router API. - `hgs_multiroot()` and `iterative_hgs_cvrp()` were removed in favor of `hgs_cvrp()`; `lkh()` and `iterative_lkh()` were removed in favor of `lkh3()`. - The new implementations are more capable than the ones they replace, please report if you find a regression. - Major overhaul of the test scripts.
-
v0.2.3
protected40cfb382 · ·OptiWindNet v0.2.3 Drop-in replacement for v0.2.2. The APIs deprecated in v0.2.2 remain available (removal planned for v0.3). Balanced subtrees: balanced=True is now enforced as an exact bound on both the MILP models and HGS, so subtree loads differ by at most one unit. Exact feeder count: pin the number of feeders with feeder_limit="exactly" (MILP) or feeder_exact=True (HGS), instead of only bounding it from above. Reversible lat/lon: L_from_yaml() and L_from_pbf() project into the dominant UTM zone and store it, so coordinates can be mapped back to lat/lon. Concurrent HiGHS: the pyomo HiGHS solver now runs a concurrent tree search (requires highspy >= 1.15). EWRouter exposes the constructor's method and bias_margin parameters. New locations: Revolution, Sunrise, Hornsea 2, Norfolk Vanguard West, East Anglia 3, Hollandse Kust Noord. Fixes: multi-root warmstart eligibility, PathFinder dead-end chains, scaffolded() primed-edge conversion, and sexagesimal coordinate parsing.
-
v0.2.2
protected75aedcac · ·OptiWindNet v0.2.2 This release focuses on visualization, heuristic consolidation, LKH parity, and routing robustness. High-level plotting now defaults to the interactive vector SVG backend for cleaner notebook output, while Matplotlib remains available through explicit `ax` handling. SVG plotting also gains feature parity with `gplot()` for labels, boundary and obstacle tags, and legends. Routing improvements include the new unified `heuristics.constructor()` path, expanded `EWRouter` capabilities including radial and rootlust methods, and a feature-complete `lkh3()` entry point with multi-root support, clustering, warm starts, retries, crossing repair, and richer metadata. PathFinder detours are substantially more robust around boundaries and exclusion zones. The release also adds Shapely-based geometric crossing diagnostics, more informative `repr()` output for high-level API objects, shorter substation labels in packaged datasets, Python 3.11-3.14 support metadata, stricter deprecation testing, and several performance and maintenance improvements. Breaking change: root-assignment and link-blockage helper functions moved from `optiwindnet.geometric` to `optiwindnet.interarraylib`. Import `add_terminal_closest_root()`, `add_link_blockmap()`, and `add_link_cosines()` from `optiwindnet.interarraylib`.
-
v0.2.1
protected3462f93b · ·Breaking - db v4 schema: 'num_gates' renamed to 'feeders_per_root'; dropped 'valid', 'is_normalized', 'stuntC'. migrate.py accepts v2 and v3. Highlights - OR-Tools MILP backend switched to MathOpt API (unified wrapper). - Pyomo CPLEX/Gurobi switched to persistent interfaces. - PathFinder: 'A' now mandatory; improved heuristics and defaults. - LKH: capacity-violation-triggered iterations; new 'warmstart' arg. - Better pre-optimization estimate of obstructed feeder lengths. - Context-managed database connection API with 'timeout' argument. - CI matrix on Python 3.11-3.14 (default 3.14). Fixes - Numerous PathFinder and make_planar_embedding robustness fixes. - validate_routeset detour-range and touchpoint corrections. - SQLite WAL mode removed (issues on shared clusters). - Stunt vertices no longer placed in G. - migrate.py ImportError fixed.
-
v0.2.0
protectedf18ed06b · ·- **HGS-CVRP interface unified**: `baselines.hgs` functions `hgs_multiroot()` and `iterative_hgs_cvrp()` are deprecated; `hgs_cvrp()` replaces them with no loss in functionality. Users of HGSRouter from the Network/Router API will not notice the change. - **Database format updated to v3**: Switched from Pony ORM (incompatible with Python 3.13+) to Peewee. Use `python -m optiwindnet.db.migrate input.v2.sqlite output.v3.sqlite` to migrate existing databases. - Obstacles are now supported in `turbinate()` and `poisson_disc_filler()`. - `as_normalized()` now works also with `L`. - Replaced `multiprocessing.Pool` with `concurrent.futures.ThreadPoolExecutor` in HGS-CVRP calls, enabling concurrent solver instances without the quirks of the multiprocessing module. This requires a new version (v0.1.1+) of dependency hybgensea. - Removed dependency `py`. - Fixed potential infinite loop in `PathFinder` for inconsistent graphs.
-
v0.1.6
protected3ee6c9da · ·Drop-in replacement for v0.1.5. This release provides maily two important fixes: - fix bugs caused by ortools v9.15.6755 released on 2026-01-12 - remove a duplicate turbine from the included location Gangkou 2 In addition, the graph attribute 'creator' of solutions produced by OWN was reverted back to using the naming convention adopted in earlier OWN versions, which includes the 'pyomo' string if the solver was called through it (e.g. 'MILP.pyomo.cplex' instead of 'MILP.cplex').
-
v0.1.5
protectede131eca4 · ·Drop-in replacement for v0.1.4. - Added new offshore wind locations: Dogger Bank B/C, Coastal Virginia, Inch Cape, Changhua 1, Gangkou 1/2, Yunlin, Noirmoutier, Tréport, Borkum Riffgrund 3, He Dreiht. - Experimental **FiberSCIP (fscip)** solver support (system call, file-based interface). - Improved automatic `landscape_angle` calculation - Added `as_obstacle_free()` method to remove location obstacles; improved `as_single_root()`. - `.osm.pbf` parsing now prioritizes tag `ref` over `name` for node labels. - Fixed dangling reference in diagonals (`make_planar_embedding()`) which could cause errors when checking for crossings. - Applied rounding in `_link_val()`/`_flow_val()` for MILP Solvers CPLEX and SCIP to eliminate tiny non-zero values (error manifested as cyclic solutions). - Corrected setting of `B` in `L_from_windIO()`. - Resolved `_hull_processor()` edge case (wrong P for Yunlin). - Ensured roots are added to solution topology `S` even if disconnected. - Enforced integer values for SCIP model variables. - Updated deprecated Shapely `buffer()` argument name. - Adjusted graph attributes in MILP solvers. - Multiple robustness improvements in tests and solver handling.
-
v0.1.4
protected43cc7619 · ·Drop-in replacement for v0.1.3. - gplot() and svgplot() now draw links with different line thickness to represent cable type (after assign_cables() is called) - improve number formatting inside infobox of gplot() and svgplot() - switch SCIP modelling from Pyomo to PySCIPOpt, enabling the launching of concurrent solvers for the same problem (competitive mode) - refactor MILP code for reducing code duplication and improving consistency between model descriptions for the different APIs - add information on how to install missing solvers when a requested solver is not available - bump dependency NetworkX version to 3.6 (resolves pickling issues with nx.PlanarEmbedding) - update the documentation to reflect the changes involving solver SCIP and plotting functions - fix the assignment of graph attributes 'creator' (all solvers) and 'runtime' (scip)
-
v0.0.6
protected40175660 · ·- Almost a drop-in replacement for v0.0.5 - single existing API change: argument name of HGS meta-heuristics: from max_reruns to max_retries - Introduction of Network/Router high-level API for easier on-boarding of new users - Two new components -- WindFarmNetwork and Router -- expose most of OWN's features - Major expansion and improvement of the documentation - Improved the Advanced API docs - Fully documented the Network/Router API - Added Topfarm integration example - Added the OptiWindNet logo - Added automated code testing based on pytest and tests for the main components - MILP model warm-starting is now checked for feasibility before invoking the solver (Pyomo-only) - Silenced warnings of Pyomo-based solvers when the search times out before the gap is reached - Other small fixes and improvements
-
v0.0.5
protected0d246567 · ·- drop-in replacement for v0.0.4 - gplot()' options improvements: - 'node_tag=True' plots node numbers - 'node_tag="load"' now also plots the roots' loads - 'tag_border=True' plots numbers of border/obstacle vertices - gplot() and svgplot() now can plot sites without borders - bug fixes and improvements in path-finding - bug fixes and improvements in navigation mesh generation - mesh generation now can handle terminals placed on border lines - some paperdb incomplete or incorrect entries were fixed - other small fixes and improvements
-
v0.0.4
protected83f1b0a4 · ·- fixed exception AttributeError on MacOS ('Process' object has no attribute 'cpu_affinity') - added 3 more locations (Hollandse Kust Zuid, Vineyard 1, Sofia) - enabled easy wind farm creation and import using JOSM (external program with GUI) - many improvements in docstrings and documentation in general