Python的有向循环图实用程序

dcggraph的Python项目详细描述


Python的有向循环图实用程序

安装

pip install dcggraph

说明

此包当前用于从给定的 有向图中允许循环的节点。有些要点需要澄清 向上混乱:

  • directed:表示两个节点之间的边只能在一个节点中移动 方向(尽管在相同的两个节点之间可以有两条方向相反的边)
  • predicated:意味着即使一个节点是可访问的,它仍然必须 通过预测试(即predicate(node) == True)以便 返回。
    • 这意味着图中实际上有两个搜索过滤器:
      1. 节点必须可以在没有任何过滤的情况下访问
      2. 节点必须通过谓词测试
  • cyclic:意味着如果从一个节点开始,然后跟随一组 路径,则可以在同一个节点结束。这让事情变得更加困难 如果你和达格一起工作。在

周期是棘手的

处理循环的主要技巧是让谓词返回3个状态:

  1. PASS:表示节点自信地传递谓词
  2. FAIL:表示节点确信谓词失败
  3. 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)

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
分别使用椭圆曲线密码对文本消息进行java加密和解密   java如何将JTable滚动到特定值?   java JSP登录注销简单web应用程序,使用bean在数据库中存在数据时返回false   java无法编译,未设置类路径,包不存在?   java为什么这一变量会受到影响?   集合为什么Java在Map中没有putIfAbsent(key,supplier)方法?   安卓在Java中计算仿真时间   java初始化方法在主类中的指定方法之前运行   java如何在hadoop的reduce中将genericWritable恢复为用户定义的可写?   如何使用java替换pdf中的文本   参数不适用于ASP服务器的java HttpPost   创建对象时的java NullPointerException   Java JPanel中的swing图形有问题,但它在一个框架中工作   java Android Studio在硬件设备上运行时出错   google api类路径的java空指针异常   java如何将InputStream转换为DataHandler?   java在多个Jetty服务器之间共享连接池