2013-12-13 1 views
1

Я создал две случайные сети (Erdos-Renyi) с использованием R (и пакета igraph), которые имеют по 10 узлов. Каждый узел в обоих сетях, были рандомизированы с атрибутом 0 или 1.Связывание двух узлов в двух разных случайных сетях в R

Вот мой код, чтобы сделать это:

# Creates the first Erdos-Renyi graph, graph_a, with 10 nodes and edges with 
# p=0.2 
num_nodes <- 10 
prob <- 0.2 
graph_a <- erdos.renyi.game(num_nodes, prob, type=c("gnp", "gnm"), 
    directed=FALSE, loops=FALSE) 

# Randomly sets the attributes of the nodes of graph_a to either 0 or 1 
graph_a <- set.vertex.attribute(graph_a, "value", 
    value = sample(0:1, num_nodes, replace=TRUE)) 


# Creates the second Erdos-Renyi graph, graph_b, with 10 nodes and edges with 
# p=0.2 
graph_b <- erdos.renyi.game(num_nodes, prob, type=c("gnp", "gnm"), 
    directed=FALSE, loops=FALSE) 

# Randomly sets the attributes of the nodes of graph_b to either 0 or 1 
graph_b <- set.vertex.attribute(graph_b, "value", 
    value = sample(0:1, num_nodes, replace=TRUE)) 

мне нужно каким-то образом связать случайно выбранный узел из первый график, к случайно выбранному узлу из второго графика. Поэтому, если значение атрибута 0 или 1 выбранного узла из первого графика изменяется, значение атрибута выбранного узла из второго графика также должно изменяться (и наоборот).

Может ли кто-нибудь предложить решение о том, как этого достичь?

Большое спасибо.

+0

Запомните решение правила простого большинства? Ответ будет очень похож на ту часть, где вы проверили, будет ли узел обманут. –

+0

Это непонятно. Когда вы говорите «связать случайно выбранный узел» от a до b, достаточно выбрать два случайных числа в диапазоне 1:10? Как изменяется значение атрибута первого графика? Эти вещи не меняют самих себя. Или вы хотите добавить графики, а затем создать набор ребер, которые образуют перестановку от a до b? Будет ли это делать? Вы можете сделать graph_c = graph_a + graph_b, а затем добавить ребра. – Spacedman

+0

@Spacedman - Почему сборку случайного узла из каждой сети не хватит? Атрибуты изменяются в соответствии с простым правилом большинства, где атрибут узла изменяется от 1 до 0 (или от 0 до 1) в соответствии с атрибутами большинства его соседей. Например, если большинство соседей узла имеют значение 0, значение узла также изменилось на 0. Я не собираюсь добавлять графики вместе. O просто хотите подключить два узла. – LoneWolf

ответ

2

Определить отображение из узлов в a в узлы в b - это не должно быть перестановкой, если это вектор длиной 10 с позициями < = число узлов в b, которое будет применяться:

> perm=sample(10) 
> perm 
[1] 7 6 1 8 5 10 2 9 3 4 

таким образом, узел 1 в графе а случайным образом связан с узлом 7 графа б, узел 2 с карт к узлу 6 б и так далее.

Выберите случайный узел в graph_a:

> i=sample(10,1) 
> i 
[1] 7 # 7 was picked 

В настоящее время его:

> V(graph_a)$value[i] 
[1] 0 

Таким образом, мы переверните его:

> V(graph_a)$value[i] = 1 - V(graph_a)$value[i] 
> V(graph_a)$value[i] 
[1] 1 

Который один в Ь это отображается на?

> perm[7] 
[1] 2 

В настоящее время:

> V(graph_b)$value[2] 
[1] 1 

Так переверните его:

> V(graph_b)$value[perm[i]] = 1 - V(graph_b)$value[perm[i]] 
> V(graph_b)$value[perm[i]] 
[1] 0 

работу.

+0

Ответ отредактирован, но если вы не знаете, как создать случайное целое число в R, вам нужно вернуться к основам. – Spacedman