def prefix_extend(graph, path): revgraph = reverse(graph) # print(graph.edgelist) first = path[0] prefix = deque() visited = OD(zip(path, [True]*len(path))) edges = revgraph[first].edges choices = [e for e in edges if e not in visited ] while choices: # """ weights = np.array([np.e ** -float(len(graph[e].edges)) for e in choices]) + \ np.array([np.e ** -float(len(revgraph[e].edges)) for e in choices]) total = np.sum(weights) if total <= 0: break weights /= total first = np.random.choice(choices, p=weights) # """ # first = random.choice(choices) visited[first] = True prefix.appendleft(first) edges = revgraph[first].edges choices = [e for e in edges if e not in visited ] print("Extended path of %s with prefix %s" % (len(path), len(prefix))) prefix.extend(path) print("New Path:", prefix) verify_path(graph, prefix) return prefix
def prefix_extend(graph, path): revgraph = reverse(graph) # print(graph.edgelist) first = path[0] prefix = deque() visited = OD(zip(path, [True] * len(path))) edges = revgraph[first].edges choices = [e for e in edges if e not in visited] while choices: first = random.choice(choices) visited[first] = True prefix.appendleft(first) edges = revgraph[first].edges choices = [e for e in edges if e not in visited] print("Extended path of %s with prefix %s" % (len(path), len(prefix))) prefix.extend(path) print("New Path:", prefix) verify_path(graph, prefix) return prefix
def dfs_extend(graph, path): revgraph = reverse(graph) mod_path = OD(zip(path, [True]*len(path))) last, val = mod_path.popitem() mod_path[last] = True edges = graph[last].edges choices = [e for e in edges if e not in mod_path ] while choices: # """ weights = np.array([np.e ** -float(len(graph[e].edges)) for e in choices]) + \ np.array([np.e ** -float(len(revgraph[e].edges)) for e in choices]) total = np.sum(weights) if total <= 0: break weights /= total last = np.random.choice(choices, p=weights) # """ # last = random.choice(choices) mod_path[last] = True edges = graph[last].edges choices = [e for e in edges if e not in mod_path ] print("Extended path from %s to %s" % (len(path), len(mod_path))) verify_path(graph, mod_path.keys()) return mod_path.keys()