optiwindnet.baselines.hgsΒΆ
Module ContentsΒΆ
- optiwindnet.baselines.hgs.hgs_cvrp(A: networkx.Graph, *, capacity: float, time_limit: float, vehicles: int | None = None, vehicles_exact: bool = False, seed: int | None = None, keep_log: bool = False, repair: bool = True, max_retries: int = 10, balanced: bool = False, log_callback: Callable | None = None) networkx.Graph[source]ΒΆ
Solves the OCVRP using HGS-CVRP with links from
A.Wraps HybGenSea, which provides bindings to the HGS-CVRP library (Hybrid Genetic Search solver for Capacitated Vehicle Routing Problems). This function uses it to solve an Open-CVRP i.e., vehicles do not return to the depot.
Normalization of input graph is recommended before calling this function.
For single-root problems, the solver runs on the full graph. For multi-root problems, the graph is clustered and each cluster is solved concurrently.
By default,
vehiclesis an upper bound on the feeder count: HGS-CVRP is free to use fewer, which it normally does, since a shorter solution seldom needs more than the minimumceil(T / capacity)feeders. Passvehicles_exact=Trueto pin the count tovehiclesinstead. This is only implemented together withbalanced=True: the slack nodes that make the loads balanced also make every route come out full, so no route can be left empty and the feeder count is necessarilyvehicles.For multi-root instances, the vehicles (feeders) parameter can only be left undefined (meaning unlimited) or set to the minimum feasible value. Any other value results in a warning and the minimum being used, or, if
vehicles_exact=True, in aValueError.If
repair=True(the default), the solution is iteratively repaired until no crossings remain (ormax_retriesis reached). This may cause the actual runtime to be up to(max_retries + 1)times the giventime_limit.- Parameters:
A β graph with allowed edges (if it has 0 edges, use complete graph)
capacity β maximum vehicle capacity
time_limit β [s] solver run time limit
vehicles β maximum number of vehicles (if None, let HGS-CVRP decide; clamped to the minimum for multi-root problems); the exact number of vehicles if
vehicles_exact=Truevehicles_exact β whether
vehiclesis the exact feeder count instead of an upper bound (requiresbalanced=True, a single root, andceil(T / capacity) <= vehicles <= T)seed β random seed for reproducibility
keep_log β attach solver log to the solution graph
repair β iteratively fix crossings (default True)
max_retries β maximum repair iterations
balanced β balance loads across feeders (per root, if multiple roots)
log_callback β callback to receive each log line produced by HGS-CVRP (only for single-root instances)
- Returns:
Solution topology S
- optiwindnet.baselines.hgs.iterative_hgs_cvrp(A: networkx.Graph, *, capacity: float, time_limit: float, vehicles: int | None = None, seed: int | None = None, max_retries: int = 10, keep_log: bool = False, complete: bool = False) networkx.Graph[source]ΒΆ
DEPRECATED: Backward-compatible alias of hgs_cvrp(), use it instead.