annotate 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
rev   line source
bgneal@9 1 """ch2ex6.py - Program for Chapter 2.5, exercise 6.
bgneal@9 2
bgneal@9 3 This program generates random graphs with parameters n and p and computes the
bgneal@9 4 fraction of them that are connected.
bgneal@9 5
bgneal@9 6 """
bgneal@9 7 import string
bgneal@9 8
bgneal@9 9 from Graph import Vertex
bgneal@9 10 from RandomGraph import RandomGraph
bgneal@9 11
bgneal@9 12
bgneal@9 13 LABELS = string.letters + string.punctuation
bgneal@9 14
bgneal@9 15 def test_graph(n, p):
bgneal@9 16 """Generate a RandomGraph with parameters n & p and return True if the
bgneal@9 17 graph is connected, False otherwise.
bgneal@9 18
bgneal@9 19 """
bgneal@9 20 vs = [Vertex(c) for c in LABELS[:n]]
bgneal@9 21 g = RandomGraph(vs)
bgneal@9 22 g.add_random_edges(p)
bgneal@9 23 return g.is_connected()
bgneal@9 24
bgneal@9 25
bgneal@9 26 def test_p(n, p, num):
bgneal@9 27 """Generate num RandomGraphs with parameters n & p and return the number
bgneal@9 28 of graphs that are connected.
bgneal@9 29
bgneal@9 30 """
bgneal@9 31 count = 0
bgneal@9 32 for i in range(num):
bgneal@9 33 if test_graph(n, p):
bgneal@9 34 count += 1
bgneal@9 35
bgneal@9 36 return count
bgneal@9 37
bgneal@9 38
bgneal@9 39 def main(script_name, n=26, p=0.1, num=1, *args):
bgneal@9 40 """Generate num RandomGraphs with parameters n & p and print out the number
bgneal@9 41 of graphs that are connected.
bgneal@9 42
bgneal@9 43 """
bgneal@9 44
bgneal@9 45 n = int(n)
bgneal@9 46 p = float(p)
bgneal@9 47 num = int(num)
bgneal@9 48
bgneal@9 49 count = test_p(n, p, num)
bgneal@9 50 print count
bgneal@9 51
bgneal@9 52
bgneal@9 53 if __name__ == '__main__':
bgneal@9 54 import sys
bgneal@9 55 main(*sys.argv)