Commit history since v0.3.1
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. a7516ea 28bb367
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. fbe7dd1
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. a7516ea
ModelOptions: deprecated in favour of NetworkConstraints; ModelOptions.to_constraints() translates existing instances. fbe7dd1 c2b7e4c
- 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. fbe7dd1 709f315 1867e9e
Features & Improvements
- Network constraints:
NetworkConstraints unifies topology, feeder routing, counts, substation limits, and balance across all routers (WindFarmNetwork(constraints=...)); validated via resolve(). 1ee37bf a7516ea 709f315
EWRouter method: defaults to 'rootlust' for branched networks (previously 'biased_EW'), and verifies that a chosen method produces the requested network topology. a7516ea
- Multi-substation balanced subtrees:
HGSRouter and hgs_cvrp() balance loads across the whole wind farm under balanced=True, matching MILP models. 5987f7e
- Substation limits in solvers: MILP models and HGS-CVRP (
hgs_cvrp(), clusterize()) enforce per-substation feeder counts and load bounds. fbe7dd1 5987f7e
- Maximum link length:
NetworkConstraints(max_link_length=...) caps individual cable section lengths, including feeders. f634730 928bc3c aebdc15
- Network constraints in LKH-3:
lkh3(constraints=...) enforces network constraints, including exact counts, balance, and feeder hard caps. 1867e9e
- LKH-3 rings: searches rings with
SPECIAL moves for shorter routes free of rogue links. 1867e9e
- HGS-CVRP warm starts:
hgs_cvrp(warmstart=S) and HGSRouter support warm-starting from previous solution topologies (requires hybgensea >= 0.2.0). 30ef21b 5bbcddb
- MILP solution pool: pool entries that
PathFinder cannot detour are skipped with a warning. f7f19a9
- Topologist:
python -m optiwindnet.topologist interactive editor for drawing network topologies and exporting TerseLinks. 2983460
- Substation-bound detours:
PathFinder(allow_root_change=False) keeps every subtree on its assigned substation. 145e17a
Bug Fixes
- LKH-3 short time limits:
lkh3() raises ValueError instead of hanging when time_limit is shorter than LKH-3 preprocessing. d48e364
- LKH-3 invalid solutions:
lkh3() raises ValueError on rogue links or unserved substations instead of returning corrupt topologies or failing assertions. 1867e9e
- LKH-3 warm starts:
lkh3(warmstart=S) starts from individual routes rather than packing all turbines into a single route. 1867e9e
- Concurrent SCIP crash: freeing concurrent SCIP models no longer crashes the interpreter. a997f13
- PathFinder paths: detours avoid unnecessary bends at clear vertices, and wall traversals no longer drop promising paths prematurely. 02f7231 3ee49ef
- Feeder touches: crossing checks detect feeders touching nodes off-line by numerical rounding errors. ef51186
- Rogue links: warns when a solution contains links absent from the mesh or when routed feeders cross them. f6f7b35
Refactoring & Maintenance
- Dependencies: replace
condeltri with pythoncdt >=2.0.0 for constrained Delaunay triangulation.