Python的有向循环图实用程序
dcggraph的Python项目详细描述
Python的有向循环图实用程序
安装
pip install dcggraph
说明
此包当前用于从给定的 有向图中允许循环的节点。有些要点需要澄清 向上混乱:
- directed:表示两个节点之间的边只能在一个节点中移动 方向(尽管在相同的两个节点之间可以有两条方向相反的边)
- predicated:意味着即使一个节点是可访问的,它仍然必须
通过预测试(即
predicate(node) == True
)以便 返回。- 这意味着图中实际上有两个搜索过滤器:
- 节点必须可以在没有任何过滤的情况下访问
- 节点必须通过谓词测试
- 这意味着图中实际上有两个搜索过滤器:
- cyclic:意味着如果从一个节点开始,然后跟随一组 路径,则可以在同一个节点结束。这让事情变得更加困难 如果你和达格一起工作。在
周期是棘手的
处理循环的主要技巧是让谓词返回3个状态:
PASS
:表示节点自信地传递谓词FAIL
:表示节点确信谓词失败WAIT
:表示节点不确定它是否通过,并希望延迟提供 在看到更多节点之前有信心的回答(因为起点在循环图中很重要)
从谓词返回WAIT
状态的节点将被放入unresolved
列表中,并且每次另一个节点返回PASS
或{unresolved
列表中的任何剩余节点都将降级为FAIL
状态,因为它们无法下定决心,因此它们没有更多的机会给出真正的答案。在
对于我在图中使用谓词搜索的情况,这个算法似乎很有效。我是positive存在比这里实现的更好的算法。在
美国石油学会
其主要特点是预测图的压缩和搜索。 除了下面的代码片段外,还可以查看测试的用法示例
importrefromdcggraphimportDCGnode,DCGedge,DCGgraphfromdcggraph.searchimportPredicateResult,DCGsearchg=DCGgraph()n0=g.create_node("n0")n1=g.create_node("n1")n2=g.create_node("n2")n3=g.create_node("n3")n4=g.create_node("n4")g.create_edge(n0,n1)g.create_edge(n0,n2)g.create_edge(n1,n3)g.create_edge(n1,n4)defeven(node,visited,passed,failed):iffre.match("[a-z][02468]",node.name):returnPredicateResult.PASSelse:returnPredicateResult.FAILs1=DCGsearch(g,even)# reuse the search object to cache FAIL/PASS results between searchesassertEqual(len(s1.search(n0)),3)assertEqual(len(s1.search(n1)),1)assertEqual(len(s1.search(n2)),1)assertEqual(len(s1.search(n3)),0)assertEqual(len(s1.search(n4)),1)
- 项目
标签: