我正在从一组节点构建一个Erdos-Renyi图,这些节点是不同类型的类对象。该类来自[blob示例](https://pythonprogramming.net/many-blob-objects-intermediate-python-tutorial/)
我从一个空图开始,创建红色和斑点对象的节点,但是要有一个鄂尔多斯-仁义图,我希望这些节点以概率p连接。对此类图使用Networkx语法可从头开始创建它。
我在[完整图表](Networkx: Creating a complete graph for a given set of nodes)上找到了一些类似的帖子,但这些随机图表对我没有帮助。
import pygame
import random
import networkx
from matplotlib import pyplot as plt
STARTING_BLUE_BLOBS = 10
STARTING_RED_BLOBS = 3
WIDTH = 800
HEIGHT = 600
WHITE = (255, 255, 255)
BLUE = (0, 0, 255)
RED = (255, 0, 0
class Blob:
def __init__(self, color):
self.x = random.randrange(0, WIDTH)
self.y = random.randrange(0, HEIGHT)
self.size = random.randrange(4,8)
self.color = color
def main():
blue_blobs = dict(enumerate([Blob(BLUE) for i in
range(STARTING_BLUE_BLOBS)]))
red_blobs = dict(enumerate([Blob(RED) for i in range(STARTING_RED_BLOBS)]))
Gb = nx.Graph()
for i in range(10):
Gb.add_node(blue_blobs[i])
for i in range(3):
Gb.add_node(red_blobs[i])
Gb = nx.erdos_renyi_graph(13,0.5)
nx.draw(Gb, with_labels=True)
plt.draw()
plt.show()
if __name__ == '__main__':
main()
我如何保留我的节点并使用它们创建一个随机图? 非常感谢你,
答案 0 :(得分:1)
从Wikipedia页面Erdős–Rényi model:
在G(n,p)模型中,通过随机连接节点来构造图。图形中的每个边均以概率p独立于其他边。
要基于预定的节点集创建ER图,只需执行以下操作:
networkx.Graph
。p
将边添加到图中。下面是一些类似python的伪代码,可以为您提供一个想法:
import random
import networkx as nx
from itertools import combinations
# probability for an edge to exist
p = 0.5
# ASSUMPTION: This array contains all desired nodes
nodes = [...]
g = nx.Graph()
g.add_nodes_from(nodes)
for u, v in combinations(g, 2):
if random.random() < p:
g.add_edge(u, v)
这应该使用一组预定的节点为您提供完全有效的ER图。请注意,这种方法在生成大量图形方面并不是特别有效。