use a proper wraparound metric (dist())
diff --git a/sim.py b/sim.py
--- a/sim.py
+++ b/sim.py
@@ -8,6 +8,10 @@ import pylab as pl
import bisect
from copy import deepcopy
+def dist(loc0, loc1):
+ """return the wraparound distance of 2 nodes in the [0,1) space."""
+ return min((loc0-loc1)%1, (loc1-loc0)%1)
+
def randomnodes(num=1000):
"""Generate num nodes with locations between 0 and 1."""
nodes = set()
@@ -99,12 +103,12 @@ def closest(target, sortedlist):
"""return the node which is closest to the target."""
if not sortedlist:
raise ValueError("Cannot find the closest node in an emtpy list.")
- dist = 1.1
+ dis = 1.1
for n in sortedlist:
- d = abs(n - target)
- if d < dist:
+ d = dist(n,target)
+ if d < dis:
best = n
- dist = d
+ dis = d
else:
return best
return best
@@ -179,7 +183,7 @@ def linklengths(net):
lengths = []
for node, targets in net.items():
for t in targets:
- lengths.append(abs(t-node))
+ lengths.append(dist(t, node))
return lengths
if __name__ == "__main__":