._site

(Arne Babenhauserheide)
2012-07-25: now plots multiple runs as logscaled histogram.

now plots multiple runs as logscaled histogram.

diff --git a/sim.py b/sim.py
old mode 100644
new mode 100755
--- a/sim.py
+++ b/sim.py
@@ -4,6 +4,7 @@
 
 from random import random, choice
 import numpy as np
+import pylab as pl
 
 def randomnodes(num=8000):
     """Generate num nodes with locations between 0 and 1."""
@@ -91,14 +92,17 @@ def dofold(target, prev, net):
     for conn in connections:
         net[conn] = sorted([c for c in net[conn] if not c == prev] + [realtarget])
 
-def checkfold(target, prev, net, probability=0.7):
+def checkfold(target, prev, net, probability=0.07):
     """switch to the target location with some probability"""
     if random() > probability:
         return
     dofold(target, prev, net)
 
 def fold(net, num=10):
-    """do num path foldings."""
+    """do num path foldings.
+
+    :return: the lengths of all used routes."""
+    routelengths = []
     for i in range(num):
         nodes = list(net.keys())
         start = choice(nodes)
@@ -107,6 +111,8 @@ def fold(net, num=10):
             target = choice(nodes)
             
         route = findroute(target, start, net)
+        routelen = len(route)
+        routelengths.append(routelen)
         # fold all on the route except for the start and the endpoint
         for prev in route[1:-1]:
             try:
@@ -115,6 +121,7 @@ def fold(net, num=10):
                 idx = route.index(prev)
                 print (route[idx:], prev, target, idx, prev in route[:idx])
             checkfold(target, prev, net)
+    return routelengths
             
 
 def linklengths(net):
@@ -126,10 +133,33 @@ def linklengths(net):
     return lengths
 
 if __name__ == "__main__":
-    import numpy as np
     nodes = randomnodes()
     net = generateflat(nodes)
-    print (np.mean(linklengths(net)))
-    for i in range(100):
-        fold(net, 10)
-        print (np.mean(linklengths(net)))
+    lensnapshots = {}
+    lensnapshots[(0,0)] = linklengths(net)
+    print (np.mean(lensnapshots[(0,0)]))
+    foldperstep = 500
+    for run in range(2):
+        print("===", "run", run, "===")
+        for i in range(40):
+            lengths = fold(net, foldperstep)
+            lensnapshots[(run+1, i+1)] = [linklengths(net), lengths]
+            print (np.mean(lensnapshots[(run+1, i+1)][0]), np.mean(lensnapshots[(run+1, i+1)][1]))
+
+    for key, val in sorted(lensnapshots.items()):
+        run, i = key
+        linklen, routelen = val
+        # only plot one in 10 results
+        if i % 10: 
+            continue
+        pdf, bins, patches = pl.hist(linklen, 10000, cumulative=True, normed=True, histtype='step', label=str(run) + ", " + str(i*foldperstep) + ", " + str(routelen))
+        pl.semilogx()
+    pl.legend(loc="best")
+    pl.savefig("123.png")
+    
+
+
+
+
+
+