optiwindnet.pathfinding¶
Module Contents¶
- class optiwindnet.pathfinding.PathFinder(Gʹ: networkx.Graph, planar: networkx.PlanarEmbedding, A: networkx.Graph, *, branched: bool = True, iterations_limit: int = 15000, traversals_limit: int = 3, bad_streak_limit: int = 5, turn_limit: float | None = None)[source]¶
Router for feeders that would cross other routes if laid in a straight line.
PathFinder finds the shortest segmented (or detoured) routes for tentative feeders (i.e. those that were created without a check for crossings of other routes). The path-finding is performed when the instance is initialized, but a route set is returned only with a call to method
create_detours().Only edges in graph attribute
'tentative'or, lacking that, edges with the attribute'kind'with value'tentative'are checked for crossings.- Parameters:
G – the route set without detours
P – the planar embedding associated with A
A – the available links graph
branched – if True, any terminal can be linked to root, else only subtrees’ heads/tails
iterations_limit – maximum number of steps in the path-finding process
traversals_limit – maximum number of times a single portal may be traversed
bad_streak_limit – limit on how many steps in a row without finding an improved path the traverser is allowed to take
Example:
P, A = make_planar_embedding(L) # L represents the geometry of the location S = some_solver(A, ...) # S is a topology G_tentative = G_from_S(S, A) # G_tentative is almost a route set G = PathFinder(G_tentative, planar=P, A=A).create_detours()
Note
On instances with
capacity=2, the default values may not enable finding all the shortest feeders. Ifcrossings.find_geometric_crossings()reports any crossings, retry withtraversals_limit=10anditerations_limit=50000.- get_best_path(n: int)[source]¶
_.get_best_path(«node»)produces atuple(path, dists).pathcontains a sequence of nodes from the originalnetworkx.GraphG, from«node»to the closest root.distscontains the lengths of the segments defined bypaths.
- best_paths_overlay() networkx.Graph[source]¶
Merges the shortest paths for all nodes with
G.The output includes
G’s edges, excluding its feeders.- Returns:
Merged graph (pass to
plotting.gplot()orsvg.svgplot()).
- scaffolded() networkx.Graph[source]¶
Wrapper for
interarraylib.scaffolded().Also unmarks (as real route, not background mesh) every navigation-mesh hop crossed by a route fence.
interarraylib.scaffolded()cannot do this on its own: a contour edge inGmay be ashortened_contoursshortcut spanning several mesh hops through one shared clone, and onlyself.fences(built fromA’s midpaths during path-finding) has the fully expanded, conflict-resolved hop sequence.