Есть ли способ разрешить параллельные ребра при создании случайной сети графов? - PullRequest
0 голосов
/ 07 августа 2020

Как сказано в вопросе. В моих сетях много параллельных ребер, например, у одной 18 вершин и 693 ребра.

LpOTb.dc.rd <- list()
for (x in seq_len(1000L)) {
  LpOTb.dc.rd[[x]] <- erdos.renyi.game(18, 
                                       693,
                                       type = "gnm",
                                       loops = T)
}

Я хотел бы создать случайную сеть для сравнения, но я продолжаю получать сообщение об ошибке:

Error in erdos.renyi.game(18, 693, type = "gnm", loops = T) : 
At games.c:703 : Invalid number (too large) of edges, Invalid value

Я бы предпочел не упрощать свои сети и учитывать случайные веса ребер, в основном потому, что их более 30, и мне пришлось бы переделать все мои метрики для своих сетей.

1 Ответ

0 голосов
/ 07 августа 2020

Вы можете создать свой собственный случайный граф с 18 вершинами и 693 ребрами, используя graph_from_data_frame. Чтобы соответствовать приведенному выше коду, я создал неориентированный граф, разрешающий циклы.

library(igraph)
Start = sample(18, 693, replace=TRUE)
End   = sample(18, 693, replace=TRUE)
df = data.frame(Start, End)

g = graph_from_data_frame(df, directed=FALSE)
vcount(g)
[1] 18
ecount(g)
[1] 693

Если вы хотите сгенерировать несколько таких графиков, вы можете воспроизвести c код в предыдущем ответе упоминается в комментариях.

library(igraph)
set.seed(1)
gs <- list()
for (x in seq_len(100L)) {
    Start = sample(18, 693, replace=TRUE)
    End   = sample(18, 693, replace=TRUE)
    df = data.frame(Start, End)
    gs[[x]]= graph_from_data_frame(df, directed=FALSE)
}
...