Я хочу реализовать следующую модель:
Взять 2 * n узлов.Первые n узлов представляют особей типа A, а остальные - типа B.
С вероятностью p существует грань между индивидуумом из A и другим из B.
Я сделал это таким образом, но я хочу, чтобы это было быстрее:
def modified_Erdos_Renyi(n,p):
G = nx.empty_graph(2*n)
for i in range (n):
for j in range(n,2*n):
r = rd.random()
if r<=p:
G.add_edge(i,j)
return G
Я увидел, что в традиционных источниках networkx есть быстрый алгоритм для традиционного G_np:
def fast_gnp_random_graph(n, p):
G = empty_graph(n)
G.name="fast_gnp_random_graph(%s,%s)"%(n,p)
w = -1
lp = math.log(1.0 - p)
v = 1
while v < n:
lr = math.log(1.0 - random.random())
w = w + 1 + int(lr/lp)
while w >= v and v < n:
w = w - v
v = v + 1
if v < n:
G.add_edge(v, w)
return G
Как я могу реализовать этот алгоритм с моей модифицированной моделью?