view ch4ex4.py @ 44:362d4ec7e794

Got a first draft Turing Machine working for chapter 6, exercise 4. Next I have to figure out how to draw it with a TMDrawer class.
author Brian Neal <bgneal@gmail.com>
date Wed, 16 Jan 2013 21:44:02 -0600
parents 15ff31ecec7a
children
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 matplotlib.pyplot as pyplot

from Graph import Vertex
from SmallWorldGraph import SmallWorldGraph

# Use Dijkstra or Floyd-Warshall to compute L
DIJKSTRA = True

# 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()
l0 = g.big_l3() if DIJKSTRA else g.big_l2()
print 'c0 =', c0, 'l0 =', l0

# compute data
p_vals = [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 = []
l_vals = []
for p in p_vals:
    g = SmallWorldGraph(vs, k, p)
    c_vals.append(g.clustering_coefficient() / c0)
    l = g.big_l3() if DIJKSTRA else g.big_l2()
    l_vals.append(l / l0)

p_vals.insert(0, 0.0)
c_vals.insert(0, 1.0)
l_vals.insert(0, 1.0)

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