本文整理汇总了Python中networkx.classes.digraph.DiGraph.node[child]方法的典型用法代码示例。如果您正苦于以下问题:Python DiGraph.node[child]方法的具体用法?Python DiGraph.node[child]怎么用?Python DiGraph.node[child]使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类networkx.classes.digraph.DiGraph
的用法示例。
在下文中一共展示了DiGraph.node[child]方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: dp_dag_general
# 需要导入模块: from networkx.classes.digraph import DiGraph [as 别名]
# 或者: from networkx.classes.digraph.DiGraph import node[child] [as 别名]
#.........这里部分代码省略.........
BP[n] = defaultdict(list) # backpointer corresponding to A[u][i]
for n_i, n in enumerate(
topological_sort(G, reverse=True)): # leaves come first
if debug:
print("#nodes processed {}".format(n_i))
children = G.neighbors(n)
if debug:
print('{}\'s children={}'.format(n, children))
reward = G.node[n][node_reward_key]
if len(children) == 1:
child = children[0]
if debug:
print('child={}'.format(child))
for i in A[child]:
c = cost_func(n, D, G,
[(i, child)])
assert isinstance(c, int)
if c <= U:
A[n][c] = A[child][i] + reward
D[n][c] = D[child][i] | {n}
BP[n][c] = [(child, i)]
elif len(children) > 1:
assert len(children) == 2
lchild, rchild = children
for i in A[lchild]:
c = cost_func(n, D, G,
[(i, lchild)])
assert isinstance(c, int)
if debug:
print('n={}, D={}, cost_child_tuples={}'.format(
n, D, [(i, lchild)])
)
print('c={}'.format(c))
if c <= U:
if A[n].get(c) is None or A[lchild][i] + reward > A[n][c]:
A[n][c] = A[lchild][i] + reward
D[n][c] = D[lchild][i] | {n}
BP[n][c] = [(lchild, i)]
for i in A[rchild]:
c = cost_func(n, D, G,
[(i, rchild)])
assert isinstance(c, int)
if c <= U:
if A[n].get(c) is None or A[rchild][i] + reward > A[n][c]:
A[n][c] = A[rchild][i] + reward
D[n][c] = D[rchild][i] | {n}
BP[n][c] = [(rchild, i)]
for i in A[lchild]:
for j in A[rchild]:
c = cost_func(n, D, G,
[(i, lchild), (j, rchild)])
assert isinstance(c, int)
lset, rset = D[lchild][i], D[rchild][j]
if c <= U:
if (A[n].get(c) is None or
A[lchild][i] + A[rchild][j] + reward > A[n][c]) and \
len(lset & rset) == 0:
A[n][c] = A[lchild][i] + A[rchild][j] + reward
D[n][c] = D[lchild][i] | D[rchild][j] | {n}
BP[n][c] = [(lchild, i), (rchild, j)]
if n == r: # no need to continue once we processed root
break
best_cost = max(xrange(U + 1),
key=lambda i: A[r][i] if i in A[r] else float('-inf'))
tree = DiGraph()
tree.add_node(r)
stack = []
if debug and len(stack) == 0:
print('stack empty')
print(A)
for n, cost in BP[r][best_cost]:
stack.append((r, n, cost))
while len(stack) > 0:
if debug:
print('stack size: {}'.format(len(stack)))
print('stack: {}'.format(stack))
parent, child, cost = stack.pop(0)
tree.add_edge(parent, child)
# copy the attributes
tree[parent][child] = G[parent][child]
tree.node[parent] = G.node[parent]
tree.node[child] = G.node[child]
for grandchild, cost2 in BP[child][cost]:
if debug:
print(grandchild, cost2)
stack.append((child, grandchild, cost2))
return tree
示例2: lst_dag
# 需要导入模块: from networkx.classes.digraph import DiGraph [as 别名]
# 或者: from networkx.classes.digraph.DiGraph import node[child] [as 别名]
#.........这里部分代码省略.........
print("total #nodes {}".format(len(ns)))
A, D, BP = {}, {}, {}
for n in ns:
A[n] = {} # maximum sum of node u at a cost i
A[n][0] = G.node[n][node_reward_key]
D[n] = {} # set of nodes included corresponding to A[u][i]
D[n][0] = {n}
BP[n] = defaultdict(list) # backpointer corresponding to A[u][i]
for n_i, n in enumerate(
topological_sort(G, reverse=True)): # leaves come first
if debug:
print("#nodes processed {}".format(n_i))
children = G.neighbors(n)
reward = G.node[n][node_reward_key]
if len(children) == 1:
child = children[0]
w = G[n][child][edge_cost_key]
for i in xrange(U, w - 1, -1):
if (i-w) in A[child]:
A[n][i] = A[child][i-w] + reward
D[n][i] = D[child][i-w] | {n}
BP[n][i] = [(child, i-w)]
elif len(children) > 1:
lchild, rchild = children
lw = G[n][lchild][edge_cost_key]
rw = G[n][rchild][edge_cost_key]
for i in A[lchild]:
c = lw + i
if debug:
print('n={}, D={}, cost_child_tuples={}'.format(
n, D, [(i, lchild)])
)
print('c={}'.format(c))
if c <= U:
if A[n].get(c) is None or A[lchild][i] + reward > A[n][c]:
A[n][c] = A[lchild][i] + reward
D[n][c] = D[lchild][i] | {n}
BP[n][c] = [(lchild, i)]
for i in A[rchild]:
c = rw + i
if c <= U:
if A[n].get(c) is None or A[rchild][i] + reward > A[n][c]:
A[n][c] = A[rchild][i] + reward
D[n][c] = D[rchild][i] | {n}
BP[n][c] = [(rchild, i)]
for i in A[lchild]:
for j in A[rchild]:
c = lw + rw + i + j
if c <= U:
if (A[n].get(c) is None or
A[lchild][i] + A[rchild][j] + reward > A[n][c]) and \
len(D[lchild][i] & D[rchild][j]) == 0:
A[n][c] = A[lchild][i] + A[rchild][j] + reward
D[n][c] = D[lchild][i] | D[rchild][j] | {n}
BP[n][c] = [(lchild, i), (rchild, j)]
# if n == r: # no need to continue once we processed root
# break
if debug:
print('A[r]', A[r])
best_cost = max(xrange(U + 1),
key=lambda i: A[r][i] if i in A[r] else float('-inf'))
if debug:
print("best_cost", best_cost)
tree = DiGraph()
tree.add_node(r)
stack = []
for n, cost in BP[r][best_cost]:
stack.append((r, n, cost))
while len(stack) > 0:
# if debug:
# print('stack size: {}'.format(len(stack)))
# print('stack: {}'.format(stack))
parent, child, cost = stack.pop(0)
tree.add_edge(parent, child)
# copy the attributes
tree[parent][child] = G[parent][child]
tree.node[parent] = G.node[parent]
tree.node[child] = G.node[child]
for grandchild, cost2 in BP[child][cost]:
# if debug:
# print(grandchild, cost2)
stack.append((child, grandchild, cost2))
return tree