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