Note

This documents the development version of NetworkX. Documentation for the current release can be found here.

networkx.algorithms.traversal.beamsearch.bfs_beam_edges

bfs_beam_edges(G, source, value, width=None)[source]

Iterates over edges in a beam search.

The beam search is a generalized breadth-first search in which only the “best” w neighbors of the current node are enqueued, where w is the beam width and “best” is an application-specific heuristic. In general, a beam search with a small beam width might not visit each node in the graph.

Parameters
GNetworkX graph
sourcenode

Starting node for the breadth-first search; this function iterates over only those edges in the component reachable from this node.

valuefunction

A function that takes a node of the graph as input and returns a real number indicating how “good” it is. A higher value means it is more likely to be visited sooner during the search. When visiting a new node, only the width neighbors with the highest value are enqueued (in decreasing order of value).

widthint (default = None)

The beam width for the search. This is the number of neighbors (ordered by value) to enqueue when visiting each new node.

Yields
edge

Edges in the beam search starting from source, given as a pair of nodes.

Examples

To give nodes with, for example, a higher centrality precedence during the search, set the value function to return the centrality value of the node:

>>> G = nx.karate_club_graph()
>>> centrality = nx.eigenvector_centrality(G)
>>> source = 0
>>> width = 5
>>> for u, v in nx.bfs_beam_edges(G, source, centrality.get, width):
...     print((u, v))
...
(0, 2)
(0, 1)
(0, 8)
(0, 13)
(0, 3)
(2, 32)
(1, 30)
(8, 33)
(3, 7)
(32, 31)
(31, 28)
(31, 25)
(25, 23)
(25, 24)
(23, 29)
(23, 27)
(29, 26)