我需要在networkx 2.1中生成一个随机全连通有向图来评估非对称旅行商问题算法的性能。例如,生成一个包含100个节点的图,这些节点完全连接,边权重随机分配。图形是定向的(从节点i到节点j的边权重不一定等于从节点j到节点i的边权重)
想知道是否有一个networkx函数来生成这种有向图或一些示例代码。
我检查了networkx2.1(https://networkx.github.io/documentation/networkx-2.1/reference/generators.html?highlight=generator#module-networkx.generators.directed)留档中的定向生成器部分,但这些生成器似乎不符合我的要求。
Networkx没有这种生成器,因为它是一项非常特殊的任务。因此,您应该手动构建此图。您可以创建完整的有向图:
import networkx as nx
import random
N = 7
G = nx.complete_graph(N, nx.DiGraph())
然后为每个图形边指定随机权重:
for (start, end) in G.edges:
G.edges[start, end]['weight'] = random.random()
因此,您将获得所需的图形:
G.edges.data('weight')
OutEdgeDataView([(0, 1, 0.7188354727617898), (1, 0, 0.9755945178178834), ...
可能有几种选择,如何做到这一点。在这里,我只是使用迭代工具
列出了所有带有随机权重的加权边。然后我使用add_weighted_edges_from
来创建有向图。所以不会太长,我只使用3个节点。
import networkx as nx
import itertools
import random
G = nx.DiGraph()
weighted_edge_list = [(u,v,random.random()) for u,v in itertools.permutations(range(3),2)]
G.add_weighted_edges_from(weighted_edge_list)
G.edges(data=True)
> OutEdgeDataView([(0, 1, {'weight': 0.025851202944826346}), (0, 2, {'weight': 0.8067025754602839}), (1, 0, {'weight': 0.7729736390607577}), (1, 2, {'weight': 0.8724493159416196}), (2, 0, {'weight': 0.9049870220916731}), (2, 1, {'weight': 0.9636865700934618})])
我为java应用程序配置了以下参数-Xmx=46g,-Xms=46g,NewSize=2g。 我们没有为permgen配置大小,但在JCONSOLE中,它显示最大perm gen大小为83mb。 在运行稳定性测试时,我们可以看到,我在GC日志中随机得到以下内容。 [完整GC(永久发电完整)489.822:[CMS:11384171K- 我找不到这个GC调用的原因,因为有用于永久生成的可用空间(因为
问题内容: Go的库缺少生成64位数字的功能。大约四年来这是一个未解决的问题。同时,解决方法是什么样的? 问题答案: 最简单的方法是拨打两次: 另一个选择是调用(在Go 1.7中添加了 )以读取8个字节,然后使用该包从中获取值: 注意:作为状态文档,它始终读取与传递的切片长度相同的字节,并且始终返回错误,因此在这种情况下无需检查错误。 注意#2:您也可以使用代替,因为我们正在使用其所有字节生成一个
问题内容: 在java中如何生成随机数? 问题答案: 在Java 1.7或更高版本中,执行此操作的标准方法如下: 请参阅相关的JavaDoc。这种方法的优点是不需要显式初始化java.util.Random实例,如果使用不当,可能会引起混乱和错误。 但是,相反,没有办法明确设置种子,因此在有用的情况下(例如测试或保存游戏状态或类似情况),很难重现结果。在这种情况下,可以使用下面显示的Java 1.
每当我看到这行代码 后面总是有一个很长的序列号..这个数字是如何产生的?如果我想随机生成这个值,我该怎么做呢?谢谢你的帮助。
我想用骰子做一个游戏,我需要在其中加入随机数(以模拟骰子的侧面。我知道如何在1到6之间进行)。使用 不能很好地工作,因为当我运行程序几次时,我得到的输出是: 所以我想要一个每次都会生成不同随机数的命令,而不是连续5次生成相同的随机数。是否有命令可以执行此操作?
问题内容: 我需要生成介于0(含)到n(不含)之间的任意大随机整数。我最初的想法是调用nextDoublen并乘以n,但是一旦n变得大于2 53,结果将不再均匀分布。 BigInteger 具有以下可用的构造函数: public BigInteger(int numBits, Random rnd) 构造一个随机生成的BigInteger,该整数均匀地分布在0到(2 numBits -1)(包括0