aima/search.py
def RandomGraph(nodes=range(10), min_links=2, width=400, height=300,
                                curvature=lambda: random.uniform(1.1, 1.5)):
    """Construct a random graph, with the specified nodes, and random links.
    The nodes are laid out randomly on a (width x height) rectangle.
    Then each node is connected to the min_links nearest neighbors.
    Because inverse links are added, some nodes will have more connections.
    The distance between nodes is the hypotenuse times curvature(),
    where curvature() defaults to a random number between 1.1 and 1.5."""
    g = UndirectedGraph()
    g.locations = {}
    ## Build the cities
    for node in nodes:
        g.locations[node] = (random.randrange(width), random.randrange(height))
    ## Build roads from each city to at least min_links nearest neighbors.
    for i in range(min_links):
        for node in nodes:
            if len(g.get(node)) < min_links:
                here = g.locations[node]
                def distance_to_node(n):
                    if n is node or g.get(node,n): return infinity
                    return distance(g.locations[n], here)
                neighbor = argmin(nodes, distance_to_node)
                d = distance(g.locations[neighbor], here) * curvature()
                g.connect(node, neighbor, int(d))
    return g
def RandomGraph(nodes=range(10), min_links=2, width=400, height=300,
                                curvature=lambda: random.uniform(1.1, 1.5)):
    """Construct a random graph, with the specified nodes, and random links.
    The nodes are laid out randomly on a (width x height) rectangle.
    Then each node is connected to the min_links nearest neighbors.
    Because inverse links are added, some nodes will have more connections.
    The distance between nodes is the hypotenuse times curvature(),
    where curvature() defaults to a random number between 1.1 and 1.5."""
    g = UndirectedGraph()
    g.locations = {}
    ## Build the cities
    for node in nodes:
        g.locations[node] = (random.randrange(width), random.randrange(height))
    ## Build roads from each city to at least min_links nearest neighbors.
    for i in range(min_links):
        for node in nodes:
            if len(g.get(node)) < min_links:
                here = g.locations[node]
                def distance_to_node(n):
                    if n is node or g.get(node,n): return infinity
                    return distance(g.locations[n], here)
                neighbor = argmin(nodes, distance_to_node)
                d = distance(g.locations[neighbor], here) * curvature()
                g.connect(node, neighbor, int(d))
    return g
def RandomGraph ( nodes = range ( 10 ) , min_links = 2 , width = 400 , height = 300 , curvature = lambda : random . uniform ( 1.1 , 1.5 ) ) : g = UndirectedGraph ( ) g . locations = { } ## Build the cities for node in nodes : g . locations [ node ] = ( random . randrange ( width ) , random . randrange ( height ) ) ## Build roads from each city to at least min_links nearest neighbors. for i in range ( min_links ) : for node in nodes : if len ( g . get ( node ) ) < min_links : here = g . locations [ node ] def distance_to_node ( n ) : if n is node or g . get ( node , n ) : return infinity return distance ( g . locations [ n ] , here ) neighbor = argmin ( nodes , distance_to_node ) d = distance ( g . locations [ neighbor ] , here ) * curvature ( ) g . connect ( node , neighbor , int ( d ) ) return g
Construct a random graph, with the specified nodes, and random links.
    The nodes are laid out randomly on a (width x height) rectangle.
    Then each node is connected to the min_links nearest neighbors.
    Because inverse links are added, some nodes will have more connections.
    The distance between nodes is the hypotenuse times curvature(),
    where curvature() defaults to a random number between 1.1 and 1.5.
Construct a random graph with the specified nodes and random links . The nodes are laid out randomly on a ( width x height ) rectangle . Then each node is connected to the min_links nearest neighbors . Because inverse links are added some nodes will have more connections . The distance between nodes is the hypotenuse times curvature () where curvature () defaults to a random number between 1 . 1 and 1 . 5 .