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")
+
+
+
+
+
+
+