当前位置:   article > 正文

Python生成依赖性应用的DAG(有向无环图)拓扑_随机生成有向无环图python

随机生成有向无环图python

因为研究方向设计到依赖性的应用,做实验需要用到一些随机的DAG(有向无环图)拓扑来作为应用的表示,找了找网上没有符合的代码,于是决定自己写个小脚本来生成大量随机的DAG拓扑。
我实验中要用到的依赖性应用拓扑类似于下面这种模式:在这里插入图片描述
观察到,DAG包括一个入口节点和一个出口节点,其余的节点都是具有依赖关系的中继节点
图中入口节点的入度和出口节点的出度都为0,其余任意节点都至少有一条入边和一条出边。
根据有向无环图的性质,每一个有向无环图中的所有节点能形成有限个拓扑序,拓扑序中的节点只能向后序的节点出边(即一条依赖边中的父节点在拓扑序中的顺序一定位于子节点前面)。那么给定一个拓扑序,只要通过按顺序遍历,以一定概率随机向后加边的形式,就能生成一个DAG。
根据我所需要应用的场景,拓扑图比较“窄”,因此我将除入口和出口之外中间节点的入度和出度都限制在2以内(也可以根据自己对形状的需求来调整参数)。
因为对遍历中的每对节点对,脚本都以一定概率加边或不加边,因此会出现没有出边或没有入边的中间节点。对没有入边的节点,添加一条入口节点到它的边,同理对没有出边的节点,添加一条它到出口节点的边。
在实际运行过程中发现,如果入口到出口节点有直连的边,形成的拓扑图会比较绕,因此脚本不会生成直连入口到出口的边。
最终代码如下:

import random
n = 8#节点数量
def prob_value(p):#一个按概率连边的函数
    q = int(10*p)
    l = [1]*q+[0]*
  • 1
  • 2
  • 3
  • 4
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/article/detail/52030
推荐阅读
相关标签
  

闽ICP备14008679号