view ch4ex4.py @ 23:74c9d126bd05

Working on the SmallWorldGraph exercises.
author Brian Neal <bgneal@gmail.com>
date Wed, 02 Jan 2013 16:50:55 -0600
parents
children 5c2c4ce095ef
line wrap: on
line source
"""This program performs item 4 in 4.4 exercise 4.

"Make a graph that replicates the line marked C(p)/C(0) in Figure 2 of the
paper. In other words, confirm that the clustering coefficient drops off slowly
for small values of p."

"""
import random
import matplotlib.pyplot as pyplot

from Graph import Vertex
from SmallWorldGraph import SmallWorldGraph


title = 'C(p)/C(0)'

# compute C(0)
n = 1000
k = 10
vs = [Vertex(str(i)) for i in range(n)]
g = SmallWorldGraph(vs, k, 0.0)
c0 = g.clustering_coefficient()
print 'c0 =', c0

# compute data
p_vals = [0,
          0.0001, 0.0002, 0.0004, 0.0006, 0.0008,
          0.001, 0.002, 0.004, 0.006, 0.008,
          0.01, 0.02, 0.04, 0.06, 0.08,
          0.1, 0.2, 0.4, 0.6, 0.8,
          1.0]

c_vals = []
for p in p_vals:
    g = SmallWorldGraph(vs, k, p)
    c_vals.append(g.clustering_coefficient() / c0)

# plot graph
pyplot.clf()
pyplot.xscale('log')
pyplot.yscale('log')
pyplot.title('')
pyplot.xlabel('p')
pyplot.ylabel('C(p)/C(0)')
pyplot.plot(p_vals, c_vals, label=title, color='green', linewidth=3)
pyplot.legend(loc=4)
pyplot.show()