view ch2ex6.py @ 24:5c2c4ce095ef

A stab at the L(p)/L(0) plot. I still don't quite get how the graphs in the Watts and Strogatz paper were generated. My results have basically the same shape, but don't converge to 0. I'm not sure how this is possible if the rewire function does not remove edges.
author Brian Neal <bgneal@gmail.com>
date Thu, 03 Jan 2013 18:41:13 -0600
parents 9f1fccc13991
children
line wrap: on
line source
"""ch2ex6.py - Program for Chapter 2.5, exercise 6.

This program generates random graphs with parameters n and p and computes the
fraction of them that are connected.

"""
import string

from Graph import Vertex
from RandomGraph import RandomGraph


LABELS = string.letters + string.punctuation

def test_graph(n, p):
    """Generate a RandomGraph with parameters n & p and return True if the
    graph is connected, False otherwise.

    """
    vs = [Vertex(c) for c in LABELS[:n]]
    g = RandomGraph(vs)
    g.add_random_edges(p)
    return g.is_connected()


def test_p(n, p, num):
    """Generate num RandomGraphs with parameters n & p and return the number
    of graphs that are connected.

    """
    count = 0
    for i in range(num):
        if test_graph(n, p):
            count += 1

    return count


def main(script_name, n=26, p=0.1, num=1, *args):
    """Generate num RandomGraphs with parameters n & p and print out the number
    of graphs that are connected.

    """

    n = int(n)
    p = float(p)
    num = int(num)

    count = test_p(n, p, num)
    print count


if __name__ == '__main__':
    import sys
    main(*sys.argv)