physarum_route — GRAPH flow op

• Data kinds: image2d → table

• Call: import fullseye as fs; fs.ledger.physarum_route(cost, start=None, end=None, connectivity=4, dt=0.1, max_iters=5000, tol=1e-06, frac=0.5, snapshots=0) (to call the implementation directly, import physarum_search; physarum_search.physarum_route(cost, start=None, end=None, connectivity=4, dt=0.1, max_iters=5000, tol=1e-06, frac=0.5, snapshots=0); from the registry, opsgraph.get("physarum_route"))

Usage

Minimum-cost route through a cost image found by the slime mould's tube dynamics.

Every pixel is a node; neighbouring pixels (`connectivity` 4 or 8) are joined by a tube of

length `(c_u + c_v) / 2 (times sqrt(2)` on diagonals), so the length of a route equals

the sum of the pixel costs it visits minus half the cost of its two ends — the same quantity

`skimage.graph.route_through_array(..., geometric=False)` minimises (it counts both ends

fully). `start / end are (row, col)`; defaults are the top-left and bottom-right

corners. Dynamics and convergence as in :func:graph_physarum_path.

Returns `conductance` (an image: each pixel's thickest incident tube, 1 on the route

when converged), `path ((k, 2) pixel coordinates start → end), path_cost` (sum of

the pixel costs along it, comparable to `route_through_array), route_length` (sum

of the tube lengths), `flow_length, iters, converged, history`, and, with

`snapshots = m > 0, snapshots (m` conductance images at evenly spaced

iterations, the last one final) for watching the tubes thicken, `snapshot_iters` and

`snapshot_cost = sum L_e D_e` at those iterations (Bonifaci's Lyapunov function, which

never increases in continuous time).

Raises `ValueError: cost not a 2-D finite image of positive values; start / end`

outside the image or equal; `connectivity not 4 or 8; and as :func:graph_physarum_path`.

References (sample data, literature)

• Sample-data catalog (download URLs / licences) — 2-D uses skimage.data (BSD/public domain) plus synthetic images; 3-D lists download URLs for real data sources (Stanford, PDS, …).

• Operator provenance and references — the sources of the research/methods this op family came from.

• The canonical algorithm (author, year) and its uses are named in the family usage guide above.

Runnable examples (verified samples that actually call this op)

• poc_physarum_maze — py -3.11 examples/poc_physarum_maze.py

Ops the type connects to (they accept table as input)

graph_edge_consensus · graph_core_persistence · tree_morphometry · tree_sholl · tree_run_length

Same category (flow)

graph_physarum_path · graph_physarum_transport · physarum_transport_image


*Provenance: physarum_search.py — GRAPH operator registry. This per-op note is generated by tools/opdocs.py md (do not hand-edit).*

© 2026 Kazufumi Furuse — Fullseye operator documentation. Licensed under Apache-2.0.